使用Prometheus和Grafana监视Kubernetes的CronJob
我一直在使用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 metrics的job标签重命名为exported_job_short,并将其值缩写为正则表达式([a-z\-]+)-(\d+)中的短名称。
kube-state-metrics的job=的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命令可以查看作业历史记录,但是如果不删除失败的作业,则”失败的CronJob的数量”将不会减少。您需要以某种方式进行清理。