この投稿は、2023年JINSのアドベントカレンダー9日目の記事です。
自己紹介
JINSのITデジタル部所属の内田(@j-uchi)と申します。
メインはアプリケーションを(TypeScriptなWebアプリが多い)書く人ですが、色々やってます。
あらすじ
JINSでは国内店舗のネットワーク機器にCiscoのMerakiシリーズを採用しています。
500店舗近くあると、毎日日本のどこかで通信障害が発生します。
私が入社した直後は、これらのアラートは私の先輩社員がメールアラートを見て確認していたのですが、瞬断等のすでに復旧したものもメールが届くので、その確認に毎日膨大な時間を割いていました。
この確認の負担を少しでも減らすのが、私のJINS生活最初のお仕事でした。
目的
- 店舗でのネットワーク異常を検出する
- 瞬断に関してはノイズになるので通知しない
- 一定時間異常が継続した場合に通知する
- 異常とは
- NW機器(ルーター, スイッチ, 無線AP)の電源断
- 上流回線の通信不能
- AWSやデータセンターに設置されているVPNサーバーとの接続断
- 社内コミュニケーションツールである、Google Chatに通知する
これらをTypeScriptで書かれたスクリプトを定期実行することで実現しました。
どうやって?
↓こんな感じでGoogle Chatに通知が来るようになりました。
Google ChatのWebhookの設定は非常に簡単で、チャットスペースのアプリと統合
>Webhook
の画面からWebhookを追加し、そこに表示される専用のURLにテキストをPOSTするだけです。
import axios from 'axios';
const WEBHOOK_URL =
'https://chat.googleapis.com/v1/spaces/xxxxxxxxxx';
const postMessage = async (message:string) => {
await axios.post(WEBHOOK_URL, { text: message });
}
postMessage("ほげほげ");
Google Chatのテキストフォーマット
MerakiのAPIを叩くサンプルコードは前回の記事に貼ったので今回は割愛します。
最後に
この機構を運用するようになってから、店舗のネットワーク障害発生に素早く気づくようになり、障害発生を見落とす事故も減りました。
結果的にネットワーク障害を原因としてお客様や店舗の従業員にに不便をおかけする頻度も減りました。
明日は @tskoma さんの DatadogをTerraformし始めたはなし です!お楽しみに!