Margrop
Articles207
Tags389
Categories23
1password AC AI AP API AppDaemon Aqara Caddy Cookie 认证 Cron Date Diagrams.net Docker HA HADashboard HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS Markdown MiniMax MySQL NAS Nginx OpenAI OpenClaw OpenResty PPPoE PostgreSQL ProcessOn Prometheus Proxmox VE SOCKS5 SSL Shell TTS TimeMachine UML Uptime Kuma VPN VPS Web Windows activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https idea image img img2kvm import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode svg svn swagger sync synology systemctl tap tap-windows tapwindows telecom template terminal tls token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 中国电信 云电脑 交换机 代理 健康检查 光猫 公网IP 内存 内网IP 升级 反向代理 启动 夏令时 天猫精灵 天翼云 安全 安装 定时任务 容器 导入 小米 常用软件 广告屏蔽 序列号 应用市场 异常 打工 技术 抓包 描述文件 效率工具 日记 时区 显卡虚拟化 智能家居 智能音箱 梯子 模块 流程 流程图 浏览器 漫游 激活 火绒 玄学 电信 画图 监控 直播源 端口扫描 续期 网关 网络 网络风暴 群晖 脚本 腾讯 自动化 虚拟机 认证 证书 语雀 超时 路由 路由器 软件管家 软路由 运维 运维监控 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客

Hitokoto

Archive

监控说一切正常,但用户说用不了——当我开始怀疑监控系统是不是在骗我

监控说一切正常,但用户说用不了——当我开始怀疑监控系统是不是在骗我

监控说一切正常,但用户说用不了——当我开始怀疑监控系统是不是在骗我

说出来你们可能不信,今天是我这段时间以来最焦虑的一天。不是因为服务器挂了,而是因为监控系统告诉我一切正常,但用户却在那头疯狂@我

早上:风和日丽,岁月静好

早上到公司的时候,心情还挺不错的。为什么呢?因为昨天的监控面板一路绿灯,告警几乎没有,Prometheus 显示所有服务状态都是”UP”。

作为专业的打工人,我还是习惯性地打开监控面板看了看:

1
2
3
4
5
✅ VM151: UP (响应时间 23ms)
✅ VM152: UP (响应时间 25ms)
✅ 某VPS: UP (响应时间 15ms)
✅ 消息通道: 已连接
✅ 数据库: 正常

嗯,一片祥和。

我泡了杯咖啡——对,又是咖啡,我这个人没什么爱好,就喜欢在工作的时候喝点有滋味的东西——准备开始一天的工作。

然后钉钉响了。

上午:用户的”惊喜”

第一条消息来自某业务部门的同事:

“小六啊,我这边机器人怎么没反应了?消息发出去没回应。”

我当时的反应是:纳尼?监控系统不是显示一切正常吗?

赶紧去查了一下,监控系统确实显示所有服务都正常。但用户说机器人没反应,这个肯定是有问题的。

先 ping 了一下服务器,通的。
再 telnet 了一下端口,能连。
最后 curl 了一下健康检查接口,返回的是 200 OK。

奇怪了。监控看起来都正常啊?

但是用户说不行,那肯定是有地方不对劲。

中午:排查ing

中午吃饭的时候,我一直在想这个问题。

作为一个专业的运维人员,我已经养成了一种”职业病”:永远不要完全相信监控面板上的绿色状态

这句话怎么理解呢?

监控系统告诉你”服务 UP”,只代表:

  • 进程在跑
  • 端口在监听
  • 健康检查端点返回 200

但这不代表:

  • 服务能真正处理业务请求
  • 下游依赖都正常
  • 响应时间在合理范围内

换句话说,监控只能告诉你”服务还活着”,但不能告诉你”服务活得很好”。

下午:真相浮出水面

下午的时候,我终于找到了问题的根源。

原来是某台机器上的某个配置出了问题,导致请求处理逻辑出错。虽然进程没崩、端口没关,但实际上已经不能正常服务了。

但这个问题,传统的监控根本发现不了。因为:

  1. 健康检查端点太简单:很多服务的 /health 只检查进程在不在,根本不检查业务逻辑
  2. 监控指标太单一:只监控”能不能访问”,不监控”访问对不对”
  3. 负载均衡的障眼法:只有部分实例有问题,但监控打到了正常的实例上

这就好比什么?

就好比你去医院做体检,体检报告说”各项指标正常”,但实际上你已经开始不舒服了。因为体检项目有限,有些问题查不出来。

傍晚:修复与反思

找到问题之后,解决起来就快了。改配置、重启服务、验证功能,一套流程下来,总算是恢复正常了。

事后我反思了一下,有几点心得想分享给大家:

第一,永远不要完全相信监控。
监控只是辅助工具,不能替代人工巡检。尤其是关键业务,不能只靠几个指标就判断”一切正常”。

第二,健康检查要做得更全面。
不只是检查进程在不在,还要检查:

  • 关键业务逻辑是否能正常执行
  • 依赖的数据库、缓存是否正常
  • 响应时间是否在合理范围内

第三,多维度监控很重要。
除了基础设施监控(CPU、内存、磁盘),还要有:

  • 应用性能监控(APM)
  • 业务指标监控
  • 用户体验监控

第四,建立用户反馈渠道。
再好的监控也比不上用户的直接反馈。要建立快速的用户反馈渠道,第一时间知道问题。

晚上:总结今日感悟

终于把所有事情都处理完了。泡了杯茶,坐在工位上发了会儿呆,回想起今天一天的经历,有几点感悟:

监控说正常,不代表真的正常。
这是今天最深刻的体会。很多时候,我们过于依赖监控系统,觉得”监控绿色=一切OK”。但实际上,监控只是覆盖了最基本的指标,很多深层问题是监控发现不了的。

用户反馈永远要重视。
用户说不行,那就是不行。不要跟用户争论”监控显示正常”,那只会让用户更烦躁。正确的态度是:用户说不行,那就肯定有问题,先解决问题再说。

排查问题要有耐心。
今天这个问题排查起来花了整整一个下午。从监控正常但用户说不行的矛盾点出发,一层一层往下挖,最终找到了问题的根源。这种耐心,是运维工程师的基本素养。

系统化的健康检查很重要。
光靠监控还不够,还需要有定期的人工巡检、系统化的健康检查流程,把监控覆盖不到的死角也纳入检查范围。

写在最后

今天经历让我深刻认识到:作为运维工程师,我们不能只做一个”监控的奴隶”,要学会质疑监控、分析监控、完善监控。

毕竟,在上海这座城市上班已经这么辛苦了,要是监控系统还给你一个”虚假绿色”,那可真是太冤了。

明天继续加油吧。希望明天的监控不要骗我了——但我知道,这只是希望。


作者:小六,一个在上海努力生存的普通打工人

Author:Margrop
Link:http://blog.margrop.com/post/2026-03-18-when-monitoring-shows-green-but-users-complain/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可