docker pull prom/alertmanager:latest
以下步骤设置 修改宿主机alertmanager
目录下文件重启后直接同步到docker下/etc/alertmanager/
目录
# 1.启动容器
docker run -itd --name alertmanager prom/alertmanager
# 2.复制容器内部的配置文件到宿主机,不用事先创建$PWD/alertmanager目录
docker cp -a alertmanager:/etc/alertmanager/ $PWD/alertmanager
# 3.删除容器
docker rm -f alertmanager
# 4.启动服务 设置端口9093
docker run -itd --name alertmanager -p 9093:9093 -v $PWD/alertmanager:/etc/alertmanager prom/alertmanager
配置 vi alertmanager/alertmanager.yml
宿主机文件
# 源文件内容
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
# 配置好的文件内容 可直接复制
alertmanager.yml
global: # 全局配置
resolve_timeout: 5m # 处理超时时间,默认为5min
smtp_from: '' # 邮件发送地址
smtp_smarthost: 'smtp.qq.com:465' # 邮箱SMTP 服务地址
smtp_auth_username: '' # 邮件发送地址用户名
smtp_auth_password: '英文' # 邮件发送地址授权码
smtp_require_tls: false
smtp_hello: 'qq.com'
route: # 设置报警的分发策略
group_by: ['alertname']
group_wait: 20s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 5m # 在发送新警报前的等待时间
repeat_interval: 5m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'email'
receivers: # 配置告警消息接受者信息
- name: 'email'
email_configs:
- to: '' # #邮件接收地址
send_resolved: true
inhibit_rules: # 抑制规则配置
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
重启alertmanager
容器
docker restart alertmanager
重启后查看docker下的alertmanager容器中文件是否配置
(1)进入容器当中
docker exec -it alertmanager /bin/sh
(2)查看配置文件信息
cat /etc/alertmanager/alertmanager.yml
还需要配置告警规则…
vi prometheus/node-exporter-record-rule.yml
groups:
- name: server-alarm
rules:
- alert: "内存告警"
expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 高内存 使用率!"
description: "{{$labels.instance}}: 内存使用率在 80% 以上 (当前使用值为:{{ $value }})"
- alert: "CPU告警"
expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) * 100 > 80
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 高CPU 使用率!"
description: "{{$labels.instance}}: CPU使用率在 80% 以上 (当前使用值为:{{ $value }})"
- alert: "磁盘告警"
expr: 100 - (node_filesystem_free_bytes{fstype=~"tmpfs|ext4"} / node_filesystem_size_bytes{fstype=~"tmpfs|ext4"} * 100) > 5
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 高磁盘 使用率!"
description: "{{$labels.instance}}: 磁盘使用率在 80% 以上 (当前使用值为:{{ $value }})"
cat mysql-exporter-record-rule.yml
groups:
- name: mysql-alarm
rules:
- alert: "MySql is down"
expr: mysql_up == 0
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 MySql服务 已停止运行!请重点关注!!!"
description: "{{$labels.instance}}: 当前 MySql服务已停止! (当前状态mysql_up状态为:{{ $value }})"
- alert: "MySql_High_QPS"
expr: rate(mysql_global_status_questions[5m]) > 1500
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 MySql_High_QPS 过高!"
description: "{{$labels.instance}}: 当前 MySql操作超过 1500/秒 (当前值为:{{ $value }})"
- alert: "Mysql_Too_Many_Connections"
expr: rate(mysql_global_status_threads_connected[5m]) > 300
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 MySql 连接过多!"
description: "{{$labels.instance}}: 当前 MySql连接超过 300个/秒 (当前值为:{{ $value }})"
- alert: "mysql_global_status_slow_queries"
expr: rate(mysql_global_status_slow_queries[5m]) > 5
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 MySql 慢查询过多!"
description: "{{$labels.instance}}: 当前 MySql慢查询 超过 5个/秒 (当前值为:{{ $value }})"
- alert: "SQL thread stopped"
expr: mysql_slave_status_slave_sql_running != 1
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 SQL 线程停止!请重点关注!!!"
description: "{{$labels.instance}}: 当前 SQL线程 已停止! (当前值为:{{ $value }})"
- alert: "IO thread stopped"
expr: mysql_slave_status_slave_io_running != 1
for: 1m
labels:
severity: warning
annotations:
summary: "{{$labels.instance}}: 检测到 IO 线程停止!请重点关注!!!"
description: "{{$labels.instance}}: 当前 IO线程 已停止! (当前值为:{{ $value }})"
Prometheus.yml
文件# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets: ['47.96.124.112:9093'] # 告警配置地址
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
- "*rule.yml" # 告警通知文件信息
重启Prometheus
服务
docker restart docker_prometheus
服务器信息模版查询
内存:
(1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 30
CPU:(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) *100 > 20
磁盘:100 - (node_filesystem_free_bytes{fstype=~"tmpfs|ext4"} / node_filesystem_size_bytes{fstype=~"tmpfs|ext4"} * 100) > 5
MySql信息模版查询
MySQL下线:
mysql_up == 0
QPS 过高:rate(mysql_global_status_questions[5m]) > 1500
连接次数过多:rate(mysql_global_status_threads_connected[5m]) > 300
慢查询过多:rate(mysql_global_status_slow_queries[5m]) > 0
线程停止:mysql_slave_status_slave_sql_running != 0
IO停止:mysql_slave_status_slave_io_running != 0
注意: 语句后面的值需要根据自己的需求配置 触发
如果配置完告警信息,报警没有触发需要检查语句
之前磁盘数据不上报是因为 数据匹配不上导致,需要在数据收集页面查看修改,重新匹配
服务器告警参考配置:https://www.kancloud.cn/pshizhsysu/prometheus/1803806
告警规则说明:https://help.aliyun.com/document_detail/196117.html