很多企业做可观测性,不是从一张白纸开始。
Prometheus 已经跑了几年,VictoriaMetrics 里有大量历史指标。日志在 Elasticsearch、Doris、阿里云 SLS、腾讯云 CLS 里,业务同学和运维同学都有自己的查询习惯。Java 服务接了 SkyWalking,云上应用用了 ARMS,云原生团队可能又引入了 Jaeger。Grafana 大盘、夜莺告警、云监控、自研发布平台、CMDB,也都在不同团队手里继续工作。
这时如果再谈“统一可观测平台”,最容易踩的坑是把它讲成一次大迁移:先改采集、再换存储、再重做大盘、再迁告警、再改应用埋点。听起来很完整,落地时通常很痛苦。业务系统不可能停下来等你重建可观测体系,SRE 也不可能在事故高发期把所有熟悉工具一次性替换掉。
更现实的做法是反过来:先把已有系统接入 Flashcat,让指标、日志、链路能在一个入口被查询、引用、告警和下钻;再治理标签、TraceID、资源上下文;最后把这些数据组织成灭火图对象和 AI 可使用的上下文。
也就是说,统一不是先推倒重来。统一的第一步,是让已有数据进入同一条排障路径。
已有系统的问题,不是没有数据,而是数据各走各路
企业里的可观测数据通常不少。
指标系统里有主机 CPU、容器内存、接口 QPS、错误率、P99、数据库连接数、Kafka 堆积量。日志系统里有网关 access log、应用错误日志、业务流水日志、组件日志。APM 里有 Trace、Span、服务拓扑、慢调用和错误调用。事件系统里有发布记录、Kubernetes 事件、告警事件、工单状态。
单看每一类系统,它们都有价值。Prometheus 适合做指标采集和 PromQL 分析。Elasticsearch、Doris、SLS、CLS 适合承接不同规模和成本模型下的日志查询。SkyWalking、Jaeger、ARMS 能把一次请求的调用过程展开。问题不在于这些系统不好,而在于它们通常只在自己的边界内工作。
事故发生时,值班人会在多个页面之间来回切换。告警先从指标系统出来,点开大盘看趋势;再去日志系统按服务名、实例名、时间范围搜错误;看到某个 trace_id 后,再去 APM 里找 Trace;发现某个下游慢,再回到指标系统看数据库或 Redis;如果怀疑发布影响,还要去发布平台和群消息里翻时间线。
这条路径每次都靠人临时拼。
老同学知道 job=payment-api、日志里的 app=payment-service、Trace 里的 service.name=pay-center 其实可能是同一个服务。新人不知道。平台也不知道。AI 更不知道。于是数据越多,入口越多,定位反而越依赖人的记忆。
统一可观测平台真正要解决的不是“我能不能再存一份数据”,而是“当一个对象异常时,平台能不能知道应该看哪些数据,并把查询参数带过去”。
接入已有数据源,是最低风险的第一步
Flashcat 的数据集成适合先解决这个问题。
如果企业内部已经有指标、日志、链路数据,并且存储在相应系统里,可以通过数据源配置把它们接入 Flashcat。接入之后,Flashcat 的上层功能可以引用这些数据源名称,查询已有数据,配置告警、仪表盘、灭火图、北极星和下钻路径。
这件事的关键在于 API 层面对接,而不是一上来搬数据。
指标侧,已有 Prometheus、VictoriaMetrics 或公有云监控,可以先作为时序数据源接入。Prometheus 生态本来就成熟,OpenTelemetry 的指标规范也和 Prometheus 有较好的兼容性。在当前阶段,很多企业继续使用 Prometheus/VictoriaMetrics 承载指标数据是合理的。Flashcat 可以先把它们作为统一指标入口的一部分。
日志侧,已有 Elasticsearch、Apache Doris、阿里云 SLS、腾讯云 CLS、火山云 TLS 等,也可以先接入。日志系统的数据量大、索引策略复杂、保留周期不同,贸然迁移成本很高。更好的方式是先让 Flashcat 能查到这些日志,并把日志字段变成下钻参数。
链路侧,已有 SkyWalking、Jaeger、ARMS tracing,也不需要第一步就替换。Flashcat 支持集成企业已有链路系统,也支持在链路检索页面切换不同链路数据源。拓扑分析也可以基于 SkyWalking、Jaeger、Flashcat APM 和 ARMS tracing 数据源生成服务调用关系,用来判断调用方向、影响面和上下游依赖。
所以,第一阶段的目标不是“所有数据都进入 Flashcat 自己的存储”。第一阶段的目标很朴素:让值班人从 Flashcat 出发,能查指标、搜日志、看 Trace、看拓扑、配告警、做下钻。
这个阶段越轻,越容易开始。
不要把统一理解成一个新入口
很多平台项目失败,是因为只做了一个“统一入口”。
页面上多了一个菜单,里面能跳到 Prometheus、ES、SkyWalking、Grafana、云监控。看起来都接进来了,但点进去以后还是各查各的。时间范围要重新选,服务名要重新输,字段名要自己猜。对事故现场来说,这只是链接导航,不是排障路径。
真正有价值的统一,需要把上下文带过去。
比如在灭火图里看到支付接口飘红,当前时间范围是 10:05 到 10:20,对象标签里有 service=payment-api、env=prod、cluster=shanghai、api=/pay/submit。用户点击“日志”时,日志检索应该带着这些条件去查对应日志源;点击“Trace”时,链路查询应该按服务、接口、时间窗口去筛;点击“仪表盘”时,对应 Grafana 或 Flashcat 仪表盘应该自动带入服务和集群变量。
这才是统一。
Flashcat 下钻引擎的价值就在这里。它不是让用户从一个页面跳到另一个空白页面,而是基于当前观测页面的时间上下文、请求上下文和资源上下文,把参数注入到目标查询或目标页面。下钻可以发生在灭火图、日志检索、日志主题、链路分析、北极星等场景里。
这也解释了为什么只接入数据源还不够。数据源接入解决的是“查得到”。下钻规则解决的是“从哪里开始查、带什么条件查、下一步去哪查”。
三类上下文决定接入后能不能串起来
接入已有系统以后,下一步不是立刻大规模重构,而是补上下文。
最基础的是时间上下文。指标异常、日志错误、Trace 慢调用、发布事件、Kubernetes 事件,都必须能对齐到同一段时间。事故现场里,时间范围不一致会制造很多误判。一个系统查最近 15 分钟,另一个系统查最近 1 小时,看起来都合理,结论可能完全不同。
第二类是请求上下文,核心是 trace_id 和 span_id。日志里有 trace_id,才能从一条错误日志跳到对应 Trace;Trace 里看到某个慢 span,也才能回到相关日志。对于应用日志和网关日志,这一步很关键。网关日志最好能输出接口、状态码、上游地址、响应时间、trace_id 等字段;应用日志最好能输出服务名、实例、日志级别、trace_id、span_id,以及必要的业务字段。
第三类是资源上下文,也是最容易被低估的一类。它回答“这条数据属于哪个对象”。常见字段包括 service、env、cluster、region、namespace、pod、container、host、instance、business、system、team。一个服务的指标、日志、Trace、告警、发布事件,如果资源上下文不一致,就很难自动关联。
比如同一个服务,在 Prometheus 里叫 job=order-api,在日志里叫 ServiceName=order-service,在 SkyWalking 里叫 order-center,在 Kubernetes 里叫 deployment=order-api-v2。人能猜,系统不能稳定猜。更麻烦的是,很多团队会把环境、集群、业务线、团队信息只放在 CMDB 或发布系统里,指标和日志里没有。这种情况下,下钻路径只能靠手工补条件,自动化程度会受限制。
所以,治理顺序应该很清楚:先接入,让数据可见;再治理标签和字段,让数据可关联;再建设对象模型,让数据进入排障路径。
不要反过来。不要一开始就要求所有历史数据完全符合某套规范。那会把项目拖死。
指标接入:Prometheus 和 VictoriaMetrics 可以继续发挥作用
Prometheus 生态在企业里太常见了。很多团队已经有成熟的采集配置、recording rules、告警规则、Grafana 大盘和 VictoriaMetrics 长期存储。让这些体系立刻停掉,没有必要。
更合理的接入方式,是先把 Prometheus 或 VictoriaMetrics 作为 Flashcat 的时序数据源。这样一来,Flashcat 可以在指标查询、告警、仪表盘、灭火图、北极星里引用这些数据。已有 PromQL 经验不会浪费,已有指标也不需要重复采集。
但接入之后,要开始看标签质量。
主机指标最好有 ident、env、region、cluster、business、system、service。Kubernetes 指标最好有 pod、container、env、cluster、node、service、level。应用指标和性能指标最好有 service、env、cluster、business、system、level。尤其是 service 命名,要尽量和日志、Trace 里的服务名一致。
这不是为了文档好看,而是为了下钻可用。
如果一个接口成功率下降,指标里只能看到 instance=10.1.2.3:9100,没有 service、env、cluster、api,平台就很难知道应该带用户去哪组日志、哪条 Trace、哪个灭火图对象。相反,如果指标标签本身就包含稳定资源上下文,Flashcat 可以把这些标签自然传递给日志、Trace 和仪表盘。
还有一个现实问题是高基数。业务自定义指标里不要把用户 ID、订单 ID、手机号这类不可枚举字段作为指标标签。它们适合进日志或 Trace attributes,不适合进入时序标签。否则后面不是统一难,而是时序库先被打爆。
日志接入:先查得到,再让字段能被用起来
日志系统的接入往往最复杂,因为每家公司日志形态都不一样。
有的团队把日志写入 Elasticsearch,有的写 Doris,有的直接用 SLS 或 CLS。有的日志是 JSON,有的是半结构化文本。有的字段规范很好,有的只有一大段 message。Flashcat 可以接入多种日志数据源,并在日志检索页面做查询。日志检索的下钻设置也支持在特定字段上配置链接,下钻到另一份日志、仪表盘、自定义链接或 Trace。
这里的重点不是“日志能不能展示出来”,而是“日志字段能不能成为下一步动作的参数”。
比如一条网关日志里有 trace_id、api、status_code、upstream_addr、request_time。当用户看到 502 或高延迟时,trace_id 可以跳 Trace,upstream_addr 可以跳主机或服务仪表盘,api 可以跳接口灭火图对象,status_code 可以进入多维分析。字段越结构化,下钻越自然。
如果日志只有一段文本,也不是完全不能做。可以通过字段提取、参数映射等方式做二次加工,把关键字段提出来用于下钻。但这属于补救手段。长期看,应用日志和网关日志应该尽量 JSON 化,至少把时间戳、服务名、实例、日志级别、trace_id、span_id、环境、集群、业务字段输出清楚。
日志接入还有一个常见误区:以为只要输出 trace_id,就完成了日志和链路联动。
trace_id 很重要,但它主要串单次请求。线上事故更多时候是对象级问题,比如某个服务错误率升高、某个接口 P99 变差、某个集群实例集中报错、某个租户受影响。这些问题需要 service、api、env、cluster、pod、host、tenant、error_code 这类字段一起工作。没有这些字段,日志只能提供个案证据,很难支撑系统性排查。
链路接入:SkyWalking、Jaeger、ARMS 先用起来
APM 是很多企业最不愿意动的系统,因为它和应用插桩、研发习惯、语言栈、采样策略都有关系。Java 团队用了 SkyWalking,多语言团队用了 Jaeger,云上业务用了 ARMS,背后都有历史原因。
统一平台不应该第一步就要求它们迁移。
Flashcat 可以先集成已有链路系统,让链路检索和拓扑分析进入统一入口。对于已有 SkyWalking、Jaeger、ARMS tracing 的团队,先把这些数据源接进来,在 Flashcat 里按条件检索或按 trace_id 检索,再把链路字段配置成下钻参数,已经能解决很多事故现场的问题。
例如,在链路分析页面里,可以基于任一字段配置跳转链接。看到某个 span 的服务名,可以跳对应服务仪表盘;看到主机名,可以跳主机资源视图;看到接口名,可以跳相关日志检索;看到数据库调用,可以跳数据库分析或慢查询入口。链路不再只是瀑布图,它成为一条可以继续向外扩展的排障路径。
拓扑分析也很重要。基于选定时间范围内的调用关系生成服务拓扑,可以帮助判断上下游依赖和异常影响面。尤其是在微服务系统里,单条 Trace 解释的是一个请求,拓扑解释的是一段时间内服务之间的关系。两者结合,才更接近事故现场。
当然,如果团队从零建设 APM,或者希望未来把链路数据和 Flashcat 的应用分析、接口分析、数据库分析、灭火图、AI 分析结合得更紧,可以评估 Flashcat APM。Flashcat APM 基于 OpenTelemetry 生态,链路数据完整度会更适合统一平台内的分析。但这应该是第二阶段或第三阶段的选择,不是已有 APM 团队接入 Flashcat 的前置条件。
告警不要只停留在规则列表
已有 Prometheus、日志系统、APM 接入后,很多团队会先迁告警。这很自然,但要小心一个问题:如果告警仍然只是规则列表,用户收到通知后还要自己找排查入口,统一平台的价值会打折。
Flashcat 里告警可以来自告警管理的规则,也可以来自北极星和灭火图。对于“加速故障定位”这个目标,更推荐把北极星和灭火图作为主要故障入口,通用告警规则作为补充。
原因很简单。普通告警规则告诉你某个表达式触发了阈值。灭火图告警告诉你哪个观测对象不健康。北极星告诉你核心业务指标是不是出问题。对象化以后,通知消息能把人带到卡片详情页,再从卡片进入指标、日志、Trace、仪表盘、事件和 AI 分析。
这会减少大量“收到告警以后先问谁”的时间。
比如支付成功率下降,如果只是 PromQL 告警,通知里可能只有表达式、标签和值。值班人还要判断这是接口问题、服务问题、数据库问题还是第三方通道问题。如果它已经挂在北极星和支付相关灭火图对象上,入口就清楚得多:先看业务影响,再看支付接口卡片、支付服务卡片、数据库卡片、第三方通道卡片,再沿下钻路径查证据。
告警不是目的。告警应该把人带到下一步分析动作。
灭火图把“数据源”变成“观测对象”
统一接入真正产生质变,通常发生在灭火图阶段。
因为指标、日志、Trace 本质上还是数据视角。灭火图是对象视角。它把系统拆成接口、服务、数据库、中间件、基础设施、网络链路等观测对象,并用健康指标和异常条件表达对象是否健康。
这和传统仪表盘不一样。仪表盘通常是指标集合,适合分析趋势。灭火图更像系统健康状态的结构化表达:功能接口层有哪些对象,微服务层有哪些对象,标准组件层有哪些对象,基础设施层有哪些对象;每个对象的健康指标是什么,异常条件是什么,下钻路径是什么。
举个例子,一个电商系统可以先拆成四层:
- 功能接口:浏览、登录、下单、支付、退款。
- 微服务:订单服务、支付服务、库存服务、用户服务、网关。
- 标准组件:MySQL、Redis、Kafka、Elasticsearch。
- 基础设施:Kubernetes 集群、宿主机、DNS、CDN、网络链路。
每个对象都可以从已有数据源取证据。接口成功率来自 Prometheus 或日志聚合,接口错误样本来自 ES/Doris/SLS/CLS,接口 Trace 来自 SkyWalking/Jaeger/ARMS。服务健康可以看 RED 指标、实例状态、Pod 重启、错误日志、慢 Trace。数据库健康可以看实例指标、连接数、慢查询、依赖它的服务调用。
这样,Flashcat 不是把数据源堆在一起,而是把数据源挂到对象上。
这一步很关键。因为事故现场里,人关心的不是“我有几个数据源”,而是“哪个对象坏了、影响哪些上游和下游、我下一步看什么”。
先建一个核心系统,不要全公司铺开
很多企业推进统一可观测平台时,容易一开始就追求全量覆盖。所有业务线、所有服务、所有指标、所有日志、所有 Trace 都要接,都要规范,都要建图。结果周期拉长,收益出现得太晚,大家很快失去耐心。
更好的做法是选一个核心系统做样板,比如交易、支付、登录、网关、订单。这个系统要满足几个条件:业务影响明确,历史故障案例足够多,已有指标日志链路数据相对完整,值班团队愿意参与。
第一周先做数据源接入和基础查询:Prometheus/VictoriaMetrics 能查,ES/Doris/SLS/CLS 能查,SkyWalking/Jaeger/ARMS 能查,核心 Grafana 或 Flashcat 仪表盘能打开。
第二周做上下文治理:统一核心服务的 service 命名,梳理 env、cluster、namespace、pod、host、business、team 等标签;补应用日志和网关日志的 trace_id、span_id、api、status_code、upstream、latency;把历史字段差异列出来,能自动映射的先映射,不能自动映射的先记录改造计划。
第三周建设灭火图:先按功能接口、微服务、标准组件、基础设施四层建对象。不要一开始追求所有对象都完美,优先覆盖真正影响业务的入口和依赖。每个对象至少有健康指标、异常条件和两三条有用的下钻路径。
第四周接告警和复盘:让北极星或灭火图对象触发通知,把通知带到卡片详情页。拿一两个真实故障案例回放,看从业务异常到对象定位、从对象到日志/Trace/仪表盘的路径是否顺畅。哪里还需要复制字段,哪里还需要问老同学,哪里就是下一轮治理点。
这个节奏比一次性大迁移靠谱得多。
AI 上下文不是凭空来的
现在很多团队都会问 AI 运维、智能根因分析。这个方向值得做,但前提经常被低估:AI 需要可理解的上下文。
如果 AI 只拿到一条告警,比如 payment_success_rate < 95%,它最多只能给出通用建议:查看日志、检查下游、确认发布、查看数据库。这样的回答很难真正减少排障时间。
但如果 AI 知道这条告警来自支付北极星指标,关联到支付接口灭火图卡片;卡片当前状态异常,健康指标包括成功率、QPS、P99、错误数;下钻路径包括网关日志、支付服务 Trace、支付服务仪表盘、MySQL 卡片、第三方通道卡片;最近 30 分钟有一次发布事件;上游订单服务正常、下游某通道错误率升高,那么分析就具体得多。
这就是为什么要先接入、再治理、再对象化。
数据源接入让 AI 有数据可查。标签、TraceID、资源上下文让 AI 能把数据对上。灭火图对象、健康状态、下钻路径让 AI 知道系统结构和排查路径。没有这些,AI 只是站在一堆零散数据前猜;有了这些,它才有机会沿着工程师平时排障的路径取证。
所以,建设灭火图不只是给人看的页面,也是把系统知识沉淀成机器能用的结构。
一条可执行的接入路线
如果你已经有 Prometheus/VictoriaMetrics、Elasticsearch/Doris/SLS/CLS、SkyWalking/Jaeger/ARMS,可以按下面这条路线推进。
第一步,盘点现有数据源。指标系统有哪些,日志系统有哪些,链路系统有哪些,哪些业务线在用,认证方式和访问地址是什么,保留周期多长,查询成本如何。不要急着评价好坏,先把现状列清楚。
第二步,接入 Flashcat。把时序、日志、链路、事件和基础设施数据源先配置进来,做连通性测试。确认它们能被查询,能被仪表盘、告警、灭火图、北极星引用。
第三步,选一个核心系统做试点。不要做平台视角的大而全,做事故视角的小而准。围绕一个真实业务流程,把接口、服务、组件、基础设施对象列出来。
第四步,治理关键上下文。先统一 service、env、cluster、namespace、pod、host、business、team;再补 trace_id、span_id、api、status_code、latency、upstream 等字段;最后处理历史命名差异和字段映射。
第五步,配置下钻路径。从对象到日志,从对象到 Trace,从对象到仪表盘,从 Trace span 到日志和主机视图,从日志 trace_id 到 Trace,从北极星业务指标到相关灭火图对象。每条路径都要用真实故障案例验证,不要为了配置而配置。
第六步,把告警入口对象化。核心业务异常优先进入北极星,技术对象异常优先进入灭火图,通用规则告警作为补充。通知消息要能把人带到对象详情和下钻入口。
第七步,再评估是否迁移采集或存储。新服务可以优先按 OpenTelemetry 接入。已有服务如果字段缺失严重,再安排改造。链路系统如果数据完整度影响分析,再评估 Flashcat APM。日志如果成本或查询能力不合适,再讨论存储调整。
注意这个顺序:先让系统跑起来,再让它变干净。
最后
已有 Prometheus、VictoriaMetrics、ES、Doris、SLS、CLS、SkyWalking、Jaeger、ARMS,不是使用 Flashcat 的障碍,反而是最好的起点。
这些系统已经承载了企业多年积累的可观测数据和团队习惯。Flashcat 要做的不是把它们一脚踢开,而是把它们接入统一排障路径:指标能触发对象健康变化,日志能带着字段继续下钻,Trace 能解释请求路径,拓扑能展示上下游影响,灭火图能表达系统对象,北极星能提示业务是否真的受损,AI 能基于这些上下文做更具体的分析。
统一可观测平台的价值,不在于你替换了多少工具,而在于故障发生时,团队能不能更快回答三个问题:
哪里异常?
影响什么?
下一步看哪里?
如果这三个问题开始变得清楚,统一接入就已经产生价值。后面的标签治理、TraceID 补齐、对象模型建设、AI 上下文完善,才有现实基础。
可以先从一个核心系统开始。带上现有 Prometheus/VictoriaMetrics、日志系统、APM 架构和一两个真实故障案例,一起把第一张灭火图和第一批下钻路径跑通。两周后再看:故障入口是否更清晰,跨系统复制查询条件是否变少,新人是否能按平台路径完成一次排查。这个结果,比任何平台概念都更有说服力。