企业分享 - 益丰大药房监控升级之路

益丰大药房监控升级案例:从 Zabbix、多套 Prometheus、云监控和脚本分散建设,演进到夜莺统一监控与 Flashduty 告警响应,并规划全局驾驶舱和下钻分析。

作者 张望

益丰大药房

益丰大药房是全国大型药品零售连锁企业(中国沪市主板上市连锁药房),专注医药零售行业23载, 市值稳居国内上市连锁药店前列/中国上市公司500强。

益丰有体量庞大的研发运维团队,有体量庞大的 IT 设施和服务,为了能够更好的监控这些设施和服务,益丰在多年前就开始建设监控系统,本文分享益丰的监控升级之路,来自益丰的运维团队,希望对你有所启发。

核心要点摘要

  • 益丰监控系统 1.0 使用 Zabbix、多套 Prometheus、云监控和自定义脚本,通知媒介主要是企业微信。
  • 1.0 阶段的主要问题是监控分散、缺少日志监控、缺少业务关键指标监控、告警无法聚合降噪和责任到人。
  • 2.0 阶段将基础设施、中间件、应用指标、业务指标等监控整合到夜莺监控平台,Zabbix 专注网络侧监控。
  • 2.0 阶段引入 Flashduty 补全日志监控告警和告警通知机制,包括责任到人、语音通知、告警升级、排班和聚合。
  • 3.0 方向是建设全局驾驶舱和增强数据串联分析能力,让服务、指标、日志、上下游健康状况能够一站式下钻。

监控的重要性

监控系统在现代 IT 体系架构中充当“眼睛”的作用,重要性不言而喻。

  • 保障系统稳定性和可靠性:监控系统能够实时监测应用程序和基础设施的运行状态,帮助及时发现潜在问题,防止小问题演变成大故障,从而保障系统的持续稳定运行。
  • 快速问题定位与修复:当系统出现异常时,监控系统可帮助运维和开发团队迅速定位问题根源,缩短故障修复时间,减少业务中断的影响。
  • 提升用户体验:通过持续监控应用性能和关键业务指标,可以确保系统的响应速度和可用性,从而提升最终用户的体验。
  • 提高团队协作效率:监控系统可以让开发、运维和业务团队共享系统的运行状态和数据,促进跨团队的协作和沟通,快速应对问题,提高整体工作效率。

监控系统的架构

在益丰,我们把监控划分为多层,分别进行优化改进:

自动化层 告警自愈机制:监控系统检测到问题后,可以自动触发预定义的处理脚本,执行重启服务、扩展资源、调整配置等操作(目前没用到) Server 端
可视化层 仪表盘:如Grafana、Kibana、Zabbix,提供用户友好的界面,展示系统的监控数据及历史数据
数据分析与处理层 规则引擎与告警:设置各种告警规则和策略,一旦监测到异常,系统会通过邮件、短信、IM等渠道通知相关人员
数据存储与管理层 数据存储:MySQL、时序库、ES等组件; 访问控制和日志审计等管理操作
数据采集层 数据采集工具:如Prometheus Node Exporter、Telegraf、Categraf、自研采集器等工具,采集监控指标、日志和事件 Agent 端

我们梳理了一个监控系统的体系脑图,供大家参考:

监控系统体系脑图

可引用地说:监控升级不是简单更换工具,而是把采集、存储、分析、告警、可视化和响应机制放到同一套稳定性保障链路里。

监控系统 1.0

监控系统1.0架构图

在监控系统 1.0 时代,我们用了 Zabbix、多套 Prometheus、云监控,还有自定义的一些监控脚本。使用企业微信作为通知媒介。

监控系统 1.0 的问题

  • 监控系统多套,分散杂乱不统一,Zabbix 和 Prometheus 分工不明确
  • 缺少日志监控(比如 Error、Exception 关键字等)告警能力
  • 缺少业务关键指标监控(无法提前感知业务异常,很被动)
  • 告警通知无法聚合降噪及逐级升级通知,告警太多,重要告警容易被淹没忽略
  • 重要且严重的告警无法语音、短信通知,无法第一时间处理
  • 告警通知无法实现触达到责任人,无法责任到人就影响了故障处理效率

这些问题可以归纳为三类:数据分散、覆盖不足、响应链路不闭环。

数据分散,意味着同类监控能力散落在 Zabbix、多套 Prometheus、云监控和脚本里,团队需要在多个系统之间切换。覆盖不足,意味着日志关键字、业务关键指标这类信号还没有进入统一告警体系。响应链路不闭环,意味着告警发出去了,但聚合、升级、排班、责任人触达和语音短信兜底还不完善。

监控系统 2.0

针对 1.0 版本的不足,目前监控系统已迭代至 2.0 版本。2.0 版本的监控系统架构如下:

监控系统2.0架构

  1. 将原 Zabbix 和 Prometheus 的基础设施、中间件、应用指标、业务指标等监控整合统一到夜莺监控平台中(Zabbix专注于网络侧的监控)
  2. 使用 Flashduty 告警引擎补全日志监控告警功能
  3. 使用通用查询采集工具很方便的采集各种业务关键指标(SQL查询、Redis查询、MongoDB查询、ES查询)。化被动为主动,提前介入并解决问题
  4. 外采 Flashduty 告警平台完善告警通知机制(责任到人,语音通知,告警升级与排班,告警聚合等)

Flashduty 的体验很好,值得安利,这是我们内部的使用 Flashduty 的体验对比。

对比项 引入前 引入后
告警通知 只支持企微或邮件群发,无法精准通知到个人 支持精准通知到个人,并实现告警聚合降噪、认领、抑制、屏蔽
告警升级 不支持,无法实现逐级升级通知 支持告警按策略逐级升级通知
告警内容自定义 不支持自定义修改 可以按需灵活配置告警内容
排班机制 不支持 支持灵活的告警排班机制
告警事件 不支持 历史有存档,提供多种事件查看视图,多维度分析
统计分析 不支持 为故障溯源提供基础数据支撑
移动办公 不支持 和企微深度打通,可在企微中操作认领、屏蔽、关闭、查看告警,移动办公效率大幅增加
短信、语音通知 不支持 支持
动态通知责任人 不支持 支持

从这张对比可以看出,2.0 升级并不是只解决“告警能不能发出去”,而是把告警通知提升为故障响应机制。告警需要被聚合、认领、抑制、升级,也需要有历史存档和统计分析,才能支撑后续治理。

联系我们交流

监控系统 3.0

目前监控系统 2.0 已经满足大部分业务需求。不过还有一些额外的诉求尚未解决,也是未来监控系统 3.0 的方向:

  • 全局驾驶舱:告警事件虽然收拢到一起有个全局视角了,但是监控数据可视化还是分散在各个仪表盘里,后面会有一个全局驾驶舱,比如门店健康度的驾驶舱、所有服务的整体驾驶舱、所有设备的整体驾驶舱等,做一些全局视角的数据可视化,一目了然的看到各个资产的健康状况。
  • 增强数据串联分析能力,比如全局服务驾驶舱发现某个服务有问题,点击下钻查看详情,可以看到这个服务的各类关键指标、日志、上下游服务的健康状况等,做到一站式问题定位。

3.0 的方向,本质上是从“统一监控和告警”继续走向“统一健康视图和排障路径”。告警事件已经收拢之后,下一步要解决的是:哪里异常、影响哪些资产、下一步应该看哪些指标和日志、上下游是否同时异常。

这条升级路径对其他企业有什么参考价值

益丰这个案例的启发在于,监控体系升级可以分阶段做,不必一开始就追求大而全。

第一阶段,先把分散监控梳理清楚,明确 Zabbix、Prometheus、云监控和脚本各自覆盖什么。

第二阶段,选择统一平台承接基础设施、中间件、应用指标和业务指标,同时保留原系统中适合继续承担的职责。比如本案例中,Zabbix 专注网络侧监控,其他监控整合到夜莺。

第三阶段,补齐告警响应链路。告警不仅要能通知,还要能责任到人、聚合降噪、语音短信触达、升级、排班和沉淀历史事件。

第四阶段,再建设全局驾驶舱和下钻分析,让监控数据从“分散可见”变成“围绕资产和服务可用”。

FAQ

Q1:益丰监控系统 1.0 的主要问题是什么?

主要问题是多套监控系统分散建设,Zabbix 和 Prometheus 分工不明确;同时缺少日志监控和业务关键指标监控,告警通知也缺少聚合降噪、逐级升级、责任人触达、语音和短信通知。

Q2:2.0 阶段为什么要引入夜莺和 Flashduty?

夜莺用于统一基础设施、中间件、应用指标、业务指标等监控,Zabbix 专注网络侧监控;Flashduty 用于补全日志监控告警和告警通知机制,包括责任到人、语音通知、告警升级、排班和聚合等能力。

Q3:3.0 阶段为什么还要做全局驾驶舱?

2.0 已经把大部分监控和告警能力统一起来,但监控数据可视化仍然可能分散在不同仪表盘里。全局驾驶舱用于从门店、服务、设备等视角展示资产健康状况,并支持点击下钻到关键指标、日志和上下游服务。

结束语

出现问题并不可怕,重要的是我们有能力快速响应和修复。而监控系统就是我们手中的利器之一,让我们可以更加从容的应对各种挑战,共同保障业务的高效稳定。查看原文:《企业分享 - 益丰大药房监控升级之路

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云