以下是详细的调试步骤、方法和工具指南。
一个典型的监控系统(如 Prometheus + Grafana)可以分为以下几个环节:
1、监控目标(Target):被监控的服务器、应用或服务。
2、数据采集(Collector/Exporter):安装在目标上,用于暴露指标的组件(如 node_exporter, mysqld_exporter)。
3、网络(Network):采集器与监控服务器之间的网络连通性。
4、监控服务器(Monitor Server):负责拉取或接收指标的软件(如 Prometheus, Zabbix Server)。
5、存储(Storage):监控数据的存储(如 Prometheus 的 TSDB, 时序数据库)。
6、告警(Alert):告警规则和告警管理器(如 Prometheus Alertmanager)。
7、可视化(Visualization):数据展示界面(如 Grafana, Zabbix Web)。
当出现问题(“Grafana 上看不到数据”或“收不到告警”),你需要沿着这条链路逐一排查。
场景一:监控目标无数据(Grafana 中看不到数据)
这是最常见的问题。
1、第1步:检查监控目标状态
登录监控服务器,检查监控目标是否已被正确发现(Discovery)和抓取(Scrape)。
以 Prometheus 为例
* 访问 Prometheus 的 Web UI(通常是http://你的prometheusIP:9090
)。
* 点击 “Status” -> “Targets”。
* 查看对应目标的State
是否为UP
,Last Scrape
时间是否最新。
* 如果状态为DOWN
,将鼠标悬停在上面可以看到错误信息(如connection refused
,i/o timeout
)。
2、第2步:检查数据采集器(Exporter)
登录被监控的目标服务器。
检查 Exporter 进程是否运行
systemctl status node_exporter # 检查状态 ps aux | grep node_exporter # 检查进程
检查 Exporter 端口是否监听
netstat -tlnp | grep 9100 # 假设 node_exporter 端口是 9100 # 或者用 ss ss -tlnp | grep 9100
本地测试 Exporter 是否正常输出指标
curl http://localhost:9100/metrics
如果能看到一大堆以# HELP
和# TYPE
开头,后面跟着数字的文本,说明 Exporter 工作正常。
3、第3步:检查网络连通性
* 从监控服务器尝试访问目标服务器的 Exporter 端口。
检查防火墙确保目标服务器防火墙放行了 Exporter 端口(如 9100)。
# 在目标服务器上检查防火墙 sudo ufw status # 对于 UFW sudo firewall-cmd --list-all # 对于 firewalld
测试网络连通性
# 在监控服务器上执行 telnet <目标服务器IP> 9100 # 或者用 nc nc -zv <目标服务器IP> 9100
* 如果不通,问题是网络或防火墙。
* 如果通,继续下一步。
4、第4步:检查监控服务器配置
* 检查 Prometheus 的配置文件prometheus.yml
(或基于文件发现的目标配置)。
* 确认job_name
,static_configs.targets
等配置项是否正确,IP 和端口是否有误。
重新加载配置(如果支持)
# 发送 HUP 信号给 Prometheus 或重启服务 kill -HUP <prometheus_pid> # 或者 systemctl reload prometheus
查看 Prometheus 的日志,获取更多线索
journalctl -u prometheus -f --lines=50 tail -f /var/log/prometheus.log
场景二:有数据,但告警异常(不触发或误报)
1、检查告警规则语法
* 登录 Prometheus Web UI -> “Status” -> “Rules”。
* 查看你的告警规则是否显示为绿色,如果为红色则表示语法错误,需要修正。
2、在 Prometheus 中测试告警表达式
* 访问 Prometheus Web UI -> “Graph”。
将你的告警规则中的表达式(例如up{job="node"} == 0
)粘贴进去执行。
* 查看是否有数据返回,返回的数据是否符合你触发告警的预期。
3、检查 Alertmanager
检查 Alertmanager 配置配置文件alertmanager.yml
是否正确配置了接收器(receiver)、路由(route)以及集成(如 Slack、Email、Webhook)。
检查 Alertmanager 状态访问其 Web UI(通常是http://你的alertmanagerIP:9093
)。
* 查看 “Alerts” 页面,看告警是否已到达 Alertmanager。
* 查看 “Status” 页面,检查配置是否正确加载。
查看 Alertmanager 日志排查发送告警信息时的错误。
journalctl -u alertmanager -f
4、检查静默(Silences)或抑制(Inhibitions)
* 在 Alertmanager Web UI 中检查是否设置了静默,导致告警被临时屏蔽。
1、检查数据源(Data Source)
* 登录 Grafana -> “Configuration” -> “Data Sources”。
* 选择你的数据源(如 Prometheus)。
* 点击 “Save & Test” 按钮,确保返回 “Data source is working” 的成功信息。
2、检查面板查询语句
* 打开有问题的仪表板(Dashboard)和面板(Panel)。
* 进入编辑模式,检查 “Query” 选项卡中的 PromQL 表达式是否正确。
* 使用 “Query inspector” 功能调试该查询,可以看到原始请求和返回的数据。
curl
万能工具,用于检查 HTTP 接口(如 Exporter, Prometheus API)是否正常。
netstat
/ss
检查端口监听情况和网络连接。
telnet
/nc
(netcat)检查网络连通性。
tcpdump
高级工具,用于抓取网络包,深入排查复杂的网络问题。
sudo tcpdump -i any host <目标IP> and port 9100
systemctl
/journalctl
系统和服务日志查看的首选工具。
各组件的 Web UIPrometheus, Alertmanager, Grafana 都提供了非常强大的内置调试界面,一定要善用。
浏览器开发者工具(F12)当 Grafana 前端显示有问题时,查看 Console 和 Network 选项卡是否有错误。
1、标准化:为所有服务器安装相同版本的 Exporter,使用统一的配置管理工具(Ansible, SaltStack)进行部署,减少配置差异。
2、日志是关键:遇到问题,第一反应就应该是journalctl -u <服务名> -f --lines=100
。
3、从源头开始:按照数据流向(Exporter -> 网络 -> Prometheus -> Alertmanager -> Grafana)排查,事半功倍。
4、善用 UI:Prometheus 的 Targets、Graph、Rules 页面和 Alertmanager 的界面包含了绝大部分故障信息。
5、监控你的监控:建立一套对监控系统自身(Prometheus, Alertmanager, Grafana, Exporter 状态)的健康检查告警,确保监控系统本身是健康的。
通过这种结构化的方法,你可以高效地定位和解决绝大多数监控系统的问题。
文章摘自:https://idc.huochengrm.cn/fwq/15335.html
评论
暴惠美
回复监控服务器调试需检查网络连接、配置文件、日志,确保各项参数正确无误。