Prometheus告警设置

监控流程

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

sh 复制代码
分组(group): 将类似性质的警报合并为单个通知,比如网络通知、主机通知、服务通知

静默(silences): 是一种简单的特定时间静音的机制,例如:服务器要升级维护可以先设置这个时间段告警静默

抑制(inhibition):当警报发出后,停止重复发送由此警报引发的其他警报即合并一个故障引起的多个警报时间,可以消除冗余警告

服务器配置信息

系统 IP 服务
Ubuntu22.04 192.168.202.221 Prometheus, grafana, blackbox exporter, node exporter ,k8s master
Ubuntu22.04 192.168.202.222 node exporter , k8s worker, alertmanager
Ubuntu22.04 192.168.202.223 node exporter, k8s worker
Ubuntu22.04 192.168.202.224 node exporter , k8s worker

下载并安装aleretmanager

sh 复制代码
# 下载alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz

解压alertmanager

sh 复制代码
tar -xf alertmanager-0.26.0.linux-amd64.tar.gz -C /usr/local/

创建软链接

sh 复制代码
ln -s /usr/local/alertmanager-0.26.0.linux-amd64/ /usr/local/alertmanager

创建一个Service文件

sh 复制代码
tee /etc/systemd/system/alertmanager.service <<EOF
[Unit]
Description=Prometheus Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/usr/local/alertmanager
ExecStart=/usr/local/alertmanager/alertmanager

[Install]
WantedBy=multi-user.target
EOF

重载并启动

sh 复制代码
systemctl daemon-reload 
systemctl start alertmanager
systemctl enable alertmanager

修改alertmanager的配置文件

官方配置文档

本示例使用邮箱告警

yaml 复制代码
global:
  smtp_from:    # 发件人邮箱地址
  smtp_smarthost:   # 邮箱smtp地址
  smtp_auth_username:  # 发件人登录的用户名,默认和发件人地址一致
  smtp_auth_passwd:    # 发件人登录密码,有时候是授权码
  smtp_require_tls:    # 是否需要tls协议,默认是true
  
  resolve_timeout:  # 在指定时间内没有产生新的事件就发送恢复通知

配置示例

yaml 复制代码
global:
  smtp_smarthost: 'smtp.qq.com:465' # 发件人邮箱地址
  smtp_from: '3513784343@qq.com'  # 邮箱smtp地址
  smtp_auth_username: '3513784343@qq.com' # 发件人登录的用户名,默认和发件人地址一致
  smtp_auth_passwordd: 'yjdsdihwqecfdsds'   # 发件人登录密码,有时候是授权码
  smtp_require_tls: false  # 是否需要tls协议,默认是true
  
  resolve_timeout: 5m # 在指定时间内没有产生新的事件就发送恢复通知

route:  # 用来设置报警的分发策略
  group_by: ['alertname'] # 采用哪个标签来作为分组的依据
  group_wait: 30s   # 组警告等待时间,也就是告警产生后等待30s,如果有同组告警一起发出
  group_interval: 2s  # 两组告警的间隔时间
  repeat_interval: 2m  # 重复告警的间隔时间,减少相同邮件的发送频率
  receiver: 'web.hook'  # 设置接收人
receivers:
  - name: 'web.hook'
    # webhook_configs:
    #  - url: 'http://127.0.0.1:5001/'
    email_configs:
      - to: '3513784343@qq.com'
inhibit_rules:  # 抑制的规则
  - source_match:  # 源匹配级别,当匹配成功发出通知,但是其他的通知将被抑制
      severity: 'critical'  
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

重启服务

sh 复制代码
systemctl restart alertmanager

查看服务

alertmanager 监听在9093端口

sh 复制代码
root@node2:/usr/local/alertmanager# ss -tunlp | grep 9093
tcp   LISTEN 0      4096                 *:9093             *:*    users:(("alertmanager",pid=131133,fd=8))      

验证报警匹配规则

sh 复制代码
 ./amtool alert --alertmanager.url=http://192.168.202.222:9093
Alertname  Starts At  Summary  State 

在Prometheus配置文件中添加alertmanager的地址

yaml 复制代码
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 192.168.202.222:9093  # 配置alertmanager地址
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
   - "/usr/local/prometheus/rule.yml"  # 告警规则文件

添加报警规则

在/usr/local/prometheus目录下创建rule.yaml文件,/usr/local/prometheus目录为prometheus解压后的工作目录

yaml 复制代码
#rule.yml
groups:
  - name: pod_rules
    rules:
    - alert: Node  Memery Size
      expr: node_memory_MemFree_bytes > 1
      for: 2m
      labels:
        severity: critical
      annotations:
        description: Pod memory size is less 

检查配置文件

sh 复制代码
root@node1:/usr/local/prometheus# ./promtool check config prometheus.yml 
Checking prometheus.yml
  SUCCESS: 1 rule files found
 SUCCESS: prometheus.yml is valid prometheus config file syntax

Checking rule.yml
  SUCCESS: 1 rules found

重启Prometheus

sh 复制代码
systemctl restart prometheus

查看规则

查看告警

可以看到邮箱里面也收到了告警通知

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发3 天前
软件工程SOLID 五大设计原则
后端·软件工程