从 Prometheus、ES、SkyWalking 到 Flashcat:已有系统如何统一接入

已有 Prometheus、Elasticsearch、SkyWalking 等可观测系统不必推倒重来。先接入 Flashcat 统一查询和下钻,再治理 TraceID、标签和资源上下文,逐步形成灭火图、北极星和 AI 可用的排障路径。

作者 快猫技术团队

Prometheus ES SkyWalking 接入 Flashcat 统一场景上下文

很多企业做可观测性,不是从一张白纸开始。

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-apienv=prodcluster=shanghaiapi=/pay/submit。用户点击“日志”时,日志检索应该带着这些条件去查对应日志源;点击“Trace”时,链路查询应该按服务、接口、时间窗口去筛;点击“仪表盘”时,对应 Grafana 或 Flashcat 仪表盘应该自动带入服务和集群变量。

这才是统一。

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_idapistatus_codeupstream_addrrequest_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 的七步路线

第一步,盘点现有数据源。指标系统有哪些,日志系统有哪些,链路系统有哪些,哪些业务线在用,认证方式和访问地址是什么,保留周期多长,查询成本如何。不要急着评价好坏,先把现状列清楚。

第二步,接入 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 架构和一两个真实故障案例,一起把第一张灭火图和第一批下钻路径跑通。两周后再看:故障入口是否更清晰,跨系统复制查询条件是否变少,新人是否能按平台路径完成一次排查。这个结果,比任何平台概念都更有说服力。

延伸路径

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

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

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