Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

出社したら自動でSlackに通知する

Mercari Advent Calendar 2017 の14日目は SRE チームの @masartz がお送りします。

前提

メルカリのSREチームでは当番体制を敷いており、平日は他のチームメンバーが出社するまで自宅待機しています。
出社したメンバーは当番にその旨を連絡します。こんな感じです。

f:id:masartz:20171211114057p:plain

とはいえ、時には連絡を忘れてしまう事もあります。人間だもの。
そんな時には当番が自宅に張り付きになってしまいます。

f:id:masartz:20171211114109p:plain

人間なので忘れることは仕方ないです。 人間が頑張らずに解決できると良いので、今回のお話です。

狙うところとしては、 出社したら勝手に当番に連絡される です。 それぞれ分解して実現方法を検討します。

「連絡される」の解決方法

これは今まで出社した人がSlackでmentionしていたのと同じようにSlackで良さそう、Slackへの自動通知はbotがよく使用されている昨今では特に難しくなくイメージできるところでしょう。

また、メルカリでは既に Slackboardと呼ばれるproxyサーバーによって、Slackへの通知に汎用的な仕組みが導入されています。proxyのURLに対してパラメータ付きでリクエストしてやれば自ずと通知されるくらい簡単です。
mackerelなどの監視システムや、cronの実行結果など様々なものがSlackboradを経由して通知されている実績があります。

「当番に」の解決方法

これは Pagerdutyの設定から当日の当番メンバーの情報を引っ張ってくれば取得できます。 これも下記スライドに説明されているとおり、既存のアラートエスカレーションの仕組みで導入済みです。

「出社したら勝手に」の解決方法

この自動化の方がややハードルが高そうですが、こちらもメルカリでは Wi-Fi打刻システム によって、 出社 を自動的に検知する仕組み自体は導入済みです。

まとめると今回の場合は、Wi-Fi打刻システム から Slackboard までの間の溝を埋めてやれば実現できそうです。 イメージとしては、下記の図の赤い部分が今回の範囲です。

f:id:masartz:20171211114229p:plain

成果物

というわけで、やったことはとてもシンプルです。

  • 簡易なWebサーバーを立てる
  • Wi-Fi打刻システム からのリクエストを HTTP で受け取る
  • Pagerduty から当日の当番メンバーの情報を取得する
  • 当番メンバー情報と出社したメンバー情報をパラメータにSlackboradに通知

1日1回通知できれば良いのでその辺の細かい制御は入れていますが、大まかにやってることは上記だけで、以下のように実現できました。

f:id:masartz:20171211114259p:plain

導入したばっかりなので、まだ属人的な運用になっています。お助け程度の野良ツールなので追って整えていきたいと思います。

まとめ

大層なシステムを作らなくても、ちょっとしたものを追加する程度でやりたいことを実現できるのもこれまでの取り組みや土台があってこそです。 一つ一つを積み上げて、解決できる課題を増やしていくのがエンジニアリングっぽくて良いなというお話でした。

明日 15 日目の執筆担当は @koemu です。引き続きお楽しみください!