2021-08-06 配置监控邮件告警

1. 部署Alertmanager

安装包下载
地址1:https://prometheus.io/download/
地址2:https://github.com/prometheus/alertmanager/releases
下载部署Linux版Alertmanager

tar zxf alertmanager-0.22.2.linux-amd64.tar.gz
mv alertmanager-0.22.2 /usr/local/alertmanager
vi /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

指定告警规则文件路径

vi /usr/local/prometheus/prometheus.yml
rule_files:
   - "rules/*.yml"

配置告警规则

mkdir /usr/local/prometheus/rules
vi /usr/local/prometheus/rules/general.yml
groups:
- name: general #告警规则组名称
  rules:
  # 任何实例3分钟内无法访问发出告警
  - alert: 主机状态 # 告警规则名称
    expr: up == 0 # 基于PromQL的触发条件
    for: 3m # 等待评估时间
    labels: # 自定义标签
      severity: critical
    annotations: # 指定附加信息
      summary: "{{ $labels.instance }} 停止工作"
      description: "{{ $labels.instance }}:job {{ $labels.job }} 已经停止3分钟以上."

  - alert: CPU使用率
    expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) *100) > 80
    for: 5m
    labels:
      severity: warning
    annotations: 
      summary: "{{ $labels.instance }}CPU使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} CPU使用率大于80%,(当前值: {{ $value }})"
  - alert: CPU使用率
    expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) *100) > 90
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "{{ $labels.instance }}CPU使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} CPU使用率大于90%,(当前值: {{ $value }})"

  - alert: Memery使用率
    expr: (100 - (((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes) * 100)) > 80
    for: 5m
    labels: 
      severity: warning
    annotations:
      summary: "{{ $labels.instance }}内存使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} 内存使用率大于80%,(当前值: {{ $value }})"
  - alert: Memery使用率
    expr: (100 - (((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes) * 100)) > 90
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "{{ $labels.instance }}内存使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} 内存使用率大于90%,(当前值: {{ $value }})"

  - alert: Disk使用率
    expr: (1-(node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"})) * 100 > 80
    for: 5m
    labels: 
      severity: warning
    annotations:
      summary: "{{ $labels.instance }}磁盘使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} 磁盘使用率大于80%,(当前值: {{ $value }})"
  - alert: Disk使用率
    expr: (1-(node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"})) * 100 > 90
    for: 5m
    labels: 
      severity: critical
    annotations:
      summary: "{{ $labels.instance }}磁盘使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} 磁盘使用率大于90%,(当前值: {{ $value }})"

  - alert: Inode使用率
    expr: node_filesystem_files_free{mountpoint ="/"} / node_filesystem_files{mountpoint ="/"} * 100 < 20
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "{{ $labels.instance }}Inode使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} Inode使用率大于80%,(当前剩余: {{ $value }})"
  - alert: Inode使用率
    expr: node_filesystem_files_free{mountpoint ="/"} / node_filesystem_files{mountpoint ="/"} * 100 < 10
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "{{ $labels.instance }}Inode使用率过高"
      description: "{{ $labels.instance }}:job {{ $labels.job }} Inode使用率大于90%,(当前剩余: {{ $value }})"

  - alert: IO性能
    expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}} 流入磁盘IO使用率过高!"
      description: "{{$labels.instance}}:job {{ $labels.job }} 流入磁盘IO大于60%(目前使用:{{$value}})"
  - alert: IO性能
    expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 80
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "{{$labels.instance}} 流入磁盘IO使用率过高!"
      description: "{{$labels.instance}}:job {{ $labels.job }} 流入磁盘IO大于80%(目前使用:{{$value}})"

  - alert: 网络流入
    expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 76800
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}} 流入网络带宽过高!"
      description: "{{$labels.instance}}:job {{ $labels.job }}流入网络带宽持续5分钟高于75M. RX带宽使用率{{$value}}"
  - alert: 网络流入
    expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "{{$labels.instance}} 流入网络带宽过高!"
      description: "{{$labels.instance}}:job {{ $labels.job }}流入网络带宽持续5分钟高于100M. RX带宽使用率{{$value}}"

  - alert: 网络流出
    expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 76800
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}} 流出网络带宽过高!"
      description: "{{$labels.instance}}:job {{ $labels.job }}流出网络带宽持续5分钟高于75M. RX带宽使用率{{$value}}"
  - alert: 网络流出
    expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "{{$labels.instance}} 流出网络带宽过高!"
      description: "{{$labels.instance}}:job {{ $labels.job }}流出网络带宽持续5分钟高于100M. RX带宽使用率{{$value}}"

  - alert: TCP会话
    expr: node_netstat_Tcp_CurrEstab > 800
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}} TCP_ESTABLISHED太高!"
      description: "{{$labels.instance }}:job {{ $labels.job }} TCP_ESTABLISHED大于800%(目前使用:{{$value}}%)"
  - alert: TCP会话
    expr: node_netstat_Tcp_CurrEstab > 1000
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "{{$labels.instance}} TCP_ESTABLISHED太高!"
      description: "{{$labels.instance }}:job {{ $labels.job }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"

配置邮件告警规则

vi alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'willianlacus@163.com'
  smtp_auth_username: 'xxxx@163.com'
  smtp_auth_password: 'xxxxxx'    ---这里使用邮箱授权码,不是密码
  smtp_require_tls: false
route:
  group_by: ['alertname']  # 根据告警规则组名进行分组
  group_wait: 30s  # 分组内第一个告警等待时间,10s内如有第二个告警会合并成一个告警
  group_interval: 10s  # 发送新告警间隔时间
  repeat_interval: 1h  # 重复告警间隔发送时间
  receiver: 'mail'
receivers:
- name: 'mail'
  email_configs:
  - to: 'xxxx@qq.com'
#抑制规则(意思是多个告警,如果alertname和instance相同,只会报critical级别的高级,不报warning级别的告警)
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

检查告警规则

cd /usr/local/prometheus
./promtool check config prometheus.yml
Checking prometheus.yml
  SUCCESS: 1 rule files found

Checking rules/general.yml
  SUCCESS: 17 rules found
---没有额外报错说明没问题

启动alertmanager

systemctl start alertmanager
ststemctl enable alertmanager

2. 告警状态

• Inactive:这里什么都没有发生。
• Pending:已触发阈值,但未满足告警持续时间
• Firing:已触发阈值且满足告警持续时间。警报发送给接受者。

告警状态

浏览器访问alertmanager:
IP:9093

image.png

浏览器访问prometheus查看,可以看到前面配置的告警规则和告警状态

image.png

3. 测试告警

vi /usr/local/prometheus/rules/general.yml    ---把内存warning规则降低到30
(100 - (((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes) * 100)) > 30

ps aux | grep prometheus    ---查看prometheus进程的PID号
kill -HUP prometheus进程PID    ---刷新prometheus的配置

查看Status--Rules,可以看到已经修改了

image.png

查看Alerts,可以看到有几个变成PENDING状态了

image.png

过5分钟收到告警邮件说明成功了

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容