首页 > 系统相关 >Linux部署Prometheus+Alertmanager并配置邮件告警

Linux部署Prometheus+Alertmanager并配置邮件告警

时间:2023-05-09 20:11:19浏览次数:42  
标签:Alertmanager prometheus Prometheus alertmanager Linux 告警 root localhost

一、Prometheus告警简介

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

Linux部署Prometheus+Alertmanager并配置邮件告警

在Prometheus中一条告警规则主要由以下几部分组成:

告警名称:用户需要为告警规则命名,当然对于命名而言,需要能够直接表达出该告警的主要内容

告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

在Prometheus中,还可以通过Group(告警组)对一组相关的告警进行统一定义。当然这些定义都是通过YAML文件来统一管理的。

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件,Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景。

例如,目前Alertmanager还不支持钉钉,那用户完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。

二、Alertmanager特性

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

Linux部署Prometheus+Alertmanager并配置邮件告警

1、分组

分组机制可以将详细的告警信息合并成一个通知。在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知,而无法对问题进行快速定位。

例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则。假如此时发生了网络故障,可能导致大量的服务实例无法连接到数据库,结果就会有数百个告警被发送到Alertmanager。

而作为用户,可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,而将这些告警内聚在一起成为一个通知。

告警分组,告警时间,以及告警的接受方式可以通过Alertmanager的配置文件进行配置。

2、抑制

抑制是指当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。

例如,当集群不可访问时触发了一次告警,通过配置Alertmanager可以忽略与该集群有关的其它所有告警。这样可以避免接收到大量与实际问题无关的告警通知。

抑制机制同样通过Alertmanager的配置文件进行设置。

3、静默

静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。

静默设置需要在Alertmanager的Werb页面上进行设置。

Prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警。AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。

Prometheus触发一条告警的过程:

prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。

Linux部署Prometheus+Alertmanager并配置邮件告警

三、配置邮件告警

1、安装Node_Exporter

1)下载安装包

[root@localhost dingtalk]# cd ~ && wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf node_exporter-1.5.0.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter

4)配置系统服务

[root@localhost ~]# vim /usr/lib/systemd/system/node_exporter.service

 
  1. [Unit]
  2. Description=node_exporter
  3. Documentation=https://prometheus.io/
  4. After=network.target
  5. [Service]
  6. Type=simple
  7. User=root
  8. ExecStart=/usr/local/node_exporter/node_exporter
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

5)启动Node_Exporter

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl enable node_exporter

[root@localhost ~]# systemctl start node_exporter

2、安装Prometheus

1)下载软件包

[root@localhost ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.37.6/prometheus-2.37.6.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf prometheus-2.37.6.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv prometheus-2.37.6.linux-amd64 /usr/local/prometheus

4)配置Prometheus

[root@localhost ~]# vim /usr/local/prometheus/prometheus.yml

 
  1. global:
  2. alerting:
  3. alertmanagers:
  4. - static_configs:
  5. - targets:
  6. - '192.168.11.199:9093'
  7. rule_files:
  8. - 'rules/node.yml'
  9. scrape_configs:
  10. - job_name: "node-exporter"
  11. static_configs:
  12. - targets:
  13. - "192.168.11.199:9100"

5)配置告警规则

[root@localhost ~]# mkdir /usr/local/prometheus/rules

[root@localhost ~]# vim /usr/local/prometheus/rules/node.yml

 
  1. groups:
  2. - name: Node Resource Monitoring
  3. rules:
  4. - alert: Node实例已宕机
  5. expr: up{instance =~ ".*:9100"} == 0
  6. for: 30s
  7. labels:
  8. user: root
  9. severity: Warning
  10. annotations:
  11. summary: "{{ $labels.instance }} 客户端已停止运行,请尽快处理!"
  12. description: "Node_Exporter客户端已停止运行,当前状态:{{ $value }}"

6)创建启动文件

[root@localhost ~]# vim /usr/lib/systemd/system/prometheus.service

 
  1. [Unit]
  2. Description=prometheus
  3. Documentation=https://prometheus.io/docs/introduction/overview
  4. Wants=network-online.target
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. User=root
  9. ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-lifecycle
  10. ExecReload=/bin/kill -HUP $MAINPID
  11. ExecStop=/bin/kill -s SIGTERM $MAINPID
  12. Restart=on-failure
  13. [Install]
  14. WantedBy=multi-user.target

7)启动Prometheus

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl start prometheus

[root@localhost ~]# systemctl enable prometheus.service

3、安装Alertmanager

1)下载Alertmanager

[root@localhost ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf alertmanager-0.25.0.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv alertmanager-0.25.0.linux-amd64 /usr/local/alertmanager

4)创建启动文件

[root@localhost ~]# vim /usr/lib/systemd/system/alertmanager.service

 
  1. [Unit]
  2. Description=alertmanager
  3. Documentation=https://github.com/prometheus/alertmanager
  4. After=network.target
  5. [Service]
  6. Type=simple
  7. User=root
  8. ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

5)配置alertmanager.yml文件

# Alertmanager安装目录下默认有alertmanager.yml配置文件,可以创建新的配置文件,在启动时指定即可。

[root@localhost ~]# vim /usr/local/alertmanager/alertmanager.yml

 
  1. global:
  2. # 每5分钟检查一次是否恢复
  3. resolve_timeout: 5m
  4. # 邮件SMTP配置
  5. smtp_smarthost: 'smtp.exmail.qq.com:25'
  6. smtp_from: '[email protected]'
  7. smtp_auth_username: '[email protected]'
  8. smtp_auth_password: 'Aa123456'
  9. smtp_require_tls: false
  10. # 自定义通知模板
  11. templates:
  12. - '/usr/local/alertmanager/template/email.tmpl'
  13. # route用来设置报警的分发策略
  14. route:
  15. # 采用哪个标签来作为分组依据
  16. group_by: ['alertname']
  17. # 组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
  18. group_wait: 10s
  19. # 两组告警的间隔时间
  20. group_interval: 10s
  21. # 重复告警的间隔时间,减少相同邮件的发送频率
  22. repeat_interval: 1h
  23. # 设置默认接收人
  24. receiver: 'email'
  25. routes: # 可以指定哪些组接手哪些消息
  26. - receiver: 'email'
  27. continue: true
  28. group_wait: 10s
  29. receivers:
  30. - name: 'email'
  31. email_configs:
  32. - to: '[email protected]'
  33. html: '{{ template "email.to.html" . }}'
  34. headers: { Subject: "Prometheus [Warning] 报警邮件" }
  35. send_resolved: true

smtp_smarthost:是用于发送邮件的邮箱的SMTP服务器地址+端口;

smtp_auth_password:是发送邮箱的授权码而不是登录密码;

smtp_require_tls:不设置的话默认为true,当为true时会有starttls错误,为了简单这里设置为false;

templates:指出邮件的模板路径;

receivers下html指出邮件内容模板名,这里模板名为"email.to.html",在模板路径中的某个文件中定义。

headers:为邮件标题。

6)配置告警模板

[root@localhost ~]# mkdir -p /usr/local/alertmanager/template

[root@localhost ~]# vim /usr/local/alertmanager/template/email.tmpl

 
  1. {{ define "email.to.html" }}
  2. {{- if gt (len .Alerts.Firing) 0 -}}
  3. {{ range .Alerts }}
  4. 告警程序:Prometheus_Alertmanager <br>
  5. 告警状态:{{ .Status }} <br>
  6. 告警级别:{{ .Labels.severity }} <br>
  7. 告警类型:{{ .Labels.alertname }} <br>
  8. 告警主机:{{ .Labels.instance }} <br>
  9. 告警详情:{{ .Annotations.description }} <br>
  10. 触发时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
  11. {{ end }}{{ end -}}
  12. {{- if gt (len .Alerts.Resolved) 0 -}}
  13. {{ range .Alerts }}
  14. 告警程序:Prometheus_Alertmanager <br>
  15. 告警状态:{{ .Status }} <br>
  16. 告警级别:{{ .Labels.severity }} <br>
  17. 告警类型:{{ .Labels.alertname }} <br>
  18. 告警主机:{{ .Labels.instance }} <br>
  19. 告警详情:{{ .Annotations.description }} <br>
  20. 触发时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
  21. 恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
  22. {{ end }}{{ end -}}
  23. {{- end }}

7)启动Alertmanager

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl start alertmanager

[root@localhost ~]# systemctl enable alertmanager

4、验证邮件告警

# 浏览器访问Prometheus管理界面可以看到如下信息:

Linux部署Prometheus+Alertmanager并配置邮件告警

1)模拟停止node_exporter服务,触发邮件告警

[root@localhost ~]# systemctl stop node_exporter

2)再次查看Prometheus界面的Alerts可以看到告警状态。

绿色表示正常。

黄色状态为PENDING表示Alerts还没有发送至Alertmanager,因为rules里面配置了for: 30s。

30秒后状态由PENDING变为FIRING,此时Prometheus才将告警发给alertmanager,在Alertmanager中可以看到有一个alert。

Linux部署Prometheus+Alertmanager并配置邮件告警

3)查看Alertmanager

Linux部署Prometheus+Alertmanager并配置邮件告警

4)查看邮件告警信息

Linux部署Prometheus+Alertmanager并配置邮件告警

5)启动node_exporter

[root@localhost ~]# systemctl start node_exporter

6)查看邮件会收到恢复信息

Linux部署Prometheus+Alertmanager并配置邮件告警

附:

CPU使用率告警规则:

 
  1. groups:
  2. - name: CPU
  3. rules:
  4. - alert: CPU使用率过高
  5. expr: (100 - (avg by (instance) (irate(node_cpu{mode="idle"}[5m])) * 100)) > 80
  6. for: 1m
  7. labels:
  8. severity: Warning
  9. annotations:
  10. summary: "{{ $labels.instance }} CPU使用率过高"
  11. description: "{{ $labels.instance }}: CPU使用率超过80%,当前使用率({{ $value }})."

内存使用率告警规则:

 
  1. groups:
  2. - name: Memory
  3. rules:
  4. - alert: 内存使用率过高
  5. expr: (node_memory_MemTotal - (node_memory_MemFree+node_memory_Buffers+node_memory_Cached )) / node_memory_MemTotal * 100 > 80
  6. for: 1m # 告警持续时间,超过这个时间才会发送给alertmanager
  7. labels:
  8. severity: Warning
  9. annotations:
  10. summary: "{{ $labels.instance }} 内存使用率过高"
  11. description: "{{ $labels.instance }}:内存使用率超过80%,当前使用率({{ $value }})."

标签:Alertmanager,prometheus,Prometheus,alertmanager,Linux,告警,root,localhost
From: https://www.cnblogs.com/xgsh/p/17386125.html

相关文章

  • Linux 处理CPU和内存参数的方式总结
    Linux处理CPU和内存参数的方式总结关闭NUMA,关闭透明大页比较简单的方法:vim/etc/default/grub在GRUB_CMDLINE_LINUX里面添加配置:transparent_hugepage=nevernuma=off修改后的配置为:GRUB_CMDLINE_LINUX="resume=/dev/mapper/uos-swaprd.lvm.lv=uos/rootrd.lvm.......
  • rocky linux: 修改sshd的默认端口(Rocky Linux 9.1)
    一,修改防火墙,允许指定的新端口访问[root@img~]#firewall-cmd--zone=public--add-port=31234/tcp--permanentsuccess[root@img~]#firewall-cmd--reloadsuccess[root@img~]#more/etc/firewalld/zones/public.xml<?xmlversion="1.0"encoding="utf-8"......
  • linux RAID磁盘阵列
    目录一、RAID磁盘阵列二、RAID的分类三、奇偶校验四、配置RAIO6过程            一、RAID磁盘阵列原理:全称为独立冗余磁盘阵列,将多个硬盘组合成一个逻辑驱动器,变为一体的。以RAID整体操作,可以提高磁盘高可用性和性能。作用:RAID无论是哪个,......
  • rocky linux:修改hostname(Rocky Linux 9.1)
    一,修改hostname:1,通过hostnamectl命令修改hostname[root@blog~]#more/etc/hostnameblog[root@blog~]#hostnamectlset-hostnameimg[root@blog~]#more/etc/hostnameimg可以看到原本保存在/etc/hostname中的值在用hostnamectl命令处理后发生了变化所以我们也可以......
  • docker 部署 Prometheus
    1、部署node_exporter数据采集dockerrun-d--name=node-exporter\--restart=always\-p9100:9100\-v"/proc:/host/proc:ro"\-v"/sys:/host/sys:ro"\-v"/:/rootfs:ro"\prom/node-exporter访问:http:/......
  • Linux(centos7.9)搭建ldap服务器
    一.LDAP是什么 后期更新,目前只搭建了服务器 二.linux搭建LDAP服务器以下服务器信息为该文档安装Radius服务环境 服务器信息:CentOS7  内核版本:3.10.0-1160.el7.x86_64 1.使用yum进行安装yum-yinstallopenldapcompat-openldapopenldap-clientsopenldap-serv......
  • linux环境部署--Reids3.2.5
    linux环境部署--Reids3.2.5redis-3.2.5.tar.gz提取码:19991、进入/usr/local/src/目录cd/usr/local/src/2、下载Redis3.2.5wgethttp://download.redis.io/releases/redis-3.2.5.tar.gz3、解压缩并进入文件夹tarxzfredis-3.2.5.tar.gzcdredis-3.2.54、编译Redis,命令......
  • linux|Windows|Xshell——Windows远程连接Linux服务器进行上传、下载文件,用远程登录工
    Windows远程连接Linux服务器进行操作时总会需要上传、下载文件。要实现这个目的,既可以通过FTP的方式,也可以在本地终端使用scp命令。但如果是使用Xshell等工具操作服务器的话,最简单的方法就是其自带支持的sz、rz命令了。这两个命令可以直接上传、下载文件,并自动弹出文件选择框,操作......
  • linux定时备份日志文件脚本,重启jar简易脚本
     1.编写脚本文件saveLogs.sh (备份文件到指定位置重命名,然后情况文件继续写入)  cp/opt/zcgl/zcgl.log/opt/zcgl/logs/zcgl-`date+%Y%m%d`.log&  sleep2  >zcgl.log2. 定时脚本crontab 打开设置:crontab-e 输入内容:5923***sh/opt/zcgl/saveLogs.......
  • linux查看进程的网速情况
    查看网卡信息:ifconfig-a 使用nload -m 可以查看设备当前网络带宽情况。如何查看各个进程的网络带宽呢,可以用到 nethogs工具。 工具安装yuminstallepel-releasesudoyuminstall-ynethogs #执行命令nethogs在这里可以看到进程的网络带宽......