Slack
kubernetes

kubernetesのeventをSlackに通知する


対象


  • kubernetesのeventが大好き

  • Slack中毒


要約

ツール作った

https://github.com/buildsville/kube-event-watcher


経緯

kubernetesのeventには、クラスタで起こったイベントや、node-problem-detectorが検出したものなどが流れています。

トラブル時のデバッグに役立つような情報がさりげなく流れてたりするのですが、一定時間(デフォルト1h)経つと消えたり、kubectl get evなどで見ないといけなかったり(+見やすいようにフィルタしたり整形したかったり)微妙に取り回しにくいと感じていました。

そこでこれをいい感じにハンドリングできるよさげなツールがないかと探したところ、

https://github.com/bitnami-labs/kubewatch

これはresourceの変更を通知するものだから今回の目的とは違う…

https://github.com/GoogleCloudPlatform/k8s-stackdriver/tree/master/event-exporter/

まさにこういうのが欲しかった、が…

Event exporter exports only to Stackdriver.

とのことで、現状AWSオンリーの私には非情なツールでした。

というかAWSとかGCPとかじゃなくてSlackと連携したいんす。

で、結局見当たらなかったので作りました。


工作

https://github.com/buildsville/kube-event-watcher

こんな感じで通知されます

実際に使ってますが、結構いい感じに役立っています。

使い方はREADMEに書いたので全部なのでここでは触れませんが、使ってみた感想やらを書いてみます。


  • 全部受け取ると相当量が多い


    • 楽しいのはほんの最初だけ

    • podひとつdeployするだけで5個6個と通知が来る…

    • configでしっかりフィルタリングしよう



  • 重要度が恐ろしくピンキリ


    • WarningとNormalがあるし当然だが

    • これもconfigで通知するチャンネルを割り振られるようにした



  • countをprometheusのmetricsとして出してみたが油断すると描画が重い


    • メトリクスとしてそれほど重要な項目にはならなそうだけど、もし使うならpromQLできちんと制御するしか



  • 同じeventが短時間にドバドバ出るやつがある


    • 例えばNodeを増やす時に立ち上がるのを待ってる間、 FailedScheduling がすごいたくさん出る

    • eventのcreateだけを通知するようにすれば最初の1回だけ通知されるが、当然通知してほしいupdateも通知されなくなる


      • kube-apiserverのflag --event-ttl を短めに調整するなどと組み合わせていい感じにチューニングするか

      • 気になったら都度configを細かく設定してやるか





  • 後からeventの流れを追いたい時にslackだとちょっと厳しい


    • のでCloudwatchLogsにも出せるようにした



  • 私が知らないだけでそもそもこんなもの必要がないイケてるeventのハンドリング方法があるんじゃないか

結局こういうのって見える所に流れてこないとなかなか見ないものなんですよね。

今回は以上です。


追記

あった…

https://github.com/ultimateboy/slack8s