kube cronjobを監視する方法はありますか?prometheusを使ってkube cronジョブを監視する方法はありますか
私のクラスタで10分ごとに実行されるkube cronjobがあります。私のcronjobが何らかのエラーで失敗したとき、または特定の期間後にcronjobが完了しなかったときに通知するたびに、測定基準を収集する手段があります。
kube cronjobを監視する方法はありますか?prometheusを使ってkube cronジョブを監視する方法はありますか
私のクラスタで10分ごとに実行されるkube cronjobがあります。私のcronjobが何らかのエラーで失敗したとき、または特定の期間後にcronjobが完了しなかったときに通知するたびに、測定基準を収集する手段があります。
プロメテウスを使ってクロノスを監視する方法は、最後にプッシュゲートウェイに成功したことを示すメトリックをプッシュすることです。 cronjobが最近成功しなかったかどうかを警告することができます。
kube-state-metricsエクスポータにはさまざまなCronJob関連のメトリックも含まれていますが、残念ながらCronJobの成功/失敗は含まれていません。
私はkube-state-metricsでこれらのルールを使用しています:
groups:
- name: job.rules
rules:
- alert: CronJobRunning
expr: time() -kube_cronjob_next_schedule_time > 3600
for: 1h
labels:
severity: warning
annotations:
description: CronJob {{$labels.namespaces}}/{{$labels.cronjob}} is taking more than 1h to complete
summary: CronJob didn't finish after 1h
- alert: JobCompletion
expr: kube_job_spec_completions - kube_job_status_succeeded > 0
for: 1h
labels:
severity: warning
annotations:
description: Job completion is taking more than 1h to complete
cronjob {{$labels.namespaces}}/{{$labels.job}}
summary: Job {{$labels.job}} didn't finish to complete after 1h
- alert: JobFailed
expr: kube_job_status_failed > 0
for: 1h
labels:
severity: warning
annotations:
description: Job {{$labels.namespaces}}/{{$labels.job}} failed to complete
summary: Job failed
をあなたがhereから必要な情報を得ることができます。
CronJobsはスケジュールに従ってジョブを作成するので、作成されたジョブはkube_job_status_failedで簡単に見ることができます。ジョブ名の末尾にはエポックタイムがあります。
アラートは、私は、アラートマネージャで次のクエリを使用しています自分自身を解決することを確認するには、次の
increase(kube_job_status_failed{job=~"mytestjob-.*"}[5m]) > 1
私のcronがある:
*/5 * * * *`, and I set `backoffLimit: 2
は、実行ごとの失敗回数を制限します。
ここでのトリッキーな部分は、クロンジョブ自体が役に立たないステータスです。作成するジョブにそれらをマッチさせる必要があります。私はこれを達成する方法についての記事を書き上げました:
https://medium.com/@tristan_96324/prometheus-k8s-cronjob-alerts-94bee7b90511
記事は物事の仕組みへと細部のビットになりますが、アラートの設定は以下の通りである:
groups:
- name: kube-cron
rules:
- record: job_cronjob:kube_job_status_start_time:max
expr: |
label_replace(
label_replace(
max(
kube_job_status_start_time
* ON(exported_job) GROUP_RIGHT()
kube_job_labels{label_cronjob!=""}
) BY (exported_job, label_cronjob)
== ON(label_cronjob) GROUP_LEFT()
max(
kube_job_status_start_time
* ON(exported_job) GROUP_RIGHT()
kube_job_labels{label_cronjob!=""}
) BY (label_cronjob),
"job", "$1", "exported_job", "(.+)"),
"cronjob", "$1", "label_cronjob", "(.+)")
- record: job_cronjob:kube_job_status_failed:sum
expr: |
clamp_max(
job_cronjob:kube_job_status_start_time:max,
1)
* ON(job) GROUP_LEFT()
label_replace(
label_replace(
(kube_job_status_failed != 0),
"job", "$1", "exported_job", "(.+)"),
"cronjob", "$1", "label_cronjob", "(.+)")
- alert: CronJobStatusFailed
expr: |
job_cronjob:kube_job_status_failed:sum
* ON(cronjob) GROUP_RIGHT()
kube_cronjob_labels
> 0
for: 1m
annotations:
description: '{{ $labels.cronjob }} last run has failed {{$value }} times.'
jobTemplateには、cronjobオブジェクトの名前と一致するcronjob
というラベルが含まれている必要があります。
タイムスタンプ値をプッシュしないことは、ドキュメントによって推奨されていませんか? – AlexM
メトリックでタイムスタンプを使用することは推奨されません。値がタイムスタンプであるメトリック( 'process_start_time_seconds'など)は問題ありません。 –