精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解決 Prometheus 監控 Kubernetes Job 誤報的坑

云計算 云原生
要想做到監控報警準確,其實我們只需要去獲取同一個 CronJob 觸發的一組 Job 的最后一次任務,只有該 Job 在執行失敗的時候才觸發報警即可。

昨天在 Prometheus 課程輔導群里面有同學提到一個問題,是關于 Prometheus 監控 Job 任務誤報的問題(已經同步到社區網站),大概的意思就 CronJob 控制的 Job,前面執行失敗了會觸發報警,后面生成的新的 Job 可以正常執行后,但是還是會收到前面的報警:

這是因為一般在執行 Job 任務的時候我們會保留一些歷史記錄方便排查問題,所以如果之前有失敗的 Job 了,即便稍后會變成成功的,那么之前的 Job 也會繼續存在,而大部分直接使用 kube-prometheus 安裝部署的話使用的默認報警規則是kube_job_status_failed > 0,這顯然是不準確的,只有我們去手動刪除之前這個失敗的 Job 任務才可以消除誤報,當然這種方式是可以解決問題的,但是不夠自動化,一開始沒有想得很深入,想去自動化刪除失敗的 Job 來解決,但是這也會給運維人員帶來問題,就是不方便回頭去排查問題。下面我們來重新整理下思路解決下這個問題。

CronJob 會在計劃的每個執行時間創建一個 Job 對象,可以通過 .spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit 屬性來保留多少已完成和失敗的 Job,默認分別為3和1,比如下面聲明一個 CronJob 的資源對象:

apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date;
restartPolicy: OnFailure

根據上面的資源對象規范,Kubernetes 將只保留一個失敗的 Job 和一個成功的 Job:

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356 0/1 2m 10d
hello-4111706356 1/1 5s 5s

要解決上面的誤報問題,同樣還是需要使用到 kube-state-metrics 這個服務,它通過監聽 Kubernetes APIServer 并生成有關對象狀態的指標,它并不關注單個 Kubernetes 組件的健康狀況,而是關注內部各種對象的健康狀況,例如 Deployment、Node、Job、Pod 等資源對象的狀態。這里我們將要使用到以下幾個指標:

  • kube_job_owner:用來查找 Job 和觸發它的 CronJob 之間的關系。
  • kube_job_status_start_time:獲取 Job 被觸發的時間。
  • kube_job_status_failed:獲取執行失敗的任務。
  • kube_cronjob_spec_suspend:過濾掉掛起的作業。

下面是一個指標示例,其中包含 CronJob 觸發運行的hello 任務生成的標簽:

kube_job_owner{job_name="hello-1604875860", namespace="myNamespace", owner_is_controller="true", owner_kind="CronJob", owner_name="hello"} 1
kube_job_status_start_time{job_name="hello-1604875860", namespace="myNamespace"} 1604875874
kube_job_status_failed{job_name="hello-1604875860", namespace="myNamespace", reason="BackoffLimitExceeded"} 1
kube_cronjob_spec_suspend{cronjob="hello",job="kube-state-metrics", namespace="myNamespace"} 0

要想做到監控報警準確,其實我們只需要去獲取同一個 CronJob 觸發的一組 Job 的最后一次任務,只有該 Job 在執行失敗的時候才觸發報警即可。

由于 kube_job_status_failed 和 kube_job_status_start_time 指標中并不包含所屬 CronJob 的標簽,所以第一步需要加入這個標簽,而 kube_job_owner 指標中的 owner_name 就是我們需要的,可以用下面的 promql 語句來進行合并:

max(
kube_job_status_start_time
* ON(job_name, namespace) GROUP_RIGHT()
kube_job_owner{owner_name != ""}
)
BY (job_name, owner_name, namespace)

這里我們使用 max 函數是因為我們可能會因為 HA 運行多個 kube-state-metrics,所以用 max 函數來返回每個 Job 任務的一個結果即可。假設我們的 Job 歷史記錄包含 2 個任務(一個失敗,另一個成功),結果將如下所示:

{job_name="hello-1623578940", namespace="myNamespace", owner_name="hello"} 1623578959
{job_name="hello-1617667200", namespace="myNamespace", owner_name="hello"} 1617667204

現在我們知道每個 Job 的所有者了,接著我們需要找出最后執行的任務,我們可以通過按 owner_name 標簽聚合結果來實現這一點:

max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (owner_name)

上面這條語句會找到每個 owner(也就是 CronJob)最新的任務開始時間,然后再和上面的語句進行合并,保留開始時間相同的記錄即為最新執行的 Job 任務了:

max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (job_name, owner_name, namespace)
== ON(owner_name) GROUP_LEFT()
max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (owner_name)

結果將顯示每個 CronJob 最后執行的作業,并且僅顯示最后一個:

{job_name="hello-1623578940", namespace="myNamespace", owner_name="hello"} 1623578959

為了增加可讀性我們還可以將 job_name、owner_name 標簽替換為 job 和 cronjob,這樣更容易看明白:

label_replace(
label_replace(
max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (job_name, owner_name, namespace)
== ON(owner_name) GROUP_LEFT()
max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (owner_name),
"job", "$1", "job_name", "(.+)"),
"cronjob", "$1", "owner_name", "(.+)")

現在將會看到類似于下面的結果:

{job="hello-1623578940", cronjob="hello", job_name="hello-1623578940", namespace="myNamespace", owner_name="hello"} 1623578959

由于上面的查詢語句比較復雜,如果每次報警評估的時候都去進行一次實時計算會對 Prometheus 產生非常大的壓力,這里我們可以借助記錄規則來實現類離線計算的方式,大大提高效率,創建如下所示的記錄規則,用來表示獲取每個 CronJob 最后執行的作業記錄:

- record: job:kube_job_status_start_time:max
expr: |
label_replace(
label_replace(
max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (job_name, owner_name, namespace)
== ON(owner_name) GROUP_LEFT()
max(
kube_job_status_start_time
* ON(job_name,namespace) GROUP_RIGHT()
kube_job_owner{owner_name!=""}
)
BY (owner_name),
"job", "$1", "job_name", "(.+)"),
"cronjob", "$1", "owner_name", "(.+)")

現在我們知道了 CronJob 最近開始執行的 Job 了,那么想要過濾出失敗的,則再使用 kube_job_status_failed 指標就可以了:

- record: job:kube_job_status_failed:sum
expr: |
clamp_max(job:kube_job_status_start_time:max, 1)
* ON(job) GROUP_LEFT()
label_replace(
(kube_job_status_failed > 0),
"job", "$1", "job_name", "(.+)"
)

這里使用 clamp_max 函數將 job:kube_job_status_start_time:max 的結果轉換為一組上限為 1 的時間序列,使用它來通過乘法過濾失敗的作業,得到包含一組最近失敗的 Job 任務,這里我們也添加到名為 kube_job_status_failed:sum 的記錄規則中。

最后一步就是直接為失敗的 Job 任務添加報警規則,如下所示:

- alert: CronJobStatusFailed
expr: |
job:kube_job_status_failed:sum
* ON(cronjob, namespace) GROUP_LEFT()
(kube_cronjob_spec_suspend == 0)

為避免誤報,我們已將掛起的任務排除在外了。到這里我們就解決了 Prometheus 監控 CronJob 的任務誤報的問題,雖然 kube-prometheus 為我們內置了大量的監控報警規則,但是也不能完全迷信,有時候并不一定適合實際的需求。

責任編輯:姜華 來源: k8s技術圈
相關推薦

2021-07-01 11:29:45

KubernetesGrafana監控

2024-02-23 16:10:29

KubernetesPrometheus開源

2022-07-26 09:34:23

監控系統

2021-08-19 09:30:03

Kubernetes集群IPVS

2022-05-02 18:15:04

KubernetesLinux開源

2022-11-08 00:00:00

監控系統Prometheus

2020-09-15 08:46:26

Kubernetes探針服務端

2022-05-18 08:32:05

服務監控Prometheus開源

2025-09-29 07:49:11

2020-12-30 08:09:46

運維Prometheus 監控

2020-05-11 08:00:00

監控工具加密開源

2024-04-24 13:45:00

2019-10-17 21:14:08

Kubernetes節點Python

2020-05-18 12:04:17

PrometheusMySQL監控

2025-07-14 05:00:00

監控系統工具

2023-10-09 07:31:25

2022-05-19 08:21:02

vmalert監控

2020-10-20 09:07:11

監控PrometheusZabbix

2022-07-08 08:00:31

Prometheus監控

2022-07-11 09:36:38

SpringJava開發
點贊
收藏

51CTO技術棧公眾號

在线观看日韩片| 国产97在线|亚洲| av电影中文字幕| а√天堂中文资源在线bt| 2019国产精品| 国产精品男人的天堂| 娇小11一12╳yⅹ╳毛片| 日韩中文一区二区| 欧美午夜精品久久久久久浪潮| 日韩精品欧美专区| 国产麻豆免费观看| 亚洲福利电影| 在线免费观看羞羞视频一区二区| 成人亚洲免费视频| 擼擼色在线看观看免费| 国产精品免费久久| 国产日韩欧美二区| 在线免费观看一区二区| 亚洲经典视频在线观看| 在线看日韩欧美| 超碰97在线资源站| 免费看一区二区三区| 色综合天天天天做夜夜夜夜做| 日本免费在线视频观看| 可以在线观看的av网站| 国产91在线|亚洲| 国产日韩亚洲欧美| 九九热精品视频在线| 亚洲女同另类| 中文精品99久久国产香蕉| 中文字幕第3页| 另类视频一区二区三区| 欧美网站大全在线观看| 国产av无码专区亚洲精品| 日韩三级免费| 亚洲视频一区二区在线观看| 日韩亚洲视频在线| 日夜干在线视频| 国产99久久久国产精品免费看| 国产欧美一区二区三区四区| 中文字幕69页| 国产亚洲在线| 97色伦亚洲国产| 精品97人妻无码中文永久在线| 日韩极品一区| 在线国产精品视频| 妺妺窝人体色WWW精品| 日韩电影在线观看完整免费观看| 日韩久久免费av| 91插插插影院| 中文成人激情娱乐网| 欧亚一区二区三区| 精品视频一区二区在线| heyzo在线| 亚洲一区二区精品3399| 水蜜桃在线免费观看| 日日夜夜精品一区| 国产精品久久久久久亚洲伦 | 亚洲系列中文字幕| 久久精品一区二区免费播放| 婷婷激情久久| 亚洲欧美国内爽妇网| 中文字幕丰满乱子伦无码专区| 一呦二呦三呦国产精品| 亚洲精品一二区| 亚洲av无码一区二区二三区| 婷婷综合福利| 亚洲视频在线观看视频| 蜜桃av乱码一区二区三区| 欧美日韩国产免费观看视频| 日韩一级黄色av| 成人精品一二三区| 欧美福利电影在线观看| 欧美激情区在线播放| 日韩女优在线观看| 鲁大师影院一区二区三区| 国产成人自拍视频在线观看| 久草热在线观看| 九一九一国产精品| 91免费看片在线| 欧美一级在线免费观看| 91蝌蚪porny九色| 日韩精品欧美一区二区三区| 韩国av网站在线| 亚洲国产精品人人做人人爽| 91精品91久久久中77777老牛| 性欧美freehd18| 9191国产精品| 黄色av网址在线观看| 国产99亚洲| xxxx性欧美| 国产无套在线观看| 日韩va欧美va亚洲va久久| 91九色单男在线观看| 亚洲大尺度视频| 久久久久久久网| 夜夜爽99久久国产综合精品女不卡 | 日韩二区三区在线| 91精品国自产在线| 欧美国产高清| 国产91精品网站| 国产手机视频在线| 2021中文字幕一区亚洲| 亚洲天堂av免费在线观看| 欧美a级在线观看| 7777精品伊人久久久大香线蕉的 | 人成网站在线观看| 国产精品私房写真福利视频| 黄网站色视频免费观看| 亚洲涩涩在线| 欧美一区二区三区视频免费| 精品夜夜澡人妻无码av| 91精品天堂福利在线观看| 久久久亚洲成人| 国产suv精品一区二区33| 久久99日本精品| 久久99九九| 超碰在线caoporn| 91成人在线观看喷潮| 亚洲成a人无码| 91九色精品国产一区二区| 91精品国产91久久久久| 国产精品久久久久久无人区| 久久久精品蜜桃| 男人用嘴添女人下身免费视频| 日本欧美在线| 亚洲午夜精品久久久久久性色 | 日韩欧美小视频| 色综合久久六月婷婷中文字幕| 国产大尺度视频| 91成人精品视频| 国产精品视频99| 久久综合九色综合久| 亚洲丰满少妇videoshd| 精产国品一二三区| 亚洲国产精品久久久天堂| 国产精品久久久精品| 蜜芽tv福利在线视频| 激情亚洲一区二区三区四区| 91精品人妻一区二区三区四区| 亚洲不卡av不卡一区二区| 国产精品丝袜白浆摸在线| 精品电影在线| 欧美一a一片一级一片| 一级片视频免费看| 日日骚欧美日韩| 日韩av电影免费在线观看| 在线免费日韩片| 国产亚洲精品久久久久动| 99久久久久久久久| 欧美国产一区在线| 天天综合网日韩| 99免费精品| 亚洲a级在线观看| 日本在线视频www鲁啊鲁| 日韩女优电影在线观看| 久久精品一区二区三| 高清不卡一区二区| 亚洲美免无码中文字幕在线| 日韩三区视频| 国产成+人+综合+亚洲欧洲| 国产区高清在线| 欧美日韩一区久久| 日本一二三区在线观看| 国产在线一区观看| 97免费视频观看| 欧美调教在线| 国产精品9999| 国产不卡在线| 亚洲第一精品福利| 日韩人妻精品中文字幕| 国产精品无人区| 狠狠干狠狠操视频| 欧美1区2区3区4区| 国产91免费观看| 成年女人的天堂在线| 7777精品伊人久久久大香线蕉超级流畅| 手机在线中文字幕| 国产黑丝在线一区二区三区| 欧美极品少妇无套实战| 亚洲综合小说图片| 国产成人精品av在线| www亚洲人| 欧美日韩免费一区二区三区视频| 国产大学生自拍| 成人黄色大片在线观看| 国产精品免费观看久久| 国产探花在线精品一区二区| 91精品在线看| 阿v视频在线| 亚洲精品丝袜日韩| 免费一级a毛片| 成人欧美一区二区三区白人| 中文字幕永久免费| 久久精品观看| 成人小视频在线观看免费| 女一区二区三区| 国产日本欧美视频| 在线看三级电影| 亚洲天堂精品在线| 97成人在线观看| 午夜一区二区三区在线观看| 国产真实乱人偷精品人妻| 国产成人精品午夜视频免费| 人妻有码中文字幕| 雨宫琴音一区二区三区| 久久精品综合一区| 日韩在线观看中文字幕| 国产成人一区三区| av网站在线免费看推荐| 亚洲国产天堂久久综合网| 在线视频免费观看一区| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品日日摸夜夜爽| 久久性色av| 97超碰在线人人| 色777狠狠狠综合伊人| 国产乱码精品一区二区三区日韩精品| 午夜精品久久久久久久久久蜜桃| 国模精品视频一区二区| 麻豆网站在线免费观看| 国产视频精品xxxx| 亚洲xxx在线| 欧美三级视频在线观看| 男人天堂中文字幕| 亚洲欧洲精品天堂一级| 人妻视频一区二区| 国产精品1区二区.| 99热这里只有精品在线播放| 99精品福利视频| 警花观音坐莲激情销魂小说| 亚洲老女人视频免费| 久久99蜜桃综合影院免费观看| 国产精品免费精品自在线观看| 欧美最猛性xxxx| 中文字幕在线看片| 欧美激情亚洲精品| 麻豆影院在线| 日韩精品视频在线观看网址| 亚洲经典一区二区三区| 欧美日韩精品一区二区| 天堂网一区二区三区| 欧美日韩国产精品| 国产在线欧美在线| 伊人性伊人情综合网| 免费黄色激情视频| 亚洲欧洲成人av每日更新| 成年人网站免费看| 成人av午夜影院| 99免费观看视频| 国产寡妇亲子伦一区二区| 一区二区三区四区毛片| 免费在线观看日韩欧美| 欧美婷婷精品激情| 日本午夜一区二区| 久草精品在线播放| 日韩精品五月天| 久久久国产欧美| 丝袜美腿亚洲一区| 凹凸日日摸日日碰夜夜爽1| 日韩高清电影一区| 妺妺窝人体色www在线观看| 久久av一区| av片中文字幕| 久久国产一二区| 国产熟人av一二三区| 亚洲自啪免费| 国产aaaaa毛片| 久久电影网电视剧免费观看| 国产成人美女视频| 国产91精品久久久久久久网曝门| 中文写幕一区二区三区免费观成熟| 韩国理伦片一区二区三区在线播放| 久久精品无码一区二区三区毛片| 国产很黄免费观看久久| 成人做爰www看视频软件 | 日本成人在线视频网址| 欧美成a人片在线观看久| 国产精品国产三级国产专播精品人 | 国产女主播视频一区二区| 久久久久久久久福利| 国产精品人成在线观看免费| 九九视频在线免费观看| 午夜视频一区在线观看| 狠狠狠狠狠狠狠| 日韩女优电影在线观看| 午夜黄色小视频| 亚洲天堂av在线免费| 久草资源在线| 久久久久久12| 日韩免费电影| 91免费看网站| 婷婷国产精品| 综合一区中文字幕| 亚洲精品男同| 久久精品国产露脸对白| 成人h版在线观看| 懂色av蜜桃av| 五月激情综合婷婷| 亚洲视频在线观看一区二区| 欧美va天堂va视频va在线| 亚洲免费一级片| 自拍偷拍免费精品| 成人免费一区二区三区牛牛| 国产成人avxxxxx在线看| 国产精品毛片av| 亚洲精品电影在线一区| 国内激情久久| 国产永久免费网站| 91免费观看国产| 国产免费嫩草影院| 欧美日在线观看| 国产喷水吹潮视频www| 亚洲国内精品在线| 国产精品剧情一区二区在线观看| 91国偷自产一区二区三区的观看方式| 日韩av首页| av激情久久| 99久久综合狠狠综合久久aⅴ| 免费看国产曰批40分钟| 国产主播一区二区三区| 久久视频精品在线观看| 欧美日韩国产精品一区| 精品国产18久久久久久| 久久精品国产2020观看福利| 中文字幕在线看片| 91嫩草免费看| 欧美日韩一区二区三区视频播放| 97久久国产亚洲精品超碰热| 琪琪一区二区三区| 一级黄色片毛片| 一个色综合av| 国产精品一区二区三区在线免费观看| 亚洲深夜福利网站| 91精品xxx在线观看| 国产视频一区二区三区四区| 国产精品99一区二区三| 一区二区免费av| 国产欧美日韩视频一区二区| 久久黄色免费视频| 精品欧美一区二区三区精品久久| 蜜桃视频在线观看免费视频网站www| 欧美性在线观看| 亚洲第一福利专区| 国产白丝袜美女久久久久| 国产91精品一区二区| 一区二区国产精品精华液| 欧美色精品在线视频| xxxxx日韩| 国产欧美精品va在线观看| 国产一区日韩| 天天操,天天操| 中文字幕免费不卡| 69视频免费看| 深夜成人在线观看| yy6080久久伦理一区二区| 日韩精品一区二区三区外面 | 2018日韩中文字幕| jizz性欧美2| 久久亚洲中文字幕无码| www.亚洲国产| 色婷婷av国产精品| 亚洲天堂免费在线| 成人软件在线观看| 久久er99热精品一区二区三区 | 99精品视频一区| 中文字幕在线播| 亚洲人午夜精品免费| 全球最大av网站久久| 亚洲午夜精品久久久久久浪潮| 人妖欧美一区二区| 九九热最新地址| 日韩午夜在线观看| 懂色av一区| 欧洲成人一区二区| 日本大胆欧美人术艺术动态| 色婷婷av777| 3atv一区二区三区| 婷婷丁香在线| 欧美高清性xxxxhd | 99在线精品免费视频| 国产尤物一区二区| 国内免费精品视频| 亚洲视频一区二区三区| 日韩欧美中文在线观看| 欧美久久久久久久久久久久久| 99久久精品一区| 亚洲天堂网视频| 欧美日本亚洲视频| 国产亚洲成av人片在线观黄桃| 9久久婷婷国产综合精品性色 | 一级性生活免费视频| 日韩视频在线一区二区| av在线私库| 一区二区日本| www.欧美日韩| 国产一区二区三区成人| 久久久久久久久久av| 伊人久久大香线蕉| 久久久久久久久久久影视|