minecraft
Slack
centos7

MinecraftサーバーのイベントをSlackに通知する

More than 1 year has passed since last update.

はじめに

Slackというチャットツールに

  • 誰かログイン/ログアウトした
  • 誰か死んだ

みたいなイベントを通知するようにします。

前回書いたCentOS7 + Systemd でMinecraftサーバーの起動/自動起動/自動再起動の続きです。

Slackとは?

Slackは今イケイケなナウいチャットツールです。
Skypeとかの仲間ですね。かなり使いやすいです:smile:

色々なサービスと連携できるようになっているのでその仕組み利用します。

ログを見る方法

前回systemdを使ってMinecraftサーバーを起動するようにしました。
ログもよろしくやってくれると書いておきながらログを見る方法を紹介してませんでした。

次のコマンドでログを表示することができます。

journalctl -a -o cat -u minecraft_server

systemdを使うとjournaldというやつがログを取るようになります。
journalctlコマンドはjournaldで貯めたログを見るためのコマンドです。

通知の仕組み

ログの確認方法もわかったところで、今回つくり上げる仕組みの全体像です。

スクリーンショット 2015-09-19 22.45.52.png

journaldで貯めているログをfluentdというツールを使ってSlackに投げます。
fluentdはログ収集ツールです。収集だけでなく、集めたログをまたどこかへ転送するような中継もしてくれます。

SlackのIntegration設定

Slackへ通知するための、Incoming Webhook URLというものを取得します。

まずはSlackのメニューの「Configure Integrations」をクリックしてIntegrationの設定画面を開きます。

1.png

下の方に「Incoming Webhooks」というのがあるので「View」ボタンをクリックしてください。

2.png

設定画面が表示されます。
通知したいチャンネルを選択して「Add Incoming WebHooks Integration」ボタンをクリックしてください。

3.png

これでWebhook用のURLができました。
下の方の「Copy URL」をクリックするとURLがクリップボードにコピーされます。

4.png

fluentdセットアップ

では早速fluentdをMinecraftサーバーにインストールしましょう。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

fluentd用のプラグインを2つインストールします。

td-agent-gem install fluent-plugin-grep
td-agent-gem install fluent-plugin-slack

fluentdの設定ファイルを編集してください。

/etc/td-agent/td-agent.conf
<source>
  type tcp
  port 24425
  format json
  tag minecraft.raw
</source>

<match minecraft.raw>
  type grep
  input_key MESSAGE
  regexp joined|left|drown|slain
  tag minecraft.greped
</match>
# regexpに通知したいメッセージの条件を正規表現で書く

<match minecraft.greped>
  type slack
  webhook_url https://hooks.slack.com/services/XXX/YYY/ZZZ
  channel minecraft
  username Minecraft Server
  icon_emoji :metal:
  message_keys MESSAGE
  flush_interval 1s
</match>
# webhook_urlは取得したWebhook URL
# channelは通知するチャンネル
# usernameは通知するときに表示するユーザー名
# icon_emojiは通知するときに表示するアイコンを絵文字で指定できる

最後に、fluentdを有効化して起動します。

systemctl enable td-agent
systemctl start td-agent

通知設定

journaldのMinefraft Serverログをfluentdに送信する設定をします。
これにもsystemdを使います。

送信するためにNetcatというソフトをインストールします。

yum install -y nc

次のようなログを送信するスクリプトを/home/minecraft/minecraft/transfer_logに作成してください。

/home/minecraft/minecraft/transfer_log
#!/bin/bash

/usr/bin/journalctl -af -o json -u minecraft_server | /usr/bin/nc 127.0.0.1 24425

スクリプトに実行権限をつけます。

chmod +x /home/minecraft/minecraft/transfer_log

次のような/etc/systemd/system/transfer_minecraft_log.serviceというファイル作成してください。

/etc/systemd/system/transfer_minecraft_log.service
[Unit]
Description=Transfer Minecraft Server Log
After=minecraft_server.service td-agent.service

[Service]
ExecStart=/home/minecraft/minecraft/transfer_log
Restart=always

[Install]
WantedBy=multi-user.target

最後に通知用スクリプトを起動しましょう!

systemctl daemon-reload
systemctl enable transfer_minecraft_log
systemctl start transfer_minecraft_log

以上です!
うまくいっていればこんな感じでSlackに通知されます。

スクリーンショット 2015-09-20 0.10.47.png