お久しぶりです。インフラ・開発部のyanagitaです。
変わらず宮崎からリモートワークを行っております。
弊社ではサービス障害や優先度の高いインシデントの発生時に開発メンバー全員へのメール通知と合わせて、
担当のスケジューリングとエスカレーション機能を持つ外部サービス(https://www.pagerduty.com/)を使用していち早く対応を行っています。
ただ、中にはそれほど優先度の高くないインシデントや限られたメンバーのみで検知したい事があります。
そこで今回はその条件を満たす例として、Monit + Slackのwebhookを利用してSlackに通知する方法を紹介したいと思います。
とりあえず、全体図
全体図は非常にあっさりしています。
前述したとおり、サーバ内の異常をMonitで検知して、MonitからSlackのWebhookにメッセージを送信するShellをキックする流れとなります。
では、手順を紹介します。
着信Webフックの登録
着信Webフックとは、着信Webフック用のURLに向けてメッセージをPostするだけでSlack上にメッセージを表示することできるインテグレーション用のアプリになります。
まず、着信Webフックの登録に移ります。
※ サインオン前提で進めます。
登録はアイコン下の「設定を追加」から行います。ざっと手順は下記の通りです。
メッセージを投稿するチャンネルの選択する。
以下の項目を他の着信Webフックと被らないよう変更する。
・着信Webフック名
・アイコン
ここでWebhook URLの値がPost用のURLになりますので取扱いにご注意ください。
通知Shellの実装
Webhook URLをキックするShellを実装します。以下は簡略化したサンプルです。
/opt/slack/SlackNotification.sh
#!/bin/bash # 着信Webフックで発行したWebhook URL webHookUrl="https://hooks.slack.com/services/XXXXXXXX/YYYYYYYY/0123456789abcdefg" # メッセージの情報はjson形式で定義します。 # パラメータの詳細はこちら(https://api.slack.com/docs/message-attachments#when_to_use_attachments) payload='payload={ "attachments": [ { "color": "warning", "fields": [ { "title" : "サンプル警告タイトル", "value" : "サンプル警告メッセージ" } ] } ] }' # Webhoookに向けてメッセージ情報をPostします。 curl -s -X POST --data-urlencode "$payload" $webHookUrl
出力結果はこんな感じです。
メッセージの表示フォーマットは細かくカスタマイズ可能です。気になる方はこちらをご確認ください。
payloadのメッセージ確認はこちらで行うも事ができます。
Message Formatting | Slack
Monitの設定
Monitではサーバ内の細かいチェックが可能ですが、今回はlogファイルにworningが出力されたタイミングでSlackに通知させたいと思います。
Monitの設定は以下の通りです。
check file sample_notification with path /opt/batch/sample_batch/logs/application.log if match "WORN" then exec "/opt/slack/SlackNotification.sh"
check fileで監視ファイルを指定し、3行目のif match句で警告ログを検知させます。検知した際は通知Shellをキックさせるためexec句で通知Shellのパスを指定します。
この時、monitの設定で検知時にメールを送信する設定を入れている場合は、通知をSlackのみに限定したいのでnoalert句でメール通知を停止させます。
check file sample_notification with path /opt/batch/sample_batch/logs/application.log noalert xxxxxxxx@test.astamuse.co.jp if match "WORN" then exec "/opt/slack/SlackNotification.sh"
以上の工程で簡単にSlackへの通知が可能になります。
最後に
monit+webhookの組み合わせでSlackへの簡単な通知を紹介ました。
通知Shellの実装次第で詳細な情報の通知することもできますし、webhookの追加開発を行えば誰が対応しているかSlack上で共有することも可能です。
アスタミューゼではまだまだエンジニア&デザイナを募集しています。 気になる方は下からご応募下さい!新しい出会いをメンバー一同お待ちしてます!