ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

十年监控进化史:从Nagios到Prometheus的可观测性实践

十年监控进化史:从Nagios到Prometheus的可观测性实践 2015年我接手的第一套“监控系统”是一台落灰的旧服务器上跑的 Nagios改一次配置要 reload 半天告警邮件经常被同事当成垃圾邮件。十年过去我电脑上开着的一张 Grafana 大屏同时展示着机房温控、业务容器、PLC 冷库和视频 AI 识别结果。这中间的跨度几乎就是监控这个行业从“会喘气就算活着”到“可观测性”的完整进化史。这篇文章不打算写成工具手册。我想以这十年在一线做运维、做监控建设的实际经历为线索聊聊监控需求是怎么变多的、工具是怎么换代的、指标设计是怎么进化的以及我在 Zabbix、Prometheus、Grafana 和各种场景化监控方案里踩过的坑。不管你是刚入行的运维新人还是正在给团队搭建监控中心的负责人应该都能从里面找到能直接拿去用的东西。1. 早期监控脚本、cron 和 Nagios 的野蛮生长1.1 最初的监控长什么样2014、2015 年的时候大部分公司的监控其实不是“一套系统”而是一堆散落的脚本。我做第一份运维工作时服务器上挂着十几个 cron 任务每五分钟跑一次 shell 脚本检查磁盘空间、检查进程在不在、ping 一下核心交换机。发现问题就调 sendmail 发一封邮件出来邮件标题清一色是[WARNING] disk / 80%这种格式。说实话这套东西能用但很原始。脚本是每个人按自己的习惯写的有人用df -h抓字符串有人用ps -ef | grep数进程数各写各的互不兼容。后来服务器多了脚本跟着膨胀每个新同事入职先研究上一任的脚本逻辑研究不明白就自己再写一套。监控脚本本身反而成了最不稳定的服务——脚本自己挂了没有人知道。那个年代谈监控核心诉求其实只有三个机器别宕机、磁盘别写满、关键进程别死。至于应用响应慢、接口报错率飙高、业务指标下滑统统不在监控范围内因为当时压根没有收集业务指标的意识。现在回头看那时候的监控不是不够多而是维度太单一——只回答了“服务在不在”没回答“服务好不好”。1.2 Nagios 的痛点配置是魔鬼后来团队引进了 Nagios算是从脚本走向正规军的第一步。Nagios 的逻辑其实很清晰定义主机、定义服务、定义告警然后定期执行检查插件。它能做端口探测、进程检查、磁盘阈值告警理论上什么都能监控只要你写得出插件。但真正用起来Nagios 的维护成本高得吓人。它的配置文件是文本式的定义一台主机要写define host块定义一个服务要写define service块再用模板去继承公共属性。服务器数量到一两百台的时候配置文件就开始失控了——有人改了模板导致一批主机的告警阈值集体变化有人忘记加contact_group告警发了但没人收到。我当时最怕的事情就是凌晨三点的告警邮件没有出现在群里因为那通常意味着配置里有某个隐蔽的继承关系出了问题。还有一个我印象很深的坑Nagios 默认的告警恢复通知逻辑。它会在服务恢复时再发一封RECOVERY邮件这本是好事但如果你没把通知策略配好频繁抖动的主机能把告警邮件刷成几十封。有一次一台服务器的网卡不稳定Nagios 一个晚上发了 60 多封邮件运维群直接被刷屏真正的故障反而被淹没了。从那时候起我就明白了一个道理告警链路本身需要被监控告警风暴比故障更可怕。1.3 Cacti 和 MRTG流量图时代的启示Nagios 管告警Cacti 管画图。那个年代还有另一类监控工具核心能力是采集数据并画趋势图代表作是 MRTG 和 Cacti。它们靠 SNMP 从网络设备、服务器上抓流量和 CPU 数据画成按天、按周、按月汇总的曲线图。现在看 Cacti 的图觉得简陋但在当时这些曲线图是排查性能问题最重要的依据。有一次用户的系统慢到没法用实时看各项指标都是正常的我翻了 Cacti 的周图发现带宽在每天凌晨两点准时打满持续半小时后又降下去。顺着时间点一查是备份任务在抢占业务带宽。如果没有历史趋势数据这种偶发问题根本无从下手。Cacti 给我最大的启发是“监控数据要能回溯”。实时告警解决的是“现在出事了”趋势数据解决的是“事情是怎么一步步变糟的”。后面的 Prometheus、Grafana 把这种思想发扬光大了但骨子里的东西和当年 Cacti 画流量图是同源的。2. 指标设计的进化从“活着”到“活得好不好”2.1 ping 通不等于能用监控做了两三年以后我开始意识到一个很尴尬的问题所有指标都是绿的但业务就是不行。Web 服务端口一直在监听TCP 连接也能建上可打开页面要等十几秒数据库进程活着CPU 和内存看起来正常但慢查询把连接池占满了。这是第一代监控的经典盲区——只监控了可用性没监控性能和质量。我们在检查一个系统时天然应该分层主机层看 CPU、内存、磁盘、网络中间件层看连接数、队列长度、线程状态应用层看接口响应时间、错误码分布、业务成功率。每一层都有各自的指标不能拿主机指标去推断应用体验。后来我用 Zabbix 重建监控体系时给每台 Web 服务器加了三个自定义脚本一个模拟 HTTP 请求测首页响应时间一个检查 PHP-FPM 的进程数和队列长度一个统计错误日志在五分钟内的新增行数。这是很土的做法但效果立竿见影——第一次真正在用户投诉之前提前看到了应用层的恶化趋势。2.2 微服务时代监控需求像开闸一样涌出来2017 年前后微服务开始普及。一个单体应用拆成了十几个、几十个服务每个服务又有多个实例端口数从个位数涨到几十上百。这时候监控的需求彻底变了我梳理过当时的监控需求清单大概分几类基础设施监控服务器 CPU、内存、磁盘、网络这是基本盘。应用进程监控前台进程是否存活、端口是否在监听、进程数是否异常。中间件监控MySQL、Redis、Kafka、Nginx 的连接数和积压情况。接口质量监控每个服务接口的 QPS、平均响应时间、错误率。调用链追踪一个请求跨了哪些服务瓶颈出在哪一环。在这个阶段监控不再只是运维自己的事。开发团队也要看自己的服务指标业务方要看核心交易的转化指标监控的受众从一个小组变成了整个技术组织。一个能统一承接这些需求的“监控中心”开始成为团队的公共基础设施。2.3 Spring Boot Actuator 带来的应用监控爆发服务端框架里Spring Boot 对监控的推动是绕不开的。它内置的 Actuator 模块让 Java 应用天生就暴露了一批监控端点/actuator/health返回健康状态/actuator/metrics返回 JVM 内存、线程、GC 等指标/actuator/prometheus能以 Prometheus 格式导出指标。我印象很深的是第一次给一个 Spring Boot 项目配置监控。以前要监控一个 Java 应用得装 JMX 插件、配 Agent、写采集脚本麻烦得劝退。Actuator 直接把监控端点做成应用的一部分配置几行依赖就能导出指标。这种“应用自带监控探针”的思路后来成了行业共识——监控不该是运维强加给应用的而应该是应用内生的能力。当然 Actuator 也不是配好就完事。有段时间我们把所有端点的信息都暴露到了公网结果被扫描器盯上天天有人来探测/actuator/env和/actuator/heapdump。教训是监控端点的安全防护和监控本身同等重要内网访问、鉴权、防火墙限制一个都不能少。后来我统一在网关层做了一层拦截只放行内部 IP 段这类攻击才消停下来。2.4 黄金信号我知道该盯哪些指标了接触 Prometheus 之后我才系统性地理解了指标选型的问题。Google 的 SRE 书里讲过一个“四类黄金信号”理论延迟、流量、错误、饱和度。这四类信号基本覆盖了一个在线服务的所有核心健康维度。翻译成大白话延迟是用户请求要等多久流量是系统当前承受的请求量错误是请求失败的比例饱和度是系统离“跑不动”还有多远。比如一个 Nginx 服务延迟对应 upstream 响应时间和请求处理时间流量对应每秒请求数错误对应 5xx 状态码比例饱和度对应并发连接数和 worker 进程的使用率。这个框架对我最有价值的地方是它逼着我去想“每个指标到底在回答什么问题”。以前我恨不得把能采集的指标全采了看板上一堆曲线真出问题时不知道该看哪个。按黄金信号筛选之后每个服务的核心指标控制在 10 个以内反而比 100 个指标的排查效率高得多。监控设计上有一条残酷的规律信息过载等于没有信息。3. 工具链的代际更替Zabbix、Prometheus 与 Grafana3.1 Zabbix 的黄金年代为什么它能统治服务器监控2016 年到 2019 年那段时间我给不止一个公司搭过 Zabbix。它之所以能在那几年成为事实标准我总结下来有三条部署简单、采集方式全、告警策略成熟。Zabbix 的部署确实省心服务端装在 CentOS 上编译或者用包管理装都行Agent 在各个平台都有现成版本装完填上服务端地址就能开始上报。它支持 SNMP、Agent、IPMI、JMX、自定义脚本多种采集方式意味着网络设备、物理服务器、虚拟机、Java 应用可以统统纳管到一套系统里这个能力在混合架构时代特别吃香。再用 Zabbix 监控 Linux NAS 存储举例子。文件存储的监控重点在容量增长趋势、IO 延迟、读写吞吐这几项。Zabbix 里自带的vfs.fs.size键值可以拿到文件系统总大小和已用空间通过配置触发器在磁盘使用率超过 85% 时自动升级告警等级。我通常还会配一个针对 inode 使用率的监控因为很多 Linux 文件系统磁盘没满但 inode 耗尽照样写不进文件这种故障用默认监控根本发现不了。Zabbix 的告警机制也是它的一大优势。告警升级、依赖关系、维护期静默这些功能在它的界面里都是原生支持。尤其维护期这个功能我每次做变更窗口前必配不然半夜的上线操作能触发一串假告警把值班同事吓得够呛。3.2 Zabbix 在实际监控中的几个关键配置聊几个 Zabbix 使用的实际细节。监控 Nginx 是我经常被问到的场景Zabbix 本身不自带 Nginx 采集模板需要打开 Nginx 的stub_status模块然后用nginx.status自定义脚本去抓 active connections、accepts、handled、requests 这几个计数器的值。抓来之后真正有用的指标要自己做除法计算——每秒请求数要用两次采样的请求数差值除以间隔而不是直接看累计值。这个“计数器差值速度”的概念是很多人用 Zabbix 时第一个绕不过去的弯。监控前台进程也有讲究。用proc.num键值可以按进程名统计数量配合触发器在进程数低于阈值时告警。但要注意的是用proc.num[,,,match]做精确匹配时正则写错了会匹配到一堆无关进程比如监控java会把所有 Java 子进程都算进去。后来我改用基于 systemd 服务的systemd.unit_info或者在进程启动脚本里主动写 pid 文件准确性比模糊匹配进程名高得多。Zabbix 的数据库存储也值得一提。它默认把监控数据存在 MySQL 里历史表和趋势表分开。历史数据保留短周期趋势表按小时做聚合长期保留。这个设计在数据量小的时候没问题但指标一多MySQL 的写入压力会明显变大。我给一个规模稍大的环境做过一次调优核心是把历史数据的保留时间从 90 天砍到 30 天并关掉一部分低价值指标的采集数据库负载直接降了一半。监控数据的价值密度有高有低无差别的全量保留成本上划不来。3.3 Prometheus 的崛起拉取模型与标签体系2018 年我第一次认真用 Prometheus第一感受是它的数据模型比 Zabbix 干净太多。Zabbix 的监控项是“一个主机一个指标”而 Prometheus 的每个指标都带着一组标签比如http_requests_total{methodPOST, endpoint/api/order}。同样是请求量Zabbix 要为每个接口建一个监控项Prometheus 用一种标签天然解决了多维度的问题。Prometheus 的采集方式是“拉取”而非“上报”。服务端主动去各个目标抓指标目标只要暴露一个 HTTP 端点就行。这个模型的好处是新加一台机器或一个服务只要告诉 Prometheus 它的地址就能纳入监控不像 Zabbix 那样要在服务端手动加主机再装 Agent。配合 Kubernetes 的自动发现机制容器实例扩缩容之后Prometheus 能自动找到新实例开始采集。这是它能在云原生时代胜出的根本原因。当然 Prometheus 也有自己的短板。它的本地存储是单机时序数据库数据量超过一定规模就要考虑分片或者使用 Thanos 等方案做长期存储。告警能力方面Prometheus 的 Alertmanager 配置起来比 Zabbix 复杂一些路由规则、分组策略、抑制规则的概念新手上手有一定门槛。我见过不少团队把 Prometheus 装好了指标也采了一堆但告警完全没配等于半夜家里装了摄像头但没连报警器。3.4 Grafana把指标变成人看得懂的东西如果说 Prometheus 解决了数据收集和存储那 Grafana 解决了最后一公里的可视化问题。我在没有 Grafana 之前看 Zabbix 自带的图表总觉得差点意思。Grafana 出现之后监控看板的审美和交互直接被拉高了一个档次。Grafana 看板配置有几个基本盘。首先是数据源Prometheus 数据源填上地址、配置好访问权限就能用其次是 Panel 类型的选择时序趋势用 Time series实时数值用 Stat占比分布可以用 Bar gauge 或者 Pie chart关键是要根据数据形态选对展示方式而不是所有指标都画一张时间序列图。我见过一个看板16 个 Panel 全是折线图一眼扫过去什么都看不出来。好的看板应该是先看到异常、再看到趋势、最后能下钻到细节信息层级是分明的。我自己的看板习惯是第一页放大盘只放核心服务的四个黄金信号指标红绿灯式的颜色告警第二页是基础设施概览CPU、内存、磁盘、网络做成一排热力图再往下才是各服务的明细看板按需下钻。这样无论是领导巡检还是工程师排查都能在 10 秒内定位到方向。3.5 轻量趋势与链路闭环监控工具越复杂的工具越难维护这个规律逼着轻量级方案持续出现。像 Beszel、Uptime Kuma、Healthchecks 这类工具主打“一个二进制文件、几分钟部署、界面简洁”专门解决中小团队和个人项目的监控需求。以 Beszel 为例经常有人问它的监控指标准确吗。我的实测结论是作为主机级监控完全够用CPU、内存、磁盘、网络这些基础指标和官方工具对比误差在可接受范围内但如果你需要的是应用内部指标比如某个接口的 P95 延迟那它就不合适了因为它的定位本来就是轻量指标而非应用可观测性。选择工具关键是先想清楚要回答哪种问题。这类轻量工具的另一个价值是让“监控”变成一种随手可得的习惯。家庭 NAS 上用绿联或者威联通的监控中心看磁盘健康度VPS 上用 Beszel 看流量和负载小型工作室用 Uptime Kuma 盯几个官网页面的可用性——这些十年前可能要折腾一整天的需求现在一个下午就能落地。监控不再是重资产而是每个人都能拥有的能力。4. 场景化监控的爆发从机房到冷库再到视频流4.1 冷库场景基于 PLC 的温湿度监控系统监控的进化不止发生在 IT 系统里工业场景同样在变。我参与过一个冷库温湿度监控的项目需求很明确多间冷库必须 24 小时保持设定温度一旦超出范围要立刻通知值班人员否则整库的货可能报废。方案里最核心的设备是 PLC可编程逻辑控制器它负责采集每个库房的温度传感器数据并通过 Modbus 协议向上位机传输。上位机软件读到的数据再通过特定的接口同步给监控系统。这个链路里的难点在于温湿度数据是秒级变化的连续值但监控系统的告警要按分钟级去判断既要防漏报又要防误报。我们当时的做法是在监控端写了一套过滤逻辑温度超过上限后不是立即告警而是判定“连续 3 个采样点约 1 分钟都超限”才触发告警。这个设计很有价值——开冷库门搬货时温度必然短暂升高立即告警会把人折腾死持续超限才告警才能过滤掉正常的开门扰动。后来我把它概括成一个原则误报的代价是信任流失漏报的代价是事故两者之间要用合理的判定窗口去平衡。工业监控和 IT 监控还有一个显著区别就是数据源的协议五花八门。Modbus、OPC UA、MQTT、串口协议每种都要专门对接。纯做自研的话工作量集中在协议解析层。现在很多方案的思路是这个平台做好协议适配底层的 PLC 监控小工具负责数据采集上层再对接统一的告警和看板。我在这个项目里学到的经验是协议解析一定要做日志留痕不然 PLC 上报的数据突然断了你连是传感器坏了还是协议转换出了问题都查不出来。4.2 嵌入式环境监控资源受限下的取舍嵌入式环境监控是另一类让人头疼的场景。我曾给一组室外环境监测设备做过监控方案设备本身是一块性能很弱的 ARM 板子内存只有几十 MB没法装完整的 Zabbix Agent更跑不动 Prometheus 的 node_exporter。这种资源受限的嵌入式设备监控方案必须做减法。我们最后只上报三类数据设备在线状态通过心跳包、核心温度、剩余内存。采集方式是用设备上已有的 MQTT 客户端定期上报监控端只要有一个 MQTT Broker 接收数据再转存到时序数据库就完事。整个过程没有在设备上装任何监控组件纯粹就是“上报”而非“被采集”。这个案例让我明白了一个思路上的转变监控方案要适配场景而不是场景去迁就工具。嵌入式设备、PLC、传统 NAS 这些“非典型服务器”各有各的限制选择监控手段的第一原则是尽量少占用被监控对象的资源。心跳上报这种最朴素的机制在很多场景里反而比花哨的指标采集更可靠。4.3 视频监控与 AI 识别RTSP 拉流 YOLO 的融合近几年场景化监控的热度很大一部分来自 AI。监控视频拉流做目标识别就是一个非常典型的融合场景视频流通过 RTSP 协议从摄像头拉出来经过 YOLO 等算法模型做检测识别到特定目标后触发告警或记录。这个方案的技术链路不复杂但每一条都有细节。RTSP 拉流本身要注意协议兼容和延迟不同厂商的摄像头协议实现不一致有的需要带鉴权参数。拉到的视频帧要先转码再送进模型否则解码格式不匹配会白忙活。YOLO 模型的选择要看检测目标和算力CPU 上跑 YOLOv5s 勉强能到实时换成 YOLOv8 就需要 GPU 加速。实际项目中比算法更难的是业务规则的建模。同一路摄像头白天和晚上的光线差异会影响识别置信度检测目标在画面边缘被截断模型会反复出现漏检和误检。我当时处理“频繁误报”的办法是加两级过滤第一级是模型置信度阈值调高到 0.6第二级是业务侧的状态机同一个目标连续 5 帧都被检测到才触发事件单帧闪烁直接忽略。这套双重过滤让误报率降了八成。AI 监控的难点不在于跑通模型而在于把模型输出变成稳定可靠的事件流。除了视频音频和振动数据也能进监控链路工厂设备的状态监测、机房的环境噪音异常识别原理大同小异。可以这么说监控的数据维度已经从“服务器指标”扩展到了“物理世界信号”这也是为什么我觉得监控这十年演进的本质是数据来源的极大扩展。4.4 业务侧监控关键词、新作品与商品变动监控绝不是运维的专利业务侧的需求同样旺盛。我最近接触到的需求比较典型的有两类一类是“抖音新作品监控助手”另一类是“闲鱼关键词监控”。前者用于监控指定账号是否发布了新内容后者用于盯平台上某一款商品的上下架或价格变动。这类业务监控的原理本质上是“定时抓取 变更检测”。写一个定时任务去请求目标页面的公开数据和上一轮结果做对比有变化就推送通知。技术上不难但有几个坑必须提醒一是频率控制抓太频繁会被平台限流或封 IP必须设置合理的间隔和随机延迟二是数据结构会变平台的页面改版会让解析代码瞬间失效监控脚本必须做健壮性设计解析失败时宁可报警也不要不吭声三是合规问题所有抓取都限制在公开数据和个人合理使用的范围内不碰用户隐私数据和未授权接口。我在帮人做这类小工具时经常会强调一点业务监控最有价值的不是技术实现而是“变化信号”的提炼。你盯的账号发了一条新视频系统只告诉你“有新内容”这还不够如果能把新内容的标题、发布时间、热度趋势一起拿出来这个信息才真正具有决策价值。监控的终点不是通知而是让人快速做出判断。4.5 文件、网络与安全监控日志溯源里最后的防线业务监控之外文件级和网络级的监控也是一直在演进的领域。FTP 服务器上的文件有没有被恶意上传或篡改网站目录里有没有新增可疑文件这些都需要靠文件监控来兜底。做法通常是定期扫描关键目录的文件清单计算哈希做基线比对一旦出现新增或变化立即告警。Git 钩子、云存储的事件通知也能实现类似效果但自建系统时“哈希基线 定时比对”依然是最朴素有效的手段。网络层监控同样重要。面对恶意的域名劫持或黑产攻击完整的处置链路大致是先在网络层通过防火墙或策略阻断可疑的通信源再在 DNS 层过滤恶意域名解析然后回溯日志确认攻击入口和影响范围最后做主机加固、配置 WAF 和 IDS 规则并把这套方案固化为长期监控的一部分。这套流程里监控扮演的角色不只是“发现者”更是“验证者”——规则配完之后要通过持续监控确认攻击流量确实降下来了而不是配完就忘了。安全监控和性能监控有一个本质区别性能监控看的是趋势安全监控看的是异常而且异常往往是低频的、隐蔽的。所以安全类的告警阈值通常要更敏感宁可多报也要先看一眼。代价是安全监控的告警噪音很大需要配合完善的日志检索能力才能在海量告警里快速筛出真正有价值的事件。我的经验是安全监控必须和日志系统联动告警只是入口日志溯源才是闭环。5. 监控中心与告警治理从“有好几套系统”到“一个入口”5.1 监控看板应该如何配置讲了这么多工具和场景落回到实践层面一个团队真正需要的是“监控中心”——一个能让所有人从一个入口看到全貌的地方。Grafana 作为监控中心的可视化底座几乎是不二选择关键是看板怎么配才顺手。以 Grafana Prometheus 为例最基本的配置流程是先接入数据源然后为每个服务或系统建单独的 Dashboard再把 Dashboard 按文件夹归类最后设置首页为最重要的大盘。看板命名的规则也很重要我习惯用“环境-系统-用途”的格式比如prod-gateway-overview不然系统一多看板列表就乱了。配置 Panel 时PromQL 的写法是核心。CPU 使用率通常用100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)内存使用率看node_memory_MemTotal_bytes和node_memory_MemAvailable_bytes的差值磁盘空间用(node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes。这些查询语句建议整理成团队的公共模板避免每个人写出风格迥异的版本后来维护时看不懂。看板还有一个容易被忽略的环节时间范围选择。默认 Last 6 hours 适合排查刚发生的问题但做容量规划时要看 Last 30 days还要结合 Prometheus 的长期数据。我建议每个看板都加上时间范围快捷按钮并针对关键指标单独做“同比”“环比”的对比图不然历史趋势很容易被遗忘。5.2 告警配置阈值、分级、通知与抑制监控中心不能只有看板告警才是闭环。我总结的告警设计四步法定指标、设阈值、分级别、选通知。先说阈值。阈值的设定不能拍脑袋一开始用固定值比如磁盘 80% 告警、90% 严重告警运行一段时间后根据历史数据调整。更好的做法是用动态基线Prometheus 里有predict_linear这类函数可以预测磁盘还有多久写满比单纯看百分比更有前瞻性。告警阈值要留在“能给你留出处理时间”的位置磁盘 80% 告警看起来保守但结合增长率预测往往比 95% 才告警更有价值。再说分级。我见过太多团队把一切告警都设成同一个级别结果全是一堆噪音。合理的分级应该是P0 是核心服务不可用要求立即响应P1 是服务降级或者容量即将耗尽要求尽快处理P2 是趋势性变化工作时间处理即可。分级的目的不是贴标签而是决定怎么打扰人——夜里 PM0 打值班电话P2 发邮件就够。通知渠道的选择也要用心。十年前是邮件后来加了短信、电话再后来是企业微信、钉钉、飞书机器人。这三个原则请记住通道要可靠至少两路内容要精简看一眼就知道是谁、什么故障动作要规范值班人确认后告警状态要能更新。告警的最终目的是让人行动任何让接收者困惑的通知都是失败的。5.3 监控数据的存储与成本控制监控数据是典型的时序数据增长快、价值随时间递减。Zabbix 时代用 MySQL 存历史数据量一大就吃力Prometheus 的本地 TSDB 解决了写入性能问题但本地盘空间和高可用方案又成了新课题。一个指标从采到存大致要经过采集频率、样本大小、保留策略三层调控。比如每秒请求量这个指标5 秒采一次和 60 秒采一次数据量差了 12 倍。不是所有指标都需要高频率低频变化的指标磁盘容量、温度完全可以 1 分钟采一次。Grafana 里的大盘查询也尽可能使用降低采样率的函数把趋势图的分辨率降下来查询速度会快很多。成本控制还有一个经典手段把“精确数据”和“趋势数据”分开存。原始的高频数据只保留几天或几周用于问题排查聚合后的每小时、每天数据保留一年以上用于容量规划和趋势分析。十年玩下来我几乎在每个体系里都见过“高保真数据存太久了、磁盘爆了”的事故。监控数据的生命周期管理从一开始就要规划好而不是等爆仓了再救火。6. 十年踩坑实录与几条实在建议6.1 告警风暴和“狼来了”效应监控做久了我发现最大的敌人不是故障是告警疲劳。有一次集中调整监控阈值把一个服务的重要告警级别全部调低结果被大家当作“不再重要”等真正出大事时告警消息被微信群的消息流淹没了。后来我制定了一条规则每一个告警都必须在一个月内被触发过至少一次否则就下线或降级。听起来激进但很有效。告警链路要定期演练就像消防演习一样久不触发的告警大概率已经失效了——可能是采集器挂了可能是规则写错了也可能是通知渠道早把人移出群了。定期测试告警应该和定期备份一样列入运维巡检项。6.2 监控系统自身的稳定性与数据准确性监控系统守护着所有系统但谁来守护监控系统这是我这几年最深刻的教训。Prometheus 本身挂了两个小时期间业务发生故障告警没发等我们发现时事故已经过去了。事后排查发现Prometheus 所在主机的磁盘写满了而它恰好没有给自己配磁盘告警。监控自身的监控至少要覆盖以下内容监控服务进程是否存活、数据采集是否在持续写入、告警通道是否可用。最简单有效的方法是用外部监控云厂商的健康检查或者另一套独立脚本定期探测监控系统的核心端点。另外数据准确性也需要关注——Beszel 这类工具采集频率高但更轻量Zabbix 采集全面但有些指标本身就可能被 Agent 版本差异影响任何监控数据拿过来都要和实际状态做对比校准不能想当然地全信。6.3 给新人的三条建议如果让我给刚开始接触监控领域的朋友三条建议我会说第一先搞清楚要监控的对象会怎么死再去选工具。第二看板和告警是给人用的每一次配置都要想着使用者的感受信息太密、噪音太多等于没有。第三一定要留历史数据你永远不知道问题什么时候来但你知道它来的时候你一定会需要一份事发之前的现场。再分享一个小技巧吧。做任何监控系统我都会准备一个“说人话”的故障自查文档内容是当你收到某条告警时第一步该看哪个看板、第二步该跑哪条命令、第三步入哪里查日志。这十分钟的整理工作能让值班同事的响应时间从半小时缩短到五分钟。监控的价值最终要在“有人能快速行动”上兑现而不是停留在漂亮的看板上。监控这十年从脚本到平台从指标到可观测性从机房到业务再到物理世界变得太多了。但有些东西一直没变我们监控是因为我们关心系统是否可靠关心用户是否用得上关心出了问题能不能第一时间知道。技术在演进这份责任感始终在。
返回列表