目錄
1. 告警系統(tǒng)原理概述
2.??配置prometheus規(guī)則
2.1 配置告警規(guī)則目錄
2.2 告警規(guī)則
3. 查看效果
1. 告警系統(tǒng)原理概述
在開始之前,需要了解下prometheus和altermanger之間的關(guān)系是什么?從prometheus的架構(gòu)及生態(tài)系統(tǒng)組件來看
??Prometheus從targets中抓取指標(biāo)(metric)并存儲,通過對指標(biāo)進(jìn)行分析生成告警(alert),并將告警(alert)推送(push)到Alertmanger,Alertmanger對告警進(jìn)行分組、聚合等處理后,通過郵件、Slack、webhook等方式對用戶進(jìn)行發(fā)送告警信息。
總結(jié)整個(gè)告警系統(tǒng)工作流程:
1)制定prometheus告警規(guī)則,當(dāng)監(jiān)控指標(biāo)觸發(fā)告警規(guī)則時(shí),向altermanger發(fā)送告警;
2)altermanger接收prometheus發(fā)送的告警,管理告警信息,通過分組、靜默、抑制、聚合等處理,將告警通過路由發(fā)送到對應(yīng)的接收器上,按不同的規(guī)則發(fā)送給不同的模塊負(fù)責(zé)人,支持郵件、salck及webhook(對接企業(yè)微信/釘釘/飛書)方式發(fā)送告警通知。
2.??配置prometheus規(guī)則
prometheus告警規(guī)則主要依賴于采集指標(biāo)(metric),通過對指標(biāo)進(jìn)行分析設(shè)置閥值來達(dá)到告警的目的
- node監(jiān)控指標(biāo)可參考:node_exporter監(jiān)控項(xiàng)說明https://lnsyyj.github.io/2019/05/27/prometheus-node-exporter-%E7%9B%91%E6%8E%A7%E9%A1%B9/
- ?mysql exporter指標(biāo)可參考:
- GitHub - prometheus/mysqld_exporter: Exporter for MySQL server metricshttps://github.com/prometheus/mysqld_exporter
2.1 配置告警規(guī)則目錄
創(chuàng)建rules目錄,用于統(tǒng)一存放告警規(guī)則
# 在prometheus根目錄下創(chuàng)建rules目錄
mkdir -p /usr/local/prometheus/rules
# 配置prometheus.yml rule_files路徑
# vim /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting: # 增加alertmanager配置
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files: # 配置告警規(guī)則目錄
- rules/*.yml
重啟prometheus生效規(guī)則
# 熱重載
curl -X POST http://127.0.0.1:9090/-/reload
2.2 告警規(guī)則
?告警規(guī)則示例以服務(wù)器資源監(jiān)控指標(biāo)為準(zhǔn),包括主機(jī)CPU/內(nèi)存/硬盤/網(wǎng)絡(luò)/TCP等告警規(guī)則,所有告警規(guī)則以*.yml的后綴存放到/usr/local/prometheus/rules目錄下,目錄可自定義(詳看2.1配置告警規(guī)則目錄)
2.2.1?主機(jī)存活
groups:
- name: 主機(jī)存活告警 # 命名
rules:
- alert: 主機(jī)存活告警 # 命名
expr: up == 0 # 表達(dá)式,分析指標(biāo)判定告警
for: 60s # 觸發(fā)告警持續(xù)時(shí)間
labels: # 自定義告警標(biāo)簽
severity: warning
annotations: # 告警內(nèi)容注釋,根據(jù)需要制定
summary: "{{ $labels.instance }} 宕機(jī)超過1分鐘!"
2.2.2 內(nèi)存利用
groups:
- name: 主機(jī)內(nèi)存使用率告警
rules:
- alert: 主機(jī)內(nèi)存使用率告警
expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
for: 15m
labels:
severity: warning
annotations:
summary: "內(nèi)存利用率大于80%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
2.2..3 cpu利用
groups:
- name: 主機(jī)CPU使用率告警
rules:
- alert: 主機(jī)CPU使用率告警
expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 80
for: 15m
labels:
severity: warning
annotations:
summary: "CPU近15分鐘使用率大于80%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
2.2..4 磁盤利用
# 磁盤利用>80%
groups:
- name: 主機(jī)磁盤使用率告警
rules:
- alert: 主機(jī)磁盤使用率告警
expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80
for: 15m
labels:
severity: warning
annotations:
summary: "磁盤使用率大于80%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
2.2.5 tcp time_wait
groups:
- name: 主機(jī)Tcp TimeWait數(shù)量過多告警
rules:
- alert: 主機(jī)Tcp TimeWait數(shù)量過多告警
expr: node_sockstat_TCP_tw >= 5000
for: 1m
labels:
severity: warning
annotations:
summary: "Tcp TimeWait數(shù)量大于5000, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
2.2.6 iowait
groups:
- name: 主機(jī)iowait較高
rules:
- alert: 主機(jī)iowait較高
expr: (sum(increase(node_cpu_seconds_total{mode='iowait'}[5m]))by(instance)) / (sum(increase(node_cpu_seconds_total[5m]))by(instance)) *100 >= 10
for: 5m
labels:
severity: warning
annotations:
summary: "CPU ioWait近5分鐘占比大于等于10%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
2.2.7 磁盤讀過大
groups:
- name: 主機(jī)磁盤讀過大
rules:
- alert: 主機(jī)磁盤讀過大
expr: sum by (instance) (rate(node_disk_read_bytes_total[2m])) > 50*1024 *1024
for: 5m
labels:
severity: warning
annotations:
summary: "磁盤讀過大, 實(shí)例: {{$labels.instance}},當(dāng)前值: {{ $value | humanize1024 }}。"
2.2.8 磁盤寫過大
# 寫入 > 50MB/s
groups:
- name: 主機(jī)磁盤寫過大
rules:
- alert: 主機(jī)磁盤寫過大
expr: sum by (instance) (rate(node_disk_written_bytes_total[2m])) > 50 * 1024 * 1024
for: 5m
labels:
severity: warning
annotations:
summary: "磁盤寫過大, 實(shí)例: {{$labels.instance}},當(dāng)前值: {{ $value | humanize1024 }}。"
2.2.9?重啟prometheus生效規(guī)則
# 熱重載
curl -X POST http://127.0.0.1:9090/-/reload
3. 查看效果
查看:http://127.0.0.1:9090/alerts?search=
Prometheus Alert 告警狀態(tài)有三種狀態(tài):Inactive、Pending、Firing。
- Inactive:非活動狀態(tài),表示正在監(jiān)控,但是還未有任何警報(bào)觸發(fā)。
- Pending:表示這個(gè)警報(bào)必須被觸發(fā)。由于警報(bào)可以被分組、壓抑/抑制或靜默/靜音,所以等待驗(yàn)證,一旦所有的驗(yàn)證都通過,則將轉(zhuǎn)到 Firing 狀態(tài)。
- Firing:將警報(bào)發(fā)送到 AlertManager,它將按照配置將警報(bào)的發(fā)送給所有接收者。一旦警報(bào)解除,則將狀態(tài)轉(zhuǎn)到 Inactive,如此循環(huán)。
?至此,prometheus告警系統(tǒng)告警規(guī)則部分就完成了,其它告警規(guī)則根據(jù)需要自行添加,這里就不做分享了文章來源:http://www.zghlxwxcb.cn/news/detail-641461.html
覺得好用就點(diǎn)個(gè)收藏 吧~文章來源地址http://www.zghlxwxcb.cn/news/detail-641461.html
到了這里,關(guān)于玩轉(zhuǎn)prometheus告警 alertmanger(一)之prometheus告警規(guī)則的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!