Kubernetes 有没有一种方法可以使用普罗米修斯来监控库伯·克罗恩的工作
有没有办法监控kube cronjobKubernetes 有没有一种方法可以使用普罗米修斯来监控库伯·克罗恩的工作,kubernetes,prometheus,Kubernetes,Prometheus,有没有办法监控kube cronjob 我有一个kube cronjob,在集群上每10分钟运行一次。。是否有一种方法可以在每次我的cronjob由于某个错误而失败时收集度量值,或者在一段时间后我的cronjob未完成时发出通知。使用Prometheus监控cronjob的方法是让他们将指示上次成功的度量值推送到pushgateway。然后,如果cronjob最近不够成功,您可以发出警报。kube state metrics exporter还包括各种与cronjob相关的指标:,但不幸的是,似
我有一个kube cronjob,在集群上每10分钟运行一次。。是否有一种方法可以在每次我的cronjob由于某个错误而失败时收集度量值,或者在一段时间后我的cronjob未完成时发出通知。使用Prometheus监控cronjob的方法是让他们将指示上次成功的度量值推送到pushgateway。然后,如果cronjob最近不够成功,您可以发出警报。kube state metrics exporter还包括各种与cronjob相关的指标:,但不幸的是,似乎没有包括success cronjob success/failure 我将这些规则用于:
你可以从那里得到你想要的信息 CronJobs按计划创建作业,因此您可以简单地查看已创建作业的kube_job_status_failed,需要注意的是,作业名称末尾有一个纪元时间 为确保警报自行解决问题,我在警报管理器中使用以下查询:
increase(kube_job_status_failed{job=~"mytestjob-.*"}[5m]) > 1
我的克朗是:
*/5 * * * *`, and I set `backoffLimit: 2
要限制每次运行的失败次数。这里的棘手部分是cronjobs本身没有有用的状态,您必须将它们与它们创建的作业相匹配。我写了一篇关于如何实现这一点的文章: 本文详细介绍了如何工作,但警报配置如下:
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对象的名称相匹配。我能够简化这篇中间文章(由于某种原因,标签\u replace对我不起作用)
我的cron查询是这样的(我们在所有cronjob上都有“component”标签,而不是“cronjob”,但是您可以使用您最喜欢的标签)
将其插入prometheus expression dashboard以确保获得结果(1表示cron上次失败,0表示它成功或尚未运行)
对于警报,请添加
!=0,则查询将返回任何失败的cronjob。到目前为止,所有答案都不知道名称空间,并且依赖于作业中的自定义标签
后者可以修复为kube state metrics 1.6.0版引入了一个新的度量kube_作业_所有者
,它解决了匹配job
s和CronJob
s的问题
注:在kube state metrics 1.4.0中,作业
标签被重命名为作业_名称
,以避免标签与普罗米修斯发生冲突
clamp_max(
max by (namespace, owner_name, job_name) (
max by (namespace, owner_name, job_name) (
kube_job_status_start_time
*
on (job_name) group_left(owner_name) max by (namespace, owner_name, job_name) (kube_job_owner{owner_kind="CronJob"})
)
==
on (namespace, owner_name) group_left max by (namespace, owner_name) (
kube_job_status_start_time
*
on (job_name) group_left(owner_name) max by (namespace, owner_name, job_name) (kube_job_owner{owner_kind="CronJob"})
)
),
1
)
*
on (namespace, job_name) group_left kube_job_status_failed
通过重命名所有者名称
通过在表达式周围加上
max without (owner_name) (
label_replace(
<expression from above>
,
"cronjob", "$1", "owner_name", "(.+)"
)
)
max无(所有者名称)(
更换标签(
,
“cronjob”、“$1”、“所有者名称”、“(.+)”
)
)
(label\u replace()
函数添加了一个新的cronjob
标签,而max()
会删除owner\u name
标签)在度量上使用时间戳将被取消组织。如果度量值是时间戳(例如进程\u开始\u时间\u秒
),则该度量值是可以接受的。这存在一个问题,即它会无限期地发出警报,因为CronJobs将保留作业,直到达到历史限制。这会产生一个错误:执行查询时出错:为匹配组找到重复序列
作业再次启动时,该警报不会立即清除(已计划,而不是重试)?因此,如果某个作业因实际损坏而失败,您将看到警报在下一次失败之前被清除?您能解释一下查询吗?
clamp_max(
max by (namespace, owner_name, job_name) (
max by (namespace, owner_name, job_name) (
kube_job_status_start_time
*
on (job_name) group_left(owner_name) max by (namespace, owner_name, job_name) (kube_job_owner{owner_kind="CronJob"})
)
==
on (namespace, owner_name) group_left max by (namespace, owner_name) (
kube_job_status_start_time
*
on (job_name) group_left(owner_name) max by (namespace, owner_name, job_name) (kube_job_owner{owner_kind="CronJob"})
)
),
1
)
*
on (namespace, job_name) group_left kube_job_status_failed
max without (owner_name) (
label_replace(
<expression from above>
,
"cronjob", "$1", "owner_name", "(.+)"
)
)