kubernetes-event-exporter を使って slackEvent を通知する

この記事は信州大学 kstm Advent Calendar 2019の21日目です。UTCだとまだ2019/12/21です。

はじめに

この前の kubecon 2019 NA発表のあった kubernetes-event-exporter を使用してkubernetesのEventをslackへ通知する方法を試してみます。

kubernetes Eventとは

EventとはkubernetesのClusterの中で実際に何がおこっているかの情報で、terminalからkubectl get eventで取得できます。

ただ、このEventの情報は1時間経過すると削除されてしまうので、後からkubernetes上で参照するのは難しかったりします。

kubernetes-event-exporterは発生したEventのフィルタリング、ルーティングを行なってくれるツールで、ElasticsearchやslackなどにEventの情報を送ってくれます。

install

まずセットアップに必要なfileを kubernetes-event-exporter/deploy から取得します。

00-roles.yaml
01-config.yaml
02-deployment.yaml

01-config.yaml を編集することで、通知のフィルタリングや送信先を設定できます。

slackに通知を送るためには、以下のように01-config.yamlを編集します。 設定にslackのtokenが必要になるので事前に発行しておきましょう。 また、通知を送る先のチャンネルも用意します。(ここではkube-alertというチャンネルを指定しています)

apiVersion: v1
kind: ConfigMap
metadata:
  name: event-exporter-cfg
  namespace: monitoring
data:
  config.yaml: |
    route:
      match:
        - receiver: "slack"
    receivers:
      - name: "slack"
        slack:
          token: "xoxb-xxxxxxxxxxxxxxxxxxxxx"
          channel: "kube-alert"
          message: "{{ .Message}}"
          fields:
            namespace: "{{ .Namespace }}"
            reason: "{{ .Reason }}"
            object: "{{ .Namespace }}"

順番どうりにkubernetesに適用します。

$ kubectl apply -f 00-roles.yaml
$ kubectl apply -f 01-config.yaml
$ kubectl apply -f 02-deployment.yaml

確認

適当なリソースを作ってみます。

$ kubectl create deploy test --image=nginx

slackを見てみましょう。(dark themeを入れているので背景色とか違います)

ちゃんと通知されますね。

おわりに

予想以上にslack通知を簡単にセットアップすることができました。 今回は設定しませんでしたが、実環境で使うためには通知するEventのいい感じのフィルタリングが必須でしょうね。 ソースコードを読む限りslack通知の色を変える方法とかは無いように見えたり、まだ足りない部分は多いですね。リリースされて間も無いツールなのでこれから機能が追加されて行くと思います。

参考