はじめに
Slackというチャットツールに
- 誰かログイン/ログアウトした
- 誰か死んだ
みたいなイベントを通知するようにします。
前回書いたCentOS7 + Systemd でMinecraftサーバーの起動/自動起動/自動再起動の続きです。
Slackとは?
Slackは今イケイケなナウいチャットツールです。
Skypeとかの仲間ですね。かなり使いやすいです
色々なサービスと連携できるようになっているのでその仕組み利用します。
ログを見る方法
前回systemdを使ってMinecraftサーバーを起動するようにしました。
ログもよろしくやってくれると書いておきながらログを見る方法を紹介してませんでした。
次のコマンドでログを表示することができます。
journalctl -a -o cat -u minecraft_server
systemdを使うとjournaldというやつがログを取るようになります。
journalctl
コマンドはjournaldで貯めたログを見るためのコマンドです。
通知の仕組み
ログの確認方法もわかったところで、今回つくり上げる仕組みの全体像です。
journaldで貯めているログをfluentdというツールを使ってSlackに投げます。
fluentdはログ収集ツールです。収集だけでなく、集めたログをまたどこかへ転送するような中継もしてくれます。
SlackのIntegration設定
Slackへ通知するための、Incoming Webhook URLというものを取得します。
まずはSlackのメニューの「Configure Integrations」をクリックしてIntegrationの設定画面を開きます。
下の方に「Incoming Webhooks」というのがあるので「View」ボタンをクリックしてください。
設定画面が表示されます。
通知したいチャンネルを選択して「Add Incoming WebHooks Integration」ボタンをクリックしてください。
これでWebhook用のURLができました。
下の方の「Copy URL」をクリックするとURLがクリップボードにコピーされます。
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の設定ファイルを編集してください。
<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
に作成してください。
# !/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
というファイル作成してください。
[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に通知されます。