Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 有没有一种方法可以使用普罗米修斯来监控库伯·克罗恩的工作_Kubernetes_Prometheus - Fatal编程技术网

Kubernetes 有没有一种方法可以使用普罗米修斯来监控库伯·克罗恩的工作

Kubernetes 有没有一种方法可以使用普罗米修斯来监控库伯·克罗恩的工作,kubernetes,prometheus,Kubernetes,Prometheus,有没有办法监控kube cronjob 我有一个kube cronjob,在集群上每10分钟运行一次。。是否有一种方法可以在每次我的cronjob由于某个错误而失败时收集度量值,或者在一段时间后我的cronjob未完成时发出通知。使用Prometheus监控cronjob的方法是让他们将指示上次成功的度量值推送到pushgateway。然后,如果cronjob最近不够成功,您可以发出警报。kube state metrics exporter还包括各种与cronjob相关的指标:,但不幸的是,似

有没有办法监控kube 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", "(.+)"
  )
)