自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【云原生】Prometheus 自定義告警規(guī)則

云計(jì)算 云原生
從Prometheus server端接收到alerts后,會(huì)基于PromQL的告警規(guī)則 分析數(shù)據(jù),如果滿足PromQL定義的規(guī)則,則會(huì)產(chǎn)生一條告警,并發(fā)送告警信息到Alertmanager,Alertmanager則是根據(jù)配置處理告警信息并發(fā)送。

一、概述

通過(guò)創(chuàng)建Prometheus監(jiān)控告警規(guī)則,您可以制定針對(duì)特定Prometheus實(shí)例的告警規(guī)則。當(dāng)告警規(guī)則設(shè)置的條件滿足后,系統(tǒng)會(huì)產(chǎn)生對(duì)應(yīng)的告警事件。如果想要收到通知,需要進(jìn)一步配置對(duì)應(yīng)的通知策略以生成告警并且以短信、郵件、電話、釘群機(jī)器人、企業(yè)微信機(jī)器人或者Webhook等方式發(fā)送通知。

從Prometheus server端接收到alerts后,會(huì)基于PromQL的告警規(guī)則 分析數(shù)據(jù),如果滿足PromQL定義的規(guī)則,則會(huì)產(chǎn)生一條告警,并發(fā)送告警信息到Alertmanager,Alertmanager則是根據(jù)配置處理告警信息并發(fā)送。所以Prometheus的告警配置依賴于PromQL與AlertManager,關(guān)于這兩個(gè)介紹可以參考我以下文章:

  • 【云原生】Prometheus AlertManager講解與實(shí)戰(zhàn)操作
  • 【云原生】Prometheus PromQL講解與實(shí)戰(zhàn)操作
  • 【云原生】Prometheus Pushgetway講解與實(shí)戰(zhàn)操作
  • 官方文檔:https://prometheus.io/docs/alerting/latest/overview/

圖片

二、告警實(shí)現(xiàn)流程

圖片

設(shè)置警報(bào)和通知的主要步驟是:

  1. 在Prometheus中配置告警規(guī)則。
  2. 配置Prometheus 與 AlertManager 關(guān)聯(lián)。
  3. 配置 AlertManager 告警通道。

三、告警規(guī)則

官方文檔:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

1)告警規(guī)則配置

在Prometheus 配置(prometheus.yml)中添加報(bào)警規(guī)則配置,配置文件中 rule_files 就是用來(lái)指定報(bào)警規(guī)則文件的,如下配置即指定存放報(bào)警規(guī)則的目錄為/etc/prometheus,規(guī)則文件為rules.yml:

rule_files:
- /etc/prometheus/rules.yml

設(shè)置報(bào)警規(guī)則:

警報(bào)規(guī)則允許基于 Prometheus 表達(dá)式語(yǔ)言的表達(dá)式來(lái)定義報(bào)警報(bào)條件的,并在觸發(fā)警報(bào)時(shí)發(fā)送通知給外部的接收者(Alertmanager),一條警報(bào)規(guī)則主要由以下幾部分組成:

  • alert——告警規(guī)則的名稱。
  • expr——是用于進(jìn)行報(bào)警規(guī)則 PromQL 查詢語(yǔ)句。
  • for——評(píng)估告警的等待時(shí)間(Pending Duration)。
  • labels——自定義標(biāo)簽,允許用戶指定額外的標(biāo)簽列表,把它們附加在告警上。
  • annotations——用于存儲(chǔ)一些額外的信息,用于報(bào)警信息的展示之類的。

rules.yml示例如下:

groups:
- name: example
rules:
- alert: high_memory
# 當(dāng)內(nèi)存占有率超過(guò)10%,持續(xù)1min,則觸發(fā)告警
expr: 100 - ((node_memory_MemAvailable_bytes{instance="192.168.182.110:9100",job="node_exporter"} * 100) / node_memory_MemTotal_bytes{instance="192.168.182.110:9100",job="node_exporter"}) > 90
for: 1m
labels:
severity: page
annotations:
summary: spike memeory

2)監(jiān)控服務(wù)器是否在線

對(duì)于被Prometheus監(jiān)控的服務(wù)器,我們都有一個(gè)up指標(biāo),可以知道該服務(wù)是否在線。

up == 0  #服務(wù)下線了。
up == 1 #服務(wù)在線。

【示例】

groups:
- name: Test-Group-001 # 組的名字,在這個(gè)文件中必須要唯一
rules:
- alert: InstanceDown # 告警的名字,在組中需要唯一
expr: up == 0 # 表達(dá)式, 執(zhí)行結(jié)果為true: 表示需要告警
for: 1m # 超過(guò)多少時(shí)間才認(rèn)為需要告警(即up==0需要持續(xù)的時(shí)間)
labels:
severity: warning # 定義標(biāo)簽
annotations:
summary: "服務(wù) {{ $labels.instance }} 下線了"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

注意:

  • for 指定達(dá)到告警閾值之后,一致要持續(xù)多長(zhǎng)時(shí)間,才發(fā)送告警數(shù)據(jù)。
  • labels 中可以指定自定義的標(biāo)簽,如果定義的標(biāo)簽已經(jīng)存在,則會(huì)被覆蓋??梢允褂媚0?。
  • annotations 中的數(shù)據(jù),可以使用模板,$labels表示告警數(shù)據(jù)的標(biāo)簽,{{$value}}表示時(shí)間序列的值。

3)告警數(shù)據(jù)的狀態(tài)

  • Inactive——表示沒(méi)有達(dá)到告警的閾值,即expr表達(dá)式不成立。
  • Pending——表示達(dá)到了告警的閾值,即expr表達(dá)式成立了,但是未滿足告警的持續(xù)時(shí)間,即for的值。
  • Firing——已經(jīng)達(dá)到閾值,且滿足了告警的持續(xù)時(shí)間。

【溫馨提示】經(jīng)測(cè)試發(fā)現(xiàn),如果同一個(gè)告警數(shù)據(jù)達(dá)到了Firing,那么不會(huì)再次產(chǎn)生一個(gè)告警數(shù)據(jù),除非該告警解決了。

四、實(shí)戰(zhàn)操作

圖片

1)下載 node_exporter

node-exporter用于采集node的運(yùn)行指標(biāo),包括node的cpu、load、filesystem、meminfo、network等基礎(chǔ)監(jiān)控指標(biāo),類似于zabbix監(jiān)控系統(tǒng)的的zabbix-agent。

下載地址:https://github.com/prometheus/node_exporter/releases/

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.5.0.linux-amd64.tar.gz

2)啟動(dòng) node_exporter

ln -s /opt/prometheus/exporter/node_exporter/node_exporter-1.5.0.linux-amd64/node_exporter  /usr/local/bin/node_exporter
# 指定端口啟動(dòng),默認(rèn)端口:9100
node_exporter --web.listen-address=":9100"

配置node_exporter.service啟動(dòng)

# 默認(rèn)端口9100
cat >/usr/lib/systemd/system/node_exporter.service<<EOF
[Unit]
Descriptinotallow=node_exporter
After=network.target
#可以創(chuàng)建相應(yīng)的用戶和組 啟動(dòng)
#User=prometheus
#Group=prometheus

[Service]
ExecStart=/opt/prometheus/exporter/node_exporter/node_exporter-1.5.0.linux-amd64/node_exporter --web.listen-address=:9100
[Install]
WantedBy=multi-user.target
EOF

啟動(dòng)服務(wù)

systemctl daemon-reload
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter

圖片

檢查

curl http://localhost:9100/metrics

圖片

3)配置Prometheus加載node_exporter

添加或修改配置 prometheus.yml

圖片

重啟加載配置

systemctl restart prometheus
# 1、 kill方式
#kill -HUP pid
# 2、curl方式(推薦)
#curl -X POST http://IP/-/reload
# 【注意】需要在啟動(dòng)的命令行增加參數(shù):--web.enable-lifecycle
curl -X POST http://192.168.182.110:9090/-/reload
# 3、重啟(不推薦,重啟會(huì)導(dǎo)致所有的連接短暫性中斷)
systemctl restart prometheus

檢查web:http://ip:9090/targets

圖片

4)告警規(guī)則配置

在Prometheus配置文件rometheus.yml 中配置如下:

圖片

在/etc/prometheus/rule.yml配置如下:

groups:
- name: Test-Group-001 # 組的名字,在這個(gè)文件中必須要唯一
rules:
- alert: InstanceDown # 告警的名字,在組中需要唯一
expr: up == 0 # 表達(dá)式, 執(zhí)行結(jié)果為true: 表示需要告警
for: 1m # 超過(guò)多少時(shí)間才認(rèn)為需要告警(即up==0需要持續(xù)的時(shí)間)
labels:
severity: warning # 定義標(biāo)簽
annotations:
summary: "服務(wù) {{ $labels.instance }} 下線了"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

重新加載

curl -X POST http://localhost:9090/-/reload

在web上就可以看到一個(gè)告警規(guī)則。

圖片

5)模擬告警

手動(dòng)關(guān)機(jī)

sudo shutdown -h now

過(guò)了一段時(shí)間告警狀態(tài)就變成Pending

圖片

再過(guò)一段時(shí)間告警就變成了Firing

圖片

6)配置告警通道

這里以有郵件告警為示例,其它的也差不多。修改配置之前最好先備份一下之前的配置

cp alertmanager.yml alertmanager.bak

【1】配置 alertmanager.yml

global:
resolve_timeout: 5m
## 這里為qq郵箱 SMTP 服務(wù)地址,官方地址為 smtp.qq.com 端口為 465587,同時(shí)要設(shè)置開(kāi)啟 POP3/SMTP 服務(wù)。
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: 'xxxxxxxx@qq.com'
smtp_auth_username: 'xxxxxxxx@qq.com'
#授權(quán)碼,不是密碼,在 QQ 郵箱服務(wù)端設(shè)置開(kāi)啟 POP3/SMTP 服務(wù)時(shí)會(huì)提示
smtp_auth_password: 'xxxxxxxx'
smtp_require_tls: false

#1、模板
templates:
- '/opt/prometheus/alertmanager/alertmanager-0.24.0.linux-amd64/templates/email.tmpl'

#2、路由
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
#郵箱
receiver: 'email'

receivers:
- name: 'email'
email_configs:
## 接收警報(bào)的email(這里是引用模板文件中定義的變量)
- to: '{{ template "email.to"}}'
## 發(fā)送郵件的內(nèi)容(調(diào)用模板文件中的)
html: '{{ template "email.to.html" .}}'
send_resolved: true

# 抑制器配置
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
#確保這個(gè)配置下的標(biāo)簽內(nèi)容相同才會(huì)抑制,也就是說(shuō)警報(bào)中必須有這三個(gè)標(biāo)簽值才會(huì)被抑制。
equal: ['alertname', 'dev', 'instance']

【2】模板 alert.tmpl

模板文件配置了email.from、email.to、email.to.html 三種模板變量,可以在 alertmanager.yml 文件中直接配置引用。這里 email.to.html 就是要發(fā)送的郵件內(nèi)容,支持 Html 和 Text 格式,這里為了顯示好看,采用 Html 格式簡(jiǎn)單顯示信息。下邊 {{ range .Alerts }} 是個(gè)循環(huán)語(yǔ)法,用于循環(huán)獲取匹配的 Alerts 的信息。

{{ define "email.from" }}xxxxxxxx@qq.com{{ end }}
{{ define "email.to" }}xxxxxxxx@163.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert <br>
告警級(jí)別: {{ .Labels.severity }} 級(jí) <br>
告警類型: {{ .Labels.alertname }} <br>
故障主機(jī): {{ .Labels.instance }} <br>
告警主題: {{ .Annotations.summary }} <br>
告警詳情: {{ .Annotations.description }} <br>
觸發(fā)時(shí)間: {{ .StartsAt.Format "2019-08-04 16:58:15" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

【溫馨提示】這里記得換成自己的郵箱地址?。?!

重啟alertmanager

systemctl restart alertmanager

在web上就可以看到對(duì)應(yīng)的告警信息了。

圖片

接下來(lái)就靜待告警了。


圖片

責(zé)任編輯:武曉燕 來(lái)源: 大數(shù)據(jù)與云原生技術(shù)分享
相關(guān)推薦

2021-08-27 07:06:10

應(yīng)用

2023-09-06 10:33:40

夜鶯監(jiān)控數(shù)據(jù)庫(kù)

2020-12-14 10:26:48

Prometheus 監(jiān)控Services

2019-07-23 10:40:05

云原生云計(jì)算公共云

2021-05-28 08:58:41

Golang網(wǎng)卡metrics

2022-04-11 07:47:45

zabbix郵件告警項(xiàng)目

2021-03-26 20:37:14

Prometheus監(jiān)控指標(biāo)

2024-07-31 08:02:26

Prometheus服務(wù)器代碼

2023-12-04 07:27:54

SpringMVC方法

2016-08-23 13:21:15

MVC路由視圖

2023-12-29 08:01:52

自定義指標(biāo)模板

2015-02-12 15:33:43

微信SDK

2021-02-11 13:56:21

JSweb插件

2021-03-31 08:02:34

Prometheus 監(jiān)控運(yùn)維

2015-02-12 15:38:26

微信SDK

2016-12-26 15:25:59

Android自定義View

2020-06-08 10:05:09

云計(jì)算云平臺(tái)

2016-11-16 21:55:55

源碼分析自定義view androi

2011-06-23 10:49:13

Qt 自定義信號(hào)

2022-12-13 09:01:50

云原生組件數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)