日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s pod restartcount 改0_Prometheus+k8s之告警通知

發(fā)布時(shí)間:2025/4/17 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s pod restartcount 改0_Prometheus+k8s之告警通知 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

集群外部署Prometheus+Grafana監(jiān)控K8S解析 一文剖析了k8s的監(jiān)控,但是無法在grafana dashboard中配置告警,因此我們需要額外在Prometheus單獨(dú)配置告警規(guī)則,配合AlertManager實(shí)現(xiàn)告警。而Prometheus監(jiān)控的指標(biāo)很多,如何定義告警規(guī)則就是我們接下來需要做的。

通常情況下,運(yùn)維工作中會(huì)存在多個(gè)監(jiān)控告警系統(tǒng)并行使用的情況,如zabbix、nagios、prometheus;每個(gè)監(jiān)控系統(tǒng)面向的監(jiān)控需求不同,我們不可能通過一套監(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有問題,則會(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長時(shí)間為0時(shí),說明Pod啟動(dòng)有問題,需要進(jìn)行告警。
  • PodRestart
    當(dāng)Pod健康檢查不成功,Pod會(huì)進(jìn)行不斷的重啟,一旦超過一定的次數(shù),則說明Pod有問題,此時(shí)需要進(jìn)行告警。

注意:
查看pod狀態(tài),只有當(dāng)READY為1,STATUS為Running時(shí),Pod才是正常運(yùn)行的。

[root@test ~]# kubectl get pod NAME READY STATUS RESTARTS AGEnode-exporter-nch8w 1/1 Running 0 46hnode-exporter-smnxn 1/1 Running 0 46hnode-exporter-sqng2 1/1 Running 0 46h12345

Prometheus

  • 修改配置文件
  • # 配置alertmanageralerting: alertmanagers: - static_configs: - targets: - 192.168.3.44:9093# 告警規(guī)則rule_files: - "/prometheus/etc/k8s.yml"123456789

    注意:由于prometheus使用的是docker部署,因此k8s.yml位置必須是容器內(nèi)部的目錄位置,而不是宿主機(jī)上的問題。

  • 添加告警規(guī)則
  • groups:- name: node.rules rules: - alert: JobDown #檢測(cè)job的狀態(tài),持續(xù)5分鐘metrices不能訪問會(huì)發(fā)給altermanager進(jìn)行報(bào)警 expr: up == 0 #0不正常,1正常 for: 5m #持續(xù)時(shí)間 , 表示持續(xù)5分鐘獲取不到信息,則觸發(fā)報(bào)警 labels: severity: error cluster: k8s annotations: summary: "Job: {{ $labels.job }} down" description: "Instance:{{ $labels.instance }}, Job {{ $labels.job }} stop " - alert: PodDown expr: kube_pod_container_status_running != 1 for: 2s labels: severity: warning cluster: k8s annotations: summary: 'Container: {{ $labels.container }} down' description: 'Namespace: {{ $labels.namespace }}, Pod: {{ $labels.pod }} is not running' - alert: PodReady expr: kube_pod_container_status_ready != 1 for: 5m #Ready持續(xù)5分鐘,說明啟動(dòng)有問題 labels: severity: warning cluster: k8s annotations: summary: 'Container: {{ $labels.container }} ready' description: 'Namespace: {{ $labels.namespace }}, Pod: {{ $labels.pod }} always ready for 5 minitue' - alert: PodRestart expr: changes(kube_pod_container_status_restarts_total[30m])>0 #最近30分鐘pod重啟 for: 2s labels: severity: warning cluster: k8s annotations: summary: 'Container: {{ $labels.container }} restart' description: 'namespace: {{ $labels.namespace }}, pod: {{ $labels.pod }} restart {{ $value }} times'

    其中為每條告警規(guī)則添加了兩個(gè)自定義label:

    • severity: warning
      告警緊急程度。
    • cluster: k8s
      集群標(biāo)簽,alertmanager根據(jù)此標(biāo)簽進(jìn)行告警路由選擇,以便通知到告警人。

    注意:for告警持續(xù)時(shí)間,可根據(jù)實(shí)際情況進(jìn)行修改。

  • 檢查配置并重載
  • # 1.進(jìn)入prometheus容器docker exec -it b9824084f26f /bin/sh# 2.檢查配置文件# /bin/promtool check rules /prometheus/etc/k8s.ymlChecking /prometheus/etc/k8s.yml SUCCESS: 4 rules found# 3.重載curl -X POST http://127.0.0.1:9090/-/reload

    Alertmanager

    1.告警設(shè)置

    默認(rèn)進(jìn)行微信告警,也可根據(jù)部門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' # 按部門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: true

    2.告警模板

    # 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" }}
    告警類型: {{ .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

    告警類型: JobDown

    告警主題: Job: kube-node-exporter down

    告警詳情: Instance:uvmsvr-3-217, Job kube-node-exporter stop

    [Resolved]:

    觸發(fā)時(shí)間: 2020-10-27 16:46:44

    告警類型: 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

    告警類型: PodRestart

    告警主題: Container: sdk-back down

    告警詳情: namespace: test, pod: api-sdk-58497c4db9-hwgjl is not running

    [Resolved]:

    觸發(fā)時(shí)間: 2020-10-28 14:03:14

    告警類型: 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

    告警類型: 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

    告警類型: 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

    告警類型: PodRestart

    告警主題: Container: sdk-back restart

    告警詳情: namespace: test, pod: api-sdk-58497c4db9-k98g5 restart 3 times

    [Resolved]:

    觸發(fā)時(shí)間: 2020-10-29 11:20:29

    告警類型: 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ù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的k8s pod restartcount 改0_Prometheus+k8s之告警通知的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。