普段からPrometheus + Grafanaで監視しているのですが、KubernetesのCronJobを監視できなくて困っていたのでできるようにしました。
インストールとかは省きます
環境
- GKE: 1.9.2-gke.1
- kube-state-metrics: v1.2.0
- Prometheus: v1.8系
- Grafana: 4.5系
Prometheusの設定
Prometheusのkube-state-metricsの値を取得するところで以下のように設定します。relabel_configsは長いので省略します。
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
...
metric_relabel_configs:
- source_labels: [exported_job]
action: replace
regex: ([a-z\-]+)-(\d+)
replacement: $1
target_label: exported_job_short
metric_relabel_configsで、kube-state-metricsのjobメトリックスの、jobラベルをexported_job_shortという名前でかえ、値を正規表現([a-z\-]+)-(\d+)
で短縮された名前にしています。
kube-state-metricsのjob=<job-name>
のjob-nameはcron-name-1520746800
のような形ででてきます。Grafanaではこのcron-nameでまとめたいのでリネームしています。
source_labelsがexported_jobとなっているのはPrometheus側で、jobがすでにラベルとして使われて、exported_jobにリネームされているためです。
Grafanaの設定
Grafanaでは以下のメトリックスをグラフにします。
- 失敗したCronJobの個数
- CronJobの最大実行時間
以下みたいなのができあがります。
失敗したCronJobの個数の設定
CronJobの最大実行時間
以上で監視できるようになりました。
アラートも設定できます。
注意点
kubectl get jobs
を実行するとジョブ履歴が見れると思いますが、failed jobは都度消さないと、「失敗したCronJobの個数」が減らないです。なんらかしらの方法でお掃除する必要があります。