运维团队常在三套割裂的工具间来回切换排障。炬鲸 OBSERVE 用统一标签体系把日志、指标、链路放进同一数据模型,本文介绍其数据模型、关联查询入口与落地建议。
大部分运维团队手里是三套独立的工具:ELK 管日志、Prometheus 管指标、Jaeger 管链路。查一次线上故障要在三个界面来回切:先在告警面板看到 CPU 和错误率飙升,再切到日志系统按时间翻日志,最后猜测是不是某个下游调用变慢,打开链路工具碰运气找 trace。链路里好不容易定位到一条 trace,想回到日志里找上下文,发现两个系统的标签对不上,只能手动复制 trace ID 再模糊搜索。时间全耗在「对齐数据」上,而不是解决问题上。
炬鲸 OBSERVE 的思路很简单:把这三类数据放进同一个数据模型,用统一的时间轴和标签体系串起来,让排障从「三屏切换」变成「一屏下钻」。
平台内部把所有观测数据统一成带标签的事件流。日志、指标、链路共享同一套标签:service、instance、environment、tenant。一条 trace 关联的日志可以直接通过 trace_id 标签取到,不需要二次搜索;指标和日志通过 host + service 对齐,告警触发时能直接下钻到对应时间窗口的日志。
采集端统一走 OpenTelemetry Collector:日志用 filelog receiver,指标用 prometheus receiver,链路用 otlp receiver,输出到同一个后端。精简配置如下:
receivers:
otlp:
protocols: { grpc: {}, http: {} }
filelog:
include: [/var/log/app/*.log]
prometheus:
config:
scrape_configs:
- job_name: app
static_configs:
- targets: [localhost:8080]
exporters:
otlphttp:
endpoint: https://ob.jjhub.cn/otel
service:
pipelines:
traces: { receivers: [otlp], exporters: [otlphttp] }
logs: { receivers: [filelog, otlp], exporters: [otlphttp] }
metrics: { receivers: [prometheus, otlp], exporters: [otlphttp] }
这三个入口背后是同一套标签索引,单次关联查询的延迟通常在百毫秒级,不会因为数据量大而明显变慢。
不建议一上来就把三套老系统全换掉。可以从一个核心服务开始,先把日志和链路接进来,跑两周确认关联查询能覆盖 80% 的日常排障场景,再逐步迁移指标。迁移期间保留旧工具的只读访问作为兜底。
注意顺序:先定标签规范,再上平台。关联查询的价值只有在标签统一之后才会显现,标签各写各的,数据再多也串不起来。