怎么用普罗米修斯监控MySQL数据库【Prometheus 告警配置与数据库监控】

发布时间:2026/7/2 21:44:16
怎么用普罗米修斯监控MySQL数据库【Prometheus 告警配置与数据库监控】 告警规则一般步骤在 Prometheus Web 编辑好 PromQL 查询配置到 Prometheus并重载生效测试告警http://192.168.88.103:9090/注意确保被监控的机器 node_exporter 是否正常运行nohup node_exporter 配置告警# 为告警规则单独创建配置文件 cat /export/server/prometheus/node.alerts.yml EOF groups: - name: test rules: # 实例 1 分钟无响应 - alert: InstanceDown expr: up 0 for: 1m labels: severity: critical annotations: summary: 实例 {{ $labels.instance }} 宕机 description: {{ $labels.job }} {{ $labels.instance }} 已经 1 分钟没响应了 EOF # 编辑 prometheus 主配置文件 vim /export/software/prometheus/prometheus.yml ... # 告诉 prometheus 加载 node.alerts.yml 这个 rules 文件 rule_files: - /export/server/prometheus/node.alerts.yml ... # 重启 prometheus systemctl restart prometheus systemctl status prometheus 或者 # 重载生效 ps aux|grep prometheus kill -1 pid号测试节点# 测试 101 节点 curl -v http://192.168.88.101:9100/metrics # 测试 102 节点 curl -v http://192.168.88.102:9100/metrics制造故障我们监听了两台服务器把其中一台的node_exporter关掉ps aux|grep node_exporter kill -9 进程号 ps aux|grep node_exporter修复故障nohup node_exporter ps aux|grep node_exporterPrometheus 指向 Alertmanager修改 Prometheus 配置指向 Alertmanager通过 Alertmanager 发送告警vim /export/server/prometheus/prometheus.yml ... # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: - 192.168.88.106:9093 ... systemctl restart prometheus systemctl status prometheus制造故障ps aux|grep node_exporter kill -9 进程号 ps aux|grep node_exporter查看 Alertmanager Web告警已经发送到 Alertmanagerhttp://192.168.88.103:9093/#/alerts修复故障nohup node_exporter ps aux|grep node_exporter静默告警告警属于预期之内比如例行维护业务量波动此时需要暂时让告警不发出来所以需要静默告警。创建静默#一条点一下加号 alertnameInstanceDown envtest instance192.168.88.101:9100 jobnode severitycritical填写 Creator 和 Comment点击 Preview Alerts注意可以制造故障以便观察配置是否生效。观察http://192.168.88.103:9090/和http://192.168.88.103:9093/ 故障在9090端口显示在9093端口不显示就是成功了编辑静默点进去的操作和创建静默是一样的过期静默邮件告警现在告警只到 Alertmanager得人类主动查看才知道怎么通知到人类获取登陆凭证以 163 邮箱为例配置 Alertmanagervim /export/server/alertmanager/alertmanager.yml将文件内容替换为以下完整配置记得替换你自己的 163 邮箱信息global: # 邮件相关全局配置 smtp_smarthost: smtp.163.com:25 smtp_from: 你的163邮箱地址 # 例如jakingvip.163.com smtp_auth_username: 你的163邮箱用户名 # 注意写完整如 jakingvip.163.com smtp_auth_password: 你的163邮箱授权码 # 不是登录密码是163邮箱的SMTP授权码 # 根路由 route: group_by: [alertname, env, job] group_wait: 30s group_interval: 30s repeat_interval: 5m receiver: yunwei # 子路由 routes: - matchers: - service~node receiver: system receivers: # 运维接收者 - name: yunwei email_configs: - to: 接收告警的邮箱 # 例如jakingvip.163.com send_resolved: true # 系统运维接收者 - name: system email_configs: - to: 接收系统告警的邮箱 # 可与上面相同 send_resolved: true或者使用更完善的写法推荐global: # 新增邮件全局配置替换成你的163邮箱信息 smtp_smarthost: smtp.163.com:25 smtp_from: 你的163邮箱地址 # 例如jakingvip.163.com smtp_auth_username: 你的163邮箱用户名 # 注意写完整如 jakingvip.163.com smtp_auth_password: 你的163邮箱授权码 # 163的SMTP授权码 # 保留默认的路由逻辑新增邮件接收者和子路由 route: group_by: [alertname] # 保留默认的分组标签 group_wait: 30s # 保留默认值 group_interval: 5m # 保留默认值 repeat_interval: 1h # 保留默认的重复告警间隔 receiver: email.default # 把默认接收者改为邮件替代原来的web.hook # 子路由可以根据需要保留/调整 routes: # 保留你之前想要的node服务告警路由 - matchers: - job~node receiver: email.system # 可选保留原来的web.hook路由如果还需要webhook通知 - receiver: web.hook # 接收者合并原有webhook 新增邮件接收者 receivers: # 1. 新增默认邮件接收者 - name: email.default email_configs: - to: 你的接收邮箱地址 # 例如jakingvip.163.com send_resolved: true # 发送告警恢复通知 # 2. 新增系统告警邮件接收者 - name: email.system email_configs: - to: 系统告警接收邮箱 # 可和默认邮箱相同也可不同 send_resolved: true # 3. 保留原来的webhook接收者如果不需要可以删掉 - name: web.hook webhook_configs: - url: http://127.0.0.1:9093/ # 保留原来的抑制规则critical告警抑制warning告警很实用 inhibit_rules: - source_matchers: [severitycritical] target_matchers: [severitywarning] equal: [alertname, dev, instance]systemctl restart alertmanager systemctl status alertmanager制造故障ps aux|grep node_exporter kill -9 进程号 ps aux|grep node_exporter看一下收到邮件没有长时间未收到邮件建议更换邮箱如果一直收不到邮件可能是被邮箱平台方禁用了监控MySQLmysqld_exporter 安装在 MySQL 所在机器上操作https://prometheus.io/download/下载安装包curl -LO https://github.com/prometheus/mysqld_exporter/releases/download/v0.18.0/mysqld_exporter-0.18.0.linux-amd64.tar.gz tar xvf mysqld_exporter-0.18.0.linux-amd64.tar.gz mv mysqld_exporter-0.18.0.linux-amd64/mysqld_exporter /usr/local/bin//usr/local/bin是系统专门放 “可执行命令” 的目录配置# 登录 MySQL mysql -uroot -p123456 # 创建数据库用户并授权 CREATE USER mysqld_exporterlocalhost IDENTIFIED BY 123456; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO mysqld_exporterlocalhost; FLUSH PRIVILEGES; EXIT; # 特意创建隐藏配置文件 cat /etc/.my.cnf EOF [client] usermysqld_exporter password123456 EOF启动 mysqld_exporterMySQL所在服务器上操作nohup mysqld_exporter --config.my-cnf /etc/.my.cnf 或者# 后台运行连接本机MySQL账号密码用刚创建的exporter/123456 nohup mysqld_exporter --mysql.usernameexporter --mysql.password123456 --mysql.host127.0.0.1 --mysql.port3306 /export/software/mysqld_exporter.log 21 验证netstat -pantul|grep mysqld_exporthttp://192.168.88.102:9104/配置 Prometheus 采集 mysqld_exporter 的数据修改配置文件 /export/server/prometheus/prometheus.yml# 新增MySQL监控配置 - job_name: mysql # 核心指定mysqld_exporter的地址192.168.88.101:9104 # 注意这里是exporter的地址不是MySQL的3306端口 static_configs: - targets: [192.168.88.102:9104] labels: env: test mysql_server: 192.168.88.102 # 标记被监控的MySQL地址方便识别systemctl restart prometheus systemctl status prometheus验证http://192.168.88.103:9090/targets导入 MySQL dashboard打开 https://grafana.com/grafana/dashboards/ 搜索 MySQLhttps://grafana.com/grafana/dashboards/?searchMySQL复制 dashboard ID 或下载 json转到 grafana点击 Import我上传的补充http://192.168.88.106:9090/mysql_global_status_uptime配置 MySQL 告警规则注意在 Prometheus 所在的机器上操作添加 mysql.alerts.ymlcat /export/server/prometheus/mysql.alerts.yml EOF groups: - name: MySQLdAlerts rules: - alert: MySQLDown expr: mysql_up ! 1 for: 1m labels: severity: critical service: mysql group: dba annotations: description: MySQL {{$labels.job}} 在 {{$labels.instance}} 没有启动 summary: MySQLDown EOF配置 prometheus.yml注意在 Prometheus 所在的机器上操作# 配置 prometheus.yml vim /export/server/prometheus/prometheus.yml ... rule_files: - /export/server/prometheus/node.alerts.yml - /export/server/prometheus/mysql.alerts.yml ... 重启 prometheus systemctl restart prometheus systemctl status prometheus 或者 # 重载生效 kill -1 pid查看http://192.168.88.103:9090/alertsmysql停了看看修改触发告警的时间10s修改.yml把里面这个地方改成10svim /export/server/prometheus/mysql.alerts.yml