夜莺项目开源地址:https://github.com/ccfos/nightingale 欢迎收藏,欢迎分享您的落地案例。
公司介绍
宏地科技是全国领先的商用车车联网信息服务提供商,致力于打造安全、安心、智慧、智能的道路交通运输安全车联网体系,是一家以科技、数据、应用来驱动道路交通运输安全的车联网信息服务公司。
核心挑战:在“行驶的赛车”上换零件
我们面对的是一个典型的“监控烟囱”环境:
- 平台杂:涵盖智慧商砼、校车平台、车联网、充电桩等 7 个独立业务系统。
- 组件多:从传统的 Oracle/MySQL 到现代的 IoTDB、RabbitMQ、K8S。
- 源多样:数据散落在 VictoriaMetrics、独立 Prometheus 以及 K8S 内部 Prometheus 中。
- 时间紧:只有 6 天时间,必须完成从环境搭建到 7 大平台全覆盖。
架构设计:混合动力,统一入口
我们没有选择“数据大搬家”,而是采用了多源聚合策略:
- VictoriaMetrics (VM):作为主时序库,处理商砼和车联网的高频 IoT 数据,利用其 MetricsQL 的增强性能。
- K8S 内生 Prometheus:通过夜莺直接接入 K8S 内部 Service 地址,省去了跨集群抓取数据的网络开销。
- 原有 Prometheus:保留旧有运维系统的采样点,通过夜莺做逻辑平移。
- 结果:数据不动,逻辑动。夜莺作为“指挥中心”,实现了全平台指标的一键溯源。

实战避坑:那些“细节”里的填坑笔记
标签降级兼容:解决“识别不了项目”
- 痛点:不同 Exporter 的标签命名极不规范。有的叫 project,有的叫 projectA,有的啥也不带。
- 对策:在夜莺通知模板中建立“标签提取链条”。
- 逻辑:优先找 project -> 找不到找 projectA -> 再没有找 app -> 最后保底显示“通用项目”。
- 价值:确保了无论数据源多乱,发到钉钉里的告警都能一眼看出是哪个业务线在“冒烟”。


标识优先级重构:解决“故障对象指代不明”
- 痛点:监控容器 CPU 时,告警只报主机 IP(ident),运维分不清是哪个容器。 对策:智能标识提取顺序:容器名 (container_name) > Pod名 (pod) > 主机名 (ident) > IP。
- 效果:告警标题从 【告警】192.168.xx.xx 异常 变成了 【告警】rabbitmq 容器异常。这种“一眼定罪”的能力,直接砍掉了 5 分钟的二次排查时间。


语义化告警:让机器指标“说人话”
- 痛点:服务挂了报 0.0,运维反应慢。
- 对策:
- 状态转译:在模板里把 0 映射为红色的“离线”,1 映射为绿色的“在线”。
- 排查逻辑分流:根据指标名(如 up 指标 vs usage 指标),自动切换底部的排查建议。不再用“资源占用过高”去敷衍一个已经宕机的服务。
核心技术干货 (MetricsQL/PromQL)
针对本次重构,我们统一了核心指标的计算口径:
CPU 利用率(平滑去噪)
round((1 - avg by(instance, projectA) (rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100, 0.01)
注:使用 rate 而非 irate,配合 5m 窗口,有效过滤了商砼系统瞬间启动时的毛刺误报。
内存可用率(真实视角)
round((1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100, 0.01)
注:强制使用 MemAvailable,排除 Linux 缓存干扰,降低 30% 以上的虚假内存告警。
落地执行表
| 阶段 | 任务重点 | 核心产出 |
|---|---|---|
| D1: 筑基 | 拉起 n9e/VM 核心,接入商砼 DB/MQ | 商砼生产链路监控闭环 |
| D2: 标准化 | 全量部署 Categent,下发主机模板 | 7 大平台主机资源画像 |
| D3: 安全攻坚 | 校车/车联网视频流与 MQTT 指标接入 | 高并发接入层稳定性监控 |
| D4: 垂直调优 | Oracle 存活、IoTDB 写入、充电桩支付链路 | 数据库与交易链路深度监控 |
| D5: 闭环告警 | 调试全兼容通知模板,配置 P0/P1 分级推送 | 告警“语义化”通知上线 |
| D6: 驾驶舱 | 7 大项目健康度总览大屏,全链路拨测验证 | 运维驾驶舱交付 |
写在最后:监控的本质是“救火指南”
通过这 段时间的重构,我们把监控从“一堆乱七八糟的数字”变成了“一封封清晰的救火说明书”。
后续红线:
- 新增监控必带标签:任何新项目接入,必须在采集侧带上 env 和 projectA 标签。
- 持续时长必填:所有告警必须设置 >60s 的持续时长,宁可慢报 1 分钟,不可误报 100 次。
- 模板动态更新:随着后续农机、充电桩平台深入,持续完善 TagsMap 的提取逻辑。
夜莺项目开源地址:https://github.com/ccfos/nightingale 欢迎收藏。