飛書(shū),字節(jié)跳動(dòng)旗下一站式企業(yè)協(xié)作平臺(tái),將即時(shí)溝通、智能日歷、音視頻會(huì)議、OKR、云文檔、云盤和工作臺(tái)深度整合,通過(guò)開(kāi)放兼容的平臺(tái),集成第三方工具于工作臺(tái),讓成員在一處即可實(shí)現(xiàn)高效的溝通和流暢的協(xié)作,全方位提升企業(yè)效率,為企業(yè)提供安全保障。
告警模板詳解
默認(rèn)情況下Alertmanager
使用了系統(tǒng)自帶的默認(rèn)通知模板,模板源碼可以從Github獲得。Alertmanager的通知模板基于Go的模板系統(tǒng)。Alertmanager也支持用戶定義和使用自己的模板,一般來(lái)說(shuō)有兩種方式可以選擇。
第一種,基于模板字符串
用戶可以直接在Alertmanager的配置文件中使用模板字符串,例如:
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'
第二種方式,自定義可復(fù)用的模板文件
例如,可以創(chuàng)建自定義模板文件custom-template.tmpl,如下所示:
{{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}
通過(guò)在Alertmanager的全局設(shè)置中定義templates配置來(lái)指定自定義模板的訪問(wèn)路徑:
# 從中讀取自定義通知模板定義的文件。
# The last component may use a wildcard matcher, e.g. 'templates/*.tmpl'.
templates:
[ - <filepath> ... ]
設(shè)置了自定義模板的訪問(wèn)路徑后,用戶則可以直接在配置中使用該模板:
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: '{{ template "slack.myorg.text" . }}'
templates:
- '/etc/alertmanager/templates/myorg.tmpl'
1. 使用
別忘了在群組里面創(chuàng)建機(jī)器人呦~
? 若選擇應(yīng)用到所有告警,則發(fā)送到 Cloud Alert 的所有告警均通過(guò)該協(xié)作策略通知給所有人;
? 若不選擇,則可以通過(guò)在 分派策略 中自定義配置哪些告警通過(guò)該協(xié)作策略通知。
docker run -d --name prom-alert-feishu -p 9094:8080 --restart=always \
-e FEISHU_TOKEN=xxxx \
javafamily/prometheus-webhook-feishu:2.3.2-SNAPSHOT
其中 FEISHU_TOKEN
環(huán)境變量為可選參數(shù), 為飛書(shū) webhook 最后一部分,即 https://open.feishu.cn/open-apis/bot/v2/hook/${FEISHU_TOKEN}
? 如果只對(duì)一個(gè)飛書(shū)群通知,可以添加該環(huán)境變量即可;
? 如果需要對(duì)多個(gè)飛書(shū)群通知, 需要在 Prometheus 報(bào)警 rule 的 annotations中通過(guò)指定 token
參數(shù)為不同飛書(shū)群通知;
2. API
通知的內(nèi)容通過(guò) Prometheus 的報(bào)警規(guī)則配置 annotations/template
指定,template 支持 ${xxx} 占位, XXX 取自 annotations/xxx 配置。也可以通過(guò) annotations/content 直接指定,不做任何處理直接展示。《需注意飛書(shū)通知如果是關(guān)鍵字通知的話,通知內(nèi)容中需要包含關(guān)鍵字!》
文本通知
${basePath}/alert/text
文本通知只需要指定 template 或者 content定義模板內(nèi)容即可
POST 通知
${basePath}/alert/post
飛書(shū)的 POST 通知可以指定標(biāo)題(titleTemplate/title), 通知內(nèi)容(template/content), 按鈕文本(btn), 按鈕鏈接(link)
Card 通知
${basePath}/alert/card
飛書(shū)的 Card 通知可以指定標(biāo)題(titleTemplate/title), 通知內(nèi)容(template/content), 按鈕文本(btn), 按鈕鏈接(link)
3. 配置報(bào)警 Rule
相關(guān)的規(guī)則設(shè)置定義在一個(gè)group下。在每一個(gè)group中我們可以定義多個(gè)告警規(guī)則(rule)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-518395.html
groups:
# 組名。報(bào)警規(guī)則組名稱
- name: 內(nèi)存預(yù)警
rules:
- alert: 內(nèi)存使用率預(yù)警
# expr:基于PromQL表達(dá)式告警觸發(fā)條件,用于計(jì)算是否有時(shí)間序列滿足該條件。
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 98
# for:評(píng)估等待時(shí)間,可選參數(shù)。用于表示只有當(dāng)觸發(fā)條件持續(xù)一段時(shí)間后才發(fā)送告警。在等待期間新產(chǎn)生告警的狀態(tài)為pending。
for: 1m # for語(yǔ)句會(huì)使 Prometheus 服務(wù)等待指定的時(shí)間, 然后執(zhí)行查詢表達(dá)式。(for 表示告警持續(xù)的時(shí)長(zhǎng),若持續(xù)時(shí)長(zhǎng)小于該時(shí)間就不發(fā)給alertmanager了,大于該時(shí)間再發(fā)。for的值不要小于prometheus中的scrape_interval,例如scrape_interval為30s,for為15s,如果觸發(fā)告警規(guī)則,則再經(jīng)過(guò)for時(shí)長(zhǎng)后也一定會(huì)告警,這是因?yàn)樽钚碌亩攘恐笜?biāo)還沒(méi)有拉取,在15s時(shí)仍會(huì)用原來(lái)值進(jìn)行計(jì)算。另外,要注意的是只有在第一次觸發(fā)告警時(shí)才會(huì)等待(for)時(shí)長(zhǎng)。)
# labels:自定義標(biāo)簽,允許用戶指定要附加到告警上的一組附加標(biāo)簽。
labels:
# severity: 指定告警級(jí)別。有三種等級(jí),分別為 warning, critical 和 emergency 。嚴(yán)重等級(jí)依次遞增。
severity: critical
# annotations: 附加信息,比如用于描述告警詳細(xì)信息的文字等,annotations的內(nèi)容在告警產(chǎn)生時(shí)會(huì)一同作為參數(shù)發(fā)送到Alertmanager。
annotations:
title: "內(nèi)存使用率預(yù)警"
serviceName: "{{ $labels.serviceName }}"
instance: "{{ $labels.instance }}"
value: "{{ $value }}"
btn: "點(diǎn)擊查看詳情 :嘻嘻:"
link: "http://127.0.0.1/grafana/d/aka/duo-job-ji-cheng-fu-wu-qi-jian-kong"
# 通過(guò) template 指定通知內(nèi)容模板
template: "**${serviceName}**(${instance}) 內(nèi)存使用率已經(jīng)超過(guò)閾值 **98%**, 請(qǐng)及時(shí)處理!\n當(dāng)前值: ${value}%"
# 【可選】通過(guò) token 指定通知到不同飛書(shū)群
token: "{{ $labels.feishuToken }}"
- name: 磁盤預(yù)警
rules:
- alert: 磁盤使用率預(yù)警
expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 90
for: 1m
labels:
severity: critical
annotations:
title: "磁盤使用率預(yù)警"
serviceName: "{{ $labels.serviceName }}"
instance: "{{ $labels.instance }}"
mountpoint: "{{ $labels.mountpoint }}"
value: "{{ $value }}"
btn: "點(diǎn)擊查看詳情 :玫瑰:"
link: "http://127.0.0.1/grafana/d/aka/duo-job-ji-cheng-fu-wu-qi-jian-kong"
template: "**${serviceName}**(${instance}) 服務(wù)器磁盤設(shè)備使用率超過(guò) **90%**, 請(qǐng)及時(shí)處理!\n掛載點(diǎn): ${mountpoint}\n當(dāng)前值: ${value}%!"
token: "{{ $labels.feishuToken }}"
- name: 實(shí)例存活報(bào)警
rules:
- alert: 實(shí)例存活報(bào)警
expr: up == 0
for: 30s
labels:
severity: emergency
annotations:
title: "節(jié)點(diǎn)宕機(jī)報(bào)警"
serviceName: "{{ $labels.serviceName }}"
instance: "{{ $labels.instance }}"
btn: "點(diǎn)擊查看詳情 :玫瑰:"
link: "http://127.0.0.1:9090/targets"
template: "節(jié)點(diǎn) **${serviceName}**(${instance}) 斷聯(lián), 請(qǐng)及時(shí)處理!"
token: "{{ $labels.feishuToken }}"
There is no won’t do, only don’t want to do.文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-518395.html
到了這里,關(guān)于基于飛書(shū)WebHook機(jī)器人的Alert Manager報(bào)警實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!