Prometheus告警
Alertmanager介绍
实现Prometheus的告警,需Alertmanager这个组件。Alertmanager与Prometheus是相互分离的两个组件。所以,Alertmanager需单独安装配置。通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。
在Prometheus中一条告警规则主要由告警名称和告警规则两部分组成:
告警名称:用户为告警规则命名
告警规则:告警规则由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将静默(silencing)、抑制(inhibition)、分组聚合(aggregation)等消息通过Email、钉钉等发送通知。
Alertmanager特性
分组聚合:分组将同一类型的报警归类单个报警通知。适用于当系统宕机导致大量报警被同时触发,此时分组机制可将这些被触发的告警合并为一个告警通知,避免一次性发送大量告警通知。
静默:提供了一个简单的机制可以快速根据标签对告警进行静默处理。特定时间不会发送告警通知。
抑制:指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。如网络不可达,导致其他服务连接相关警报。
Alertmanager部署
从Prometheus官网获取
[root@prometheus-server ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.30.1/alertmanager-0.30.1.linux-amd64.tar.gz源码包解压
[root@prometheus-server ~]# tar -zxvf alertmanager-0.30.1.linux-amd64.tar.gzalertmanager-0.30.1.linux-amd64/ alertmanager-0.30.1.linux-amd64/alertmanager.yml alertmanager-0.30.1.linux-amd64/NOTICE alertmanager-0.30.1.linux-amd64/alertmanager alertmanager-0.30.1.linux-amd64/LICENSE alertmanager-0.30.1.linux-amd64/amtool[root@prometheus-server ~]# mv alertmanager-0.30.1.linux-amd64 /usr/local/src/alertmanager启动服务
[root@prometheus-server ~]# nohup /usr/local//src/alertmanager/alertmanager --config.file=/usr/local/src/alertmanager/alertmanager.yml &[1]7884[root@prometheus-server ~]# nohup: 忽略输入并把输出追加到"nohup.out"[root@prometheus-server ~]# ps -ef | grep alertmanageroot78841312010:13 pts/0 00:00:00 /usr/local//src/alertmanager/alertmanager--config.file=/usr/local/src/alertmanager/alertmanager.yml root99581312010:15 pts/0 00:00:00grep--color=auto alertmanage使用systemd管理
[root@prometheus-server ~]# kill -9 7884[root@prometheus-server ~]# ps -ef | grep alertmanageroot103371312010:15 pts/0 00:00:00grep--color=auto alertmanage[1]+ 已杀死nohup/usr/local//src/alertmanager/alertmanager--config.file=/usr/local/src/alertmanager/alertmanager.yml[root@prometheus-server ~]# vim /usr/lib/systemd/system/alertmanager.service[Service]ExecStart=/usr/local/src/alertmanager/alertmanager--config.file=/usr/local/src/alertmanager/alertmanager.yml[Install]WantedBy=multi-user.target[Unit]Description=alertmanagerAfter=network.target[root@prometheus-server~]# systemctl daemon-reload[root@prometheus-server~]# systemctl enable alertmanager.service --nowCreated symlink from /etc/systemd/system/multi- user.target.wants/alertmanager.service to /usr/lib/systemd/system/alertmanager.service.[root@prometheus-server~]# systemctl status alertmanager.service● alertmanager.service - alertmanager Loaded: loaded(/usr/lib/systemd/system/alertmanager.service;enabled;vendor preset: disabled)Active: active(running)since 五2026-09-0410:19:58 CST;10s ago Main PID:14076(alertmanager)CGroup: /system.slice/alertmanager.service └─14076 /usr/local/src/alertmanager/alertmanager--config.file=/usr/local/src/........查看端口
[root@prometheus-server~]# ss -anput | grep 9093tcp LISTEN0128[::]:9093[::]:* users:(("alertmanager",pid=14076,fd=7))打开网页:http://10.1.8.10:9093/
集成到Prometheus
在Prometheus-server配置文件prometheus.yml中修改
[root@prometheus-server ~]# vim /usr/local/src/prometheus/prometheus.yml#8-12行...# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: -10.1.8.10:9093#修改为alertmanager的IP及对应端口...#15-16行rule_files: -"rules/*.yml"#修改为规则文件都存放到rules目录下#增加alertmanager监控项... - job_name:"alertmanager"static_configs: - targets:["10.1.8.10:9093"]查看Prometheus的target
邮箱告警及告警规则
注册邮箱,开启授权码
在alertmanager服务器上操作,添加邮箱告警设置
[root@prometheus-server ~]# cd /usr/local/src/alertmanager/[root@prometheus-server alertmanager]# cp -p alertmanager.yml alertmanager.yml.bk[root@prometheus-server alertmanager]# vim alertmanager.ymlglobal:resolve_timeout:5m# ***填自己的邮箱和授权码#465是SSL加密端口,smtp_require_tls要变成false#25是明文端口,smtp_require_tls要变成falsesmtp_smarthost:'smtp.qq.com:465'#腾讯的邮件服务器smtp_from:'***'smtp_auth_username:'***'smtp_auth_password:'***'smtp_require_tls:trueroute:group_by:['alertname']group_wait:10sgroup_interval:5mrepeat_interval:1mreceiver:'mail'receivers:-name:'mail'email_configs:-to:'***'smtp_from要和smtp_auth_username相同
解释如下:
global:#全局设置,配置解决告警时间间隔和邮件发送服务resolve_timeout:5m#定义持续多长时间未接收到告警标记后,就将告警状态标记为resolvedsmtp_smarthost:'***'# 邮件服务器smtp_from:'***'# 邮件上显示的发件人(邮件落款是谁)smtp_auth_username:'***'# 邮箱名smtp_auth_password:'***'#邮箱认证使用授权码smtp_require_tls:true# 是否启动tlsroute:#路由树,每个告警都会在配置的顶级路由中进入路由树,路由树匹配所有报警规则group_by:['alertname']#告警过滤中分组标签group_wait:10s#分组等待的时间group_interval:5m# 上下两组发送告警的间隔时间repeat_interval:1m#重复发送告警时间,默认为1h,现修改为1分钟receiver:'mail'#指定告警媒介类型receivers:#告警接收器,这里配置接收邮箱地址。-name:'mail'#告警来源自定义名称email_configs:-to:'***'#指定接收端email重启alertmanager
[root@prometheus-server alertmanager]# systemctl restart alertmanager在Prometheus-server上操作,设置告警规则
[root@prometheus-server ~]# mkdir /usr/local/src/prometheus/rules[root@prometheus-server ~]# vim /usr/local/src/prometheus/rules/node_alerts.ymlgroups:-name:general.rulesrules:-alert:NodeFilesystemUsage expr:100-(node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"}/ node_filesystem_size_bytes{fstype=~"ext4|xfs"}* 100)>30 for:1m labels:severity:warning annotations:summary:"Instance {{ $labels.instance }} : {{ $labels.mountpoint }} 分区使用率过高"description:"{{ $labels.instance }} : {{ $labels.job }} : {{ $labels.mountpoint }} 这个分区使用百分之>三十(当前值:{{ $value }})"解释如下:
groups:-name:general.rules# 告警规则组名称rules:#定义规则-alert:NodeFilesystemUsage# 告警名称,在Alertmanager及邮箱可见。expr:100-(node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"}/ node_filesystem_size_bytes{fstype=~"ext4|xfs"}* 100)>30#表达式,获取硬盘使用率大于30% 触发告警 for:1m#持续时间,表示持续1分钟获取不到信息,则触发报警,0表示不使用持续时间。labels:#定义当前告警规则级别severity:warning annotations:#注释 告警通知summary:"Instance {{ $labels.instance }} : {{ $labels.mountpoint }} 分区使用率过高"description:"{{ $labels.instance }} : {{ $labels.job }} : {{ $labels.mountpoint }} 这个分区使用百分之>三十(当前值:{{ $value }})"重启服务
[root@prometheus-server ~]# systemctl restart prometheus.service验证邮箱告警
在Prometheus-server服务器上操作
先查看当前/分区占用
[root@prometheus-server ~]# df -hT文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs2.0G02.0G0% /dev tmpfs tmpfs2.0G02.0G0% /dev/shm tmpfs tmpfs2.0G 12M2.0G1% /run tmpfs tmpfs2.0G02.0G0% /sys/fs/cgroup /dev/mapper/centos-root xfs 50G2.2G 48G5% / /dev/mapper/centos-home xfs 146G 33M 146G1% /home /dev/sda1 xfs 1014M 140M 875M14% /boot tmpfs tmpfs 394M0394M0% /run/user/0进行测试,创建大容量文件
[root@prometheus-server ~]# dd if=/dev/zero of=/test bs=10M count=10000Prometheus页面已经出现告警提示
alertmanager中也已经出现邮件告警
在163邮箱中收到了告警邮件