対象
- 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と連携したいんす。
で、結局見当たらなかったので作りました。
工作
実際に使ってますが、結構いい感じに役立っています。
使い方は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を細かく設定してやるか
- kube-apiserverのflag
- 例えばNodeを増やす時に立ち上がるのを待ってる間、
- 後からeventの流れを追いたい時にslackだとちょっと厳しい
- のでCloudwatchLogsにも出せるようにした
- 私が知らないだけでそもそもこんなもの必要がないイケてるeventのハンドリング方法があるんじゃないか
結局こういうのって見える所に流れてこないとなかなか見ないものなんですよね。
今回は以上です。