サーバの監視結果をTeamsへ通知する
投稿日: / 更新日:
弊社では、最近テレワークで仕事進めることが多くなってきました。
皆さんはテレワークで、社内のコミュニケーションツールとして何を使われていますか?
Slack? Teams? はたまたLINE Worksだったりするのでしょうか。
客先へ訪れる際、よくTeamsを使っていることをよく耳にします。
今回は、Hinemosでサーバを管理した際に通知する先として、Teamsだった場合の方法について紹介したいと思います。
実施するステップは大まかに3ステップになります。
- 通知したいTeamsのチャンネルにIncoming Webhookを設定
- 通知するためのスクリプトを作成
- Hinemosマネージャにコマンド通知を作成
なお、この記事では以下のことは紹介しません。
- @person @channel にメッセージを飛ばす
- メッセージの詳しい装飾方法
それでは、順に実施していきます。
①Incoming Webhookを設定する
チャンネル一覧から、該当チャンネル名の右側にある「・・・」を選択します。
開いたメニューから「コネクタ」を選択します。
“Incoming Webhook”を探し、「追加」または「構成」を選択します。
webhookの名前、webhookのイメージ画像を設定し、「作成」を選択します。
すると、webhookが作成されます。後ほどスクリプトに利用するのでコピーして保存しておきます。
②Managerサーバに通知スクリプトを作成し配置する
Hinemosサーバに以下のスクリプトを任意の場所に配置します。
teams_send_message.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#!/bin/bash # 引数 # $1: #[MONITOR_ID] => 監視項目ID # $2: #[GENERATION_DATE] => 出力日時 # $3: #[PRIORITY_NUM] => 重要度 # $4: #[MESSAGE] => 監視結果詳細 # webhookのURL設定 token="https://XXX.webhook.office.com/webhookb2/xxxxxxxxx...." # 引数の設定 monitor_id=$1 generation_date=$2 message=$4 if [ $3 -eq '0' ]; then priority="危険" elif [ $3 -eq '1' ]; then priority="不明" elif [ $3 -eq '2' ]; then priority="警告" elif [ $3 -eq '3' ]; then priority="情報" fi # 表示するメッセージをJSON形式にフォーマットする json_info=$(cat << EOS { "\$schema": "https://adaptivecards.io/schemas/adaptive-card.json", "version": "1.0", "@type": "MessageCard", "@context": "http://schema.org/extensions", "themeColor": "0076D7", "summary": "Hinemos Notify", "sections": [ { "activityTitle": "**Hinemos Notify**", "facts": [ { "name": "監視項目ID", "value": "${monitor_id}" }, { "name": "日時", "value": "${generation_date}" }, { "name": "重要度", "value": "${priority}" }, { "name": "監視結果詳細", "value": "${message}" }, ], "markdown": true } ] } EOS ) # POSTリクエストとしてWebhookURLに送信 /usr/bin/curl -H 'Content-Type: application/json' -d "${json_info}" "${token}" |
このスクリプトは、Hinemosマネージャの通知に設定した以下の4つのメールテンプレートの置換文字列を引数として取得します。
- #[GENERATION_DATE] (出力日時)
- #[PRIORITY_NUM] (監視結果)
- #[MESSAGE](出力メッセージ)
- #[MONITOR_ID](監視項目ID)
取得した値を、TeamsへPOSTするために、json形式へフォーマットします。
どのように記載すればいいかは、以下の公式サイトを参考にしました。
Designing Outlook Actionable Message cards with the Adaptive Card format
④Hinemosに監視設定を行う
以下のようにコマンド通知を設定します。
コマンドには以下の内容を入力します。
1 |
sh /home/ec2-user/teams_send_message.sh #[MONITOR_ID] "#[GENERATION_DATE]" #[PRIORITY_NUM] "#[MESSAGE]" |
以上で、下準備は完了です。
試しにPING監視を実行してみます。
以下のように設定してみました。
⑤実行!!!!
以下のように表示されます。
⑥おわりに
いかがでしたでしょうか。
今回は、基本的な通知方法を実施してみました。Teamsにも通知ができると、障害が発生した際に初動が早くなりそうです。
TeamsのAPIを見てみると、メッセージにアクションボタンや、チェックボックスなど設定できるみたいです。
今回みたいにメッセージだけではなく、Hinemosが提供しているメンテナンススクリプトや、コマンドラインツールと併用すると、
ボタンを押しただけで情報取得、Hinemosマネージャの内部DBのメンテとかできちゃいそうですね。
記事は古くなってしまいますが、だいぶ前にSlackに通知する方法もご紹介しています。
Slackが目当てで来られた方は、ぜひ参考にしてください。
監視結果をslackで通知する
では、お疲れさまでした!