🐧

障害支援するslackbotを作ってみた

2024/03/17に公開

はじめに

動画配信事業の会社でSREをやっているkakecyanです。
早いもので新卒入社して丸2年が経とうとしています。

今回は私が1年目の時に作成を行い、現在も運用を続けているbotについて
振り返りも兼ねてつらつらと書き進めようかなと思います。

障害支援するslackbotとは

表題にある障害支援するslackbotとは、何なのか。からお話したいと思います。
ちなみにですが私が作成したbotには、「FirstPenguinBot(通称:FPBot)」
と名付けています。そのため以降はFPBotと記していきます。

FPBotとは、障害が発生した際にスラッシュコマンドをトリガーに障害対応チャンネルの作成、
ユーザーのチャンネル招待、他チャンネルへの広報等を行なってくれるslack上のBotに
なります。つまり障害発生時の緊迫した状況で障害対応の支援をしてくれるのです。

作成に至った経緯

SREとしてチームで日々障害対応を行い課題に感じていた部分が下記です。

  • 障害対応を行う準備(障害チャンネルの作成、ユーザーの招待、広報 等)が多い
  • 障害発生時に原因調査や対応だけに時間を割けない
  • 障害発生時、やらなければならないことが混在して焦る

1年目でまだしっかりと障害対応に参加できていた訳ではありませんが、先輩につきながら
色々と思うことはありました。実際に障害チャンネルは作成されたが、障害対応に適切な人が
チャンネルに招待されておらず、情報が共有されなかったり等の問題も起きていました。

どうしても障害発生時の緊迫した状況かつ実施事項の混在により、人の手では抜け漏れ等の
問題が起きてしまいます。そこで自動化して障害対応に少しでも集中できるようにしようという
話が上がり、作成することになりました。

開発環境と機能紹介

開発環境

使用技術
・bolt.js 3.15.0
・Docker

機能紹介

現在実装している機能はこんな感じです。

  • スラッシュコマンドによるモーダル出現
  • 新規slackチャンネル(障害対応チャンネル)の作成
  • 障害対応チャンネルへのユーザー招待
  • その他チャンネルへの障害対応チャンネル設立広報
  • 障害対応チャンネル作成失敗時の連絡

最低限の機能のみ実装し、運用を始めた形になります。
それぞれについて軽くではありますが触れていきます。

スラッシュコマンドによるモーダル出現
最初のFPBotの紹介でも触れましたが、このモーダルが障害対応チャンネル作成の
トリガーになっています。このモーダルには、新規チャンネル名と障害の詳細の記載を
促すように欄を設けています。ここに記載したものが、障害対応チャンネルの名前や
広報に使用されます。また障害を管理しやすいよう障害対応チャンネル名の前に自動で
作成された日付がYYYYMMDDの形式で付与されるようになっています。

新規slackチャンネル(障害対応チャンネル)の作成
先ほど説明したようにモーダルに記載したチャンネル名で障害対応チャンネルが作成されます。
というのも私の会社では、重大な障害が起こった際はその障害対応用のslackチャンネルが
設立され、各部署の人たちが集まり、障害対応を行います。

障害対応チャンネルへのユーザー招待
作成された障害対応チャンネルへユーザーを招待してくれます。現時点では、障害対応用の
メンショングループを作成しており、そのグループ内の人が招待される形です。
社内で発生していることで知っておくべきことという意味では、これでいいのかもしれませんが
プロダクトごとに対応する人は変わったりするので、招待する人を選択できるようにできればな
とは思っていたりします。

その他チャンネルへの障害対応チャンネル設立広報
障害対応チャンネルが作成されると指定したslackチャンネルへ連絡が行きます。
この連絡内容にも、モーダルに記載された内容が使用されます。障害対応チャンネル名を
飛べるメンションの形で記載されているのと、障害の詳細です。
この連絡発砲により今どのようなことが起きているのがいち早く広範囲に知らせることができています。

障害対応チャンネル作成失敗時の連絡
こちらは運用段階で問題が発生し、急遽追加した機能になります。slackのチャンネル作成には
大文字の英字は使用できないという問題があります。そのため、モーダルで大文字の英字を入力
されるとエラーが起き、正常にチャンネル作成されません。レスポンスが何もないと、障害対応に
遅れが生じる事態で本末転倒なため、実装しています。
この失敗連絡の際に使用ドキュメントも一緒に添付しています。

運用してみて感じたこと

開発・デプロイを終え、約1年ほど運用を行ってきました。最初の数ヶ月は、作成したものの
社内にそこまで広まっておらず、同じ部署の方は使ってくださるが他部署の方には使用して
もらえないため、使用されない時期が続きました。

作らなくても良かったのかもと思う時もありましたが、役に立つから使って欲しいという想いは
強く、使ってもらえるように動きました。社内のLT大会でFPBotの開発についてで出てみたり、
slackで各方面に使ってくださいと呼びかけたり、概要や使用方法等をドキュメントにまとめ
誰もが閲覧できるようにしたりと様々なアプローチをしました。

そういった行動も報われて、徐々に使用していただけるようになり、今では全部署の方が
障害発生時には、Botで障害チャンネル作ろうと使用してくださるようになりました。

プロダクトもただ作るだけではダメで、どうしたら使ってもらえるか、どうしたらより良くなるか、
考えることはたくさんあるし、開発よりも運用の方が考えなければならないのではとも思ったり
しています。開発は大学生の時にしていただけなので実務経験はほぼないに等しいのですが、、

今後の展望

これまでもデプロイ先の移設や機能の改善、追加等を行なってきました。
運用を行うとプロダクトの課題は絶えないです。もっとこうしたいとかも出てきます。
特に障害対応に関する外部の勉強会に参加したりすると、ここFPBotが担ってくれているなとか、
こういうところも担わせられそうだなとか色々考えが浮かんできます。またこの考えなかったなとか
新たな発見もあり楽しいです。まだまだやることはいっぱいです。

とりあえず下記の機能追加・改善はやろうと思っています。

  • チャンネル招待ユーザーの選択
  • 障害対応ボードの作成
  • 障害広報メールとの連携

あと欲を言えば、PagerDuty等でアラート発報を受けているのでそのアラートをトリガーに
動くようになってくれたらとも思ったり、、、とはいえこの部分は他のサービスについても知識
を深めていかないととも思うので、SREとしてこれからも昇進します。

おわりに

本記事を最後まで読んでいただきありがとうございます。
少しでも皆様に楽しんでいただけたり、新たな発見を得ていただけていれば大変嬉しく思います。

今回slackbotを作成するにあたり、下記記事を参考にさせていただきました。
インシデントレスポンスを自動化で支援する Slack Bot で人機一体なセキュリティ対策を実現する

ありがとうございました!

Discussion