我见过的监控系统,多数是运维团队建给运维团队自己用的。真正写出 bug、也得负责修 bug 的开发者,反倒是事后才被想起来。这个顺序是反的。监控是一件产品,用户就是开发者。开发者不用它,覆盖面看起来再完整也没有意义。
做错了代价有多大,不用刻意找就看得见:开发者花几个小时试图复现一个自己根本看不到的问题;生产事故是愤怒的用户先报的,不是告警先响的;一堵没有上下文的告警墙,最后所有告警都被无视;事故发生后,头一大段时间全用来搞清楚"到底出了什么事",而损失早已造成。这不只是交付变慢的问题——没人喜欢蒙着眼调试,士气会被一点点磨掉。
“好监控"到底指什么#
指标、日志、链路这三大支柱只是入场券。指标告诉你出问题了(CPU、内存、请求速率、延迟百分位),日志告诉你发生了什么,链路告诉你问题从哪开始。把一套好系统和一堆工具区分开的,是这三者有没有连起来:从告警到日志再到链路,不用切换思路,也不用来回复制时间戳。
仪表板要为看的人而建,不是为建的人。这意味着:业务指标摆在技术指标旁边,健康状态一眼可见,能从总览下钻到细节,最近的部署和配置变更就显示在同一页上。开发者不该非得成为监控专家,才能回答"我的服务现在还好吗”。
告警是大多数系统翻车的地方。阈值应该来自基线和异常检测,而不是某人 2022 年拍脑袋定的数字;问题应该路由给拥有它的团队;相关告警应该合并,而不是分五十次单独轰炸。而且每条告警都要回答"坏了什么",至少要指一下"从哪开始查"。最后,反馈环必须快——从问题发生到开发者知道,应该以秒计,这需要实时指标、可搜索的流式日志、跨服务边界的链路追踪,以及能把发布和故障对上号的部署标记。
先做不起眼的基本功#
选工具之前,先跟着开发者旁观一次调试。记下他们反复在问的问题、现有流程哪里最痛、哪些指标真正对应产品的成败。然后降低门槛:提供让埋点变得轻而易举的库和 SDK、常见场景的模板、可自助定制的仪表板,以及不光讲"怎么用"、还讲"为什么"的文档。
监控本身也要当成一个会演化的系统来对待:所有配置都走基础设施即代码,告警定义和仪表板进版本控制,监控规则要有自动化测试,多区域、多云的规划要赶在被逼上梁山之前做好。
技术栈的具体样子#
工具名字会换,但现代监控栈的骨架相当稳定:
- 指标:时序数据库——Prometheus、InfluxDB 或 TimescaleDB——加一个 APM 工具,再加从业务逻辑里打出来的自定义指标。
- 日志:集中式聚合平台(ELK Stack、Splunk 或 Loki),让日志可查询的结构化日志规范,以及在成本和效用之间取舍的保留策略。
- 链路:用 OpenTelemetry 做埋点,用 Jaeger、Zipkin 或 Honeycomb 之类做可视化,量上来之后要有采样策略。
- 合成监控:多地域的可用性探测、脚本化的用户旅程测试、API 健康检查。
- 真实用户监控(RUM):前端性能、用户体验指标、来自真实生产流量的错误追踪——毕竟合成探针不会用一台连着酒店 Wi-Fi 的三年前的安卓手机访问你。
AWS 上的小团队:先用 CloudWatch#
对 AWS 上的小团队来说,CloudWatch 是通往"真正有用"的最短路径。EC2、Lambda、RDS、ECS 零配置自动上报,不写埋点代码就有了基础设施可见性;按用量付费,小规模通常每月 10~50 美元,没有固定平台费;指标、日志、链路(走 X-Ray)、告警集中在一处,有意义的告警和仪表板几个小时就能搭好。
把它用透的几个要点:
- CloudWatch Logs Insights 能替代很多人架 Elasticsearch 才能做的事。一条
fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)就能回答"错误是不是在涨"。 - 复合告警压噪音:错误率高"且"响应时间劣化才响,别每个条件单独响。
- 仪表板要混排业务指标和技术指标才值钱。挂到办公室电视上,或者把链接钉在 Slack 里。
- 真正的价值在自定义指标:用 CloudWatch 代理或 SDK 把注册、支付、功能使用量放到基础设施数字旁边。
- CloudWatch Synthetics 按计划跑金丝雀,走一遍关键路径,让你抢在用户之前知道结账坏了。
- X-Ray 用极少的配置就有分布式追踪,和 CloudWatch 的集成能把高层指标一直连到单个请求的链路。
总有毕业的一天:工程师超过大约 50 人、走向多云、需要真正基于机器学习的异常检测,或者仪表板定制和告警逻辑撞上了 UI 的天花板。
企业规模:DataDog#
当你在多个环境里跑着几百个服务,DataDog 就是事实标准,而且这个地位大体上是配得上的。一个视图看全一切——AWS、Azure、GCP、本地机房、容器、Serverless、数据库、第三方服务、前端。Watchdog 用机器学习标记异常、提示可能的根因,这很关键,因为几千个服务不可能靠人盯。另一半价值在协作层:团队专属仪表板、基于角色的访问控制、共享调查笔记本,以及和 PagerDuty、Opsgenie 的集成。告警想做多深都行——布尔逻辑的多条件告警、在阈值被突破之前就预警的预测告警、适应流量模式的异常检测、维护窗口。APM 能一路下到代码级性能分析、和链路关联的安全监控、按服务的成本归因,还有自动生成的服务拓扑图。
在大组织里铺开需要真正的规划。分阶段推进:关键服务先上,用按团队、环境、业务单元的标签策略把指标组织好。标准要趁早定:指标和标签的命名规范、按服务类型的仪表板模板、告警级别和升级路径、分层的 SLO 定义。跟一切打通:CI/CD 的部署标记、事件管理、Slack 或 Teams、ITSM 工单。在赋能上投入:内部文档、每个团队一位负责人、APM 和性能分析的工作坊。账单要有意识地管,企业级一年 2 万到 10 万美元以上:过滤低价值的噪音指标、大流量服务的链路做采样、定期盘点各团队在用哪些功能、打好成本分摊的标签。
做顺了,回报是实在的:靠关联分析加快事故处理,问题在用户察觉之前被抓住,开发者自助排查而不是排队等运维,资源使用的可见性还能帮你把基础设施调到合理规模——有时光这一项就把订阅费赚回来了。
签约前值得比价的替代品:New Relic(能力相近,大流量追踪有时更省)、Dynatrace(AIOps 很强,大型金融机构常见)、Splunk(安全团队已经在用的话,日志分析无出其右)、Grafana Cloud(已经在 Prometheus/Loki 上的话是自然的下一步)。
不少组织用混合方案过得很好:AWS 原生服务自动上报 CloudWatch,应用和 AWS 之外的一切交给 DataDog,再让 DataDog 采集 CloudWatch 的指标,保住一个统一视图。成本和能力平衡,省心。
另一半是文化#
没有配套的习惯,工具注定失败。把埋点当生产代码对待:进代码评审,自定义指标要写测试,监控相关的决策在架构讨论里留下记录。把事故当成对监控的反馈:开不追责的复盘,每次都问一句"当时有什么监控能更早发现这个问题",然后真的去更新仪表板和告警。还要按季度审计:删掉没人用的仪表板和告警,随系统演化调整阈值,验证告警仍然会正常触发,让文档保持诚实。
坑都是可预测的,而且每一个我都亲眼见过:不挑几个能配合的工具,而是把每个闪亮的新工具都装上;图表没有基线没有趋势,没人知道这个数字算好算坏;系统技术上很出色,却因为没人接受过培训而无人使用;指标是出于好奇收集的,而不是因为对用户重要;以及监控自身没有冗余——在最需要眼睛的那一刻瞎掉。
要是从头开始一次监控改造,我的顺序是:先盘点现状的缺口和痛点;围绕用户体验定义 SLO 和 SLI;从最重要的用户旅程开始埋点;加上分布式追踪(微服务世界里排障收益最大的一项);每条告警都挂上运维手册;最后度量效果——MTTR、部署频率,还有开发者是不是真的说日子好过了。
最后一条才是真正的考题。好的 DevOps 工作不只是让系统持续运转,而是让开发团队更快、更从容。开发者会主动打开的监控,就是你做到了的最清楚的证据。
