2017-11-17 18 views

答えて

3

プロメテウスを使ってクロノスを監視する方法は、最後にプッシュゲートウェイに成功したことを示すメトリックをプッシュすることです。 cronjobが最近成功しなかったかどうかを警告することができます。

+0

タイムスタンプ値をプッシュしないことは、ドキュメントによって推奨されていませんか? – AlexM

+1

メトリックでタイムスタンプを使用することは推奨されません。値がタイムスタンプであるメトリック( 'process_start_time_seconds'など)は問題ありません。 –

2

kube-state-metricsエクスポータにはさまざまなCronJob関連のメトリックも含まれていますが、残念ながらCronJobの成功/失敗は含まれていません。

1

私は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 
0

をあなたがhereから必要な情報を得ることができます。

CronJobsはスケジュールに従ってジョブを作成するので、作成されたジョブはkube_job_status_failedで簡単に見ることができます。ジョブ名の末尾にはエポックタイムがあります。

アラートは、私は、アラートマネージャで次のクエリを使用しています自分自身を解決することを確認するには、次の

increase(kube_job_status_failed{job=~"mytestjob-.*"}[5m]) > 1 

私のcronがある:

*/5 * * * *`, and I set `backoffLimit: 2 

は、実行ごとの失敗回数を制限します。

1

ここでのトリッキーな部分は、クロンジョブ自体が役に立たないステータスです。作成するジョブにそれらをマッチさせる必要があります。私はこれを達成する方法についての記事を書き上げました:

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というラベルが含まれている必要があります。

関連する問題