k8s pod restartcount 改0_Prometheus+k8s之告警通知
集群外部署Prometheus+Grafana監(jiān)控K8S解析 一文剖析了k8s的監(jiān)控,但是無(wú)法在grafana dashboard中配置告警,因此我們需要額外在Prometheus單獨(dú)配置告警規(guī)則,配合AlertManager實(shí)現(xiàn)告警。而Prometheus監(jiān)控的指標(biāo)很多,如何定義告警規(guī)則就是我們接下來(lái)需要做的。
通常情況下,運(yùn)維工作中會(huì)存在多個(gè)監(jiān)控告警系統(tǒng)并行使用的情況,如zabbix、nagios、prometheus;每個(gè)監(jiān)控系統(tǒng)面向的監(jiān)控需求不同,我們不可能通過(guò)一套監(jiān)控實(shí)現(xiàn)所有的監(jiān)控需求。認(rèn)識(shí)到這一點(diǎn)后,我們就可以將Prometheus的監(jiān)控指標(biāo)主要集中在k8s資源、pod性能方面,而其他傳統(tǒng)的服務(wù)器性能監(jiān)控可以交給其他監(jiān)控系統(tǒng)。
分析
結(jié)合自己的實(shí)際應(yīng)用,我把k8s的告警規(guī)則分為以下幾方面:
- JobDown
對(duì)應(yīng)Prometheus指標(biāo)收集的4個(gè)Job、分別為kube-state-metrics、kube-node-exporter、kube-node-kubelet、kube-node-cadvisor,一旦哪個(gè)Job有問(wèn)題,則會(huì)進(jìn)行告警。 - PodDown
當(dāng)處于Running狀態(tài)的pod停止時(shí),則會(huì)進(jìn)行告警。 - PodReady
在Pod重新調(diào)度后,雖然Pod處于Running狀態(tài),由于此時(shí)正在重啟,Ready為0,只有當(dāng)readiness探針探測(cè)正常后,Ready為1,才會(huì)正式接受請(qǐng)求;因此Ready長(zhǎng)時(shí)間為0時(shí),說(shuō)明Pod啟動(dòng)有問(wèn)題,需要進(jìn)行告警。 - PodRestart
當(dāng)Pod健康檢查不成功,Pod會(huì)進(jìn)行不斷的重啟,一旦超過(guò)一定的次數(shù),則說(shuō)明Pod有問(wèn)題,此時(shí)需要進(jìn)行告警。
注意:
查看pod狀態(tài),只有當(dāng)READY為1,STATUS為Running時(shí),Pod才是正常運(yùn)行的。
Prometheus
注意:由于prometheus使用的是docker部署,因此k8s.yml位置必須是容器內(nèi)部的目錄位置,而不是宿主機(jī)上的問(wèn)題。
其中為每條告警規(guī)則添加了兩個(gè)自定義label:
- severity: warning
告警緊急程度。 - cluster: k8s
集群標(biāo)簽,alertmanager根據(jù)此標(biāo)簽進(jìn)行告警路由選擇,以便通知到告警人。
注意:for告警持續(xù)時(shí)間,可根據(jù)實(shí)際情況進(jìn)行修改。
Alertmanager
1.告警設(shè)置
默認(rèn)進(jìn)行微信告警,也可根據(jù)部門(mén)rd、集群cluster、產(chǎn)品product等標(biāo)簽,進(jìn)行郵件或微信告警。
global: resolve_timeout: 5m smtp_smarthost: xxx.xxx.cn:587 smtp_from: xxxx@xxx.cn smtp_auth_username: xxx@xx.cn smtp_auth_password: xxxxxxxx#告警模板templates:- '/usr/local/alertmanager/wechat.tmpl'route: #按alertname進(jìn)行分組 group_by: ['alertname'] group_wait: 5m #同一組內(nèi)警報(bào),等待group_interval時(shí)間后,再繼續(xù)等待repeat_interval時(shí)間 group_interval: 5m #當(dāng)group_interval時(shí)間到后,再等待repeat_interval時(shí)間后,才進(jìn)行報(bào)警 repeat_interval: 5m # 默認(rèn)微信告警 receiver: 'wechat' # 按部門(mén)rd、集群cluster、產(chǎn)品product區(qū)分,進(jìn)行不同方式的告警 routes: - receiver: 'email_rd' match_re: department: 'rd' - receiver: 'email_k8s' match_re: cluster: 'k8s' - receiver: 'wechat_product' match_re: product: 'app'receivers:#微信告警通道- name: 'wechat' wechat_configs: - corp_id: 'wwxxxxfdd372e' agent_id: '1000005' api_secret: 'FxLzx7sdfasdAhPgoK9Dt-NWYOLuy-RuX3I' to_user: 'test1|test2' send_resolved: true#郵件告警通道- name: 'email_tech' email_configs: - to: muxq@cityhouse.cn headers: {"subject":'{{ template "email.test.header" . }}'} html: '{{ template "email.test.message" . }}' send_resolved: true- name: 'email_k8s' email_configs: - to: 'xxx@xx.cn,xx@xx.cn' headers: {"subject":'{{ template "email.test.header" . }}'} html: '{{ template "email.test.message" . }}' send_resolved: true#微信告警通道- name: 'wechat_product' wechat_configs: - corp_id: 'wwxxxxfdd372e' agent_id: '1000005' api_secret: 'FxLzx7sdfasdAhPgoK9Dt-NWYOLuy-RuX3I' to_user: 'test1|test2' send_resolved: true2.告警模板
# 1.微信告警模板{{ define "grafana.default.message" }}{{ range .Alerts }}{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}{{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}{{ end }}{{ end }}{{ end }}{{ define "wechat.default.message" }}{{ if eq .Status "firing"}}[Warning]:{{ template "grafana.default.message" . }}{{ end }}{{ if eq .Status "resolved" }}[Resolved]:{{ template "grafana.default.message" . }}{{ end }}{{ end }}# 2.郵件告警模板{{ define "email.to.html" }}{{ range .Alerts }}觸發(fā)時(shí)間: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
告警類(lèi)型: {{ .Labels.alertname }}
告警主題: {{ .Annotations.summary }}
告警詳情: {{ .Annotations.description }}
{{ end }}{{ end }}{{ define "email.test.header" }}{{ if eq .Status "firing"}}[Warning]:{{ range .Alerts }}{{ .Annotations.summary }} {{ end }}{{ end }}{{ if eq .Status "resolved"}}[Resolved]:{{ range .Alerts }}{{ .Annotations.summary }} {{ end }}{{ end }}{{ end }}{{ define "email.test.message" }}{{ if eq .Status "firing"}}[Warning]:{{ template "email.to.html" . }}{{ end }}{{ if eq .Status "resolved" }}[Resolved]:{{ template "email.to.html" . }}{{ end }}{{ end }}
3.告警內(nèi)容
(1)微信告警
(2)郵件告警
# 1.JobDown
[Warning]:
觸發(fā)時(shí)間: 2020-10-27 16:46:44
告警類(lèi)型: JobDown
告警主題: Job: kube-node-exporter down
告警詳情: Instance:uvmsvr-3-217, Job kube-node-exporter stop
[Resolved]:
觸發(fā)時(shí)間: 2020-10-27 16:46:44
告警類(lèi)型: JobDown
告警主題: Job: kube-node-exporter down
告警詳情: Instance:uvmsvr-3-217, Job kube-node-exporter stop
# 2.PodDown
[Warning]:
觸發(fā)時(shí)間: 2020-10-28 14:03:14
告警類(lèi)型: PodRestart
告警主題: Container: sdk-back down
告警詳情: namespace: test, pod: api-sdk-58497c4db9-hwgjl is not running
[Resolved]:
觸發(fā)時(shí)間: 2020-10-28 14:03:14
告警類(lèi)型: PodRestart
告警主題: Container: sdk-back down
告警詳情: namespace: test, pod: api-sdk-58497c4db9-hwgjl is not running
# 3.PodReady
[Warning]:
觸發(fā)時(shí)間: 2020-10-29 11:24:59
告警類(lèi)型: PodReady
告警主題: Container: sdk-back ready
告警詳情: Namespace: test, Pod: api-sdk-58497c4db9-k98g5 always ready for 5 minitue
[Resolved]:
觸發(fā)時(shí)間: 2020-10-29 11:24:59
告警類(lèi)型: PodReady
告警主題: Container: sdk-back ready
告警詳情: Namespace: test, Pod: api-sdk-58497c4db9-k98g5 always ready for 5 minitue
# 4.PodRestart
[Warning]:
觸發(fā)時(shí)間: 2020-10-29 11:20:29
告警類(lèi)型: PodRestart
告警主題: Container: sdk-back restart
告警詳情: namespace: test, pod: api-sdk-58497c4db9-k98g5 restart 3 times
[Resolved]:
觸發(fā)時(shí)間: 2020-10-29 11:20:29
告警類(lèi)型: PodRestart
告警主題: Container: sdk-back restart
告警詳情: namespace: test, pod: api-sdk-58497c4db9-k98g5 restart 3 times
總結(jié)
除了以上告警規(guī)則,我們還可根據(jù)grafana中的dashboard進(jìn)一步配置,畢竟里面監(jiān)控內(nèi)容更加詳細(xì)。總之需要根據(jù)實(shí)際
應(yīng)用,選擇適合自己的才是最好的。
另外還可以參考阿里云關(guān)于Prometheus的監(jiān)控規(guī)則進(jìn)一步豐富告警規(guī)則:
https://help.aliyun.com/document_detail/176180.html?spm=a2c4g.11186623.4.5.717e3eebxbWsZy#title-dcc-mv9-w33
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的k8s pod restartcount 改0_Prometheus+k8s之告警通知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开发实习生做什么_实习生月薪6W,还有住
- 下一篇: dat文件读取_微信dat文件如何查看