こんにちは、TAMの石川です。
今回は、DRBDの動機状況をリアルタイムでSlackを利用して確認する方法を纏めてみました。
副題は:Slackを活用する、ターミナルに張り付いていなくてもよい「待ってる時間」です!
当時、私はDRBDの障害対応を実施しており、DRBDの同期を確認したいのと、どこまで進んだのかリアルタイムで見たい!という欲求から本ツールの利用を思いつきました。
改良等で別の使い方もあるかもしれませんが、こんなことができる、ということを共有できればと思います。
前提条件
(1)通知スクリプト(コマンド)を実行するサーバがインターネットにつながっていること
※インターネット側からのIncommingは不要
※外部(Slackのサーバ)向けの443ポートが空いていること。
(2)SlackのIncomingWebhookが利用できること
※以下のコードにWebhookのURLは入っていますが、インストール者のSlackアカウントが生きている間のみ有効です。もしインストール実行者のアカウントが削除された場合は各自取り直しとなります。
Webhookの使い方はSlackのヘルプページ参照。
Slack での Incoming Webhook の利用
設定方法
(1)Slackの転送先のWebHookアドレスを用意
まずは、「App」タブからIncommingWebhookを検索し、Addします。




(2)動作確認
動作確認のため、インターネットにつながるサーバから以下コマンドを投入します。
確認コマンド:
curl -X POST --data-urlencode "payload={"channel": "#general", "username": "webhookbot", "text": "This is posted to #general and comes from a bot named webhookbot.", "icon_emoji": ":ghost:"}" <エンドポイント用URL>
※上記curlコマンドは「Setup Instructions」を展開しても取得できます。
※また、必要に応じてチャンネル名の変更をお願いします。
チェンネル名は以下の接頭語が必要
@~:プライベートチャンネルorDM
#~:パブリックチャンネル


成功すると、Slackにこんな感じで流れます。


(3)状況を確認したいコマンドを用意
ここでは、dateコマンドを利用します。
コマンド:date ‘+%Y%m%d%H%M%S’
(4)コマンド結果をPayloadの中に組み入れる
あとは、そのコマンド結果をPayloadの中に組み入れれば、Slackでモニターする設定の完了です。
必要に応じて、表示文字列の加工とか実施すると、いろいろな監視・状況把握のツール、定期的な状況確認等幅広く使えるかと思います。
while :; do SYNCSTATUS=$(date '+%Y%m%d%H%M%S') ; curl -X POST --data-urlencode "payload={\"channel\": \"@takashi.ishikawa\", \"username\": \"webhookbot\", \"text\": \"${SYNCSTATUS}\", \"icon_emoji\": \":ghost:\"}" <エンドポイント用URL>; sleep 60 ; done


その他サンプル
drbdの同期ステータスをチェックして、同期が終了したら、スクリプトを停止するコードです。
起動は手動を想定し、nohupコマンドで、セッションが切れてもプロセスが残るように起動します。
同期後、プロセスは自動で停止するが、スクリプトファイル、および、nohupコマンドによる標準出力のログファイルは残るため、後で人手での削除が必要となります。
※シグナル(kill -HUP)を受信したら、ログとスクリプトを削除するようにもできるが、未検証です。
1.スクリプトの設置(2行目先頭の「#」はプロンプトを示す)
# cat <<'EOF' >check_drbd_sync.sh
#!/bin/sh
while :; do
SYNCSTATUS=$(cat /proc/drbd | grep "sync'ed:")
if [ "${SYNCSTATUS}" != "" ]; then
curl -X POST --data-urlencode "payload={\"channel\": \"@takashi.ishikawa\", \"username\": \"webhookbot\", \"text\": \"${SYNCSTATUS}\", \"icon_emoji\": \":ghost:\"}" <エンドポイント用URL>
else
SYNCSTATUS="Finish syncing."
curl -X POST --data-urlencode "payload={\"channel\": \"@takashi.ishikawa\", \"username\": \"webhookbot\", \"text\": \"${SYNCSTATUS}\", \"icon_emoji\": \":ghost:\"}" <エンドポイント用URL>
exit
fi
sleep 300
done
EOF
2.スクリプト起動
(19行目先頭の「#」はプロンプトを示す)
# nohup sh check_drbd_sync.sh &
3.事後作業(作成したスクリプトとnohupのログ)
(22行目先頭の「#」はプロンプトを示す)
# rm -i check_drbd_sync.sh nohup.out
以上、今回はDRBDの動機状況をリアルタイムでSlackを利用して確認する方法を纏めてみました。
