以指标、日志、链路追踪三大支柱为底座,配合统一采集与关联分析,才能实现从故障发现到根因定位的完整闭环。 仅仅把监控数据堆在一起,不算可观测性;只有让三类数据互相印证,才能应对容器频繁调度、应用拆分带来的不确定性。
容器平台可观测性建设三大支柱是什么?
行业共识认为,容器平台的可观测性由三个数据维度构成:指标(Metrics)、日志(Logs)、链路追踪(Traces),它们各司其职,又互相补充,打个比方:指标告诉你系统“现在发烧了”,日志告诉你“咳嗽痰多”,链路追踪则指认“是哪根血管堵了”,三个支柱缺一不可,否则排障就像蒙眼摸象。
指标(Metrics)反映系统状态的“体温计”
指标是数值型数据,按固定周期采集,用于监控资源使用率、请求速率、错误率、延迟分位数等,在容器平台里,指标采集有两个特殊难点。
- 动态实例:Pod随时创建和销毁,指标需要按标签动态聚合,而不是绑定固定IP。
- 多层维度:既要看容器CPU/内存,也要看节点、命名空间、应用层的业务指标。
实操中,最常见的路径是部署Prometheus,配合cAdvisor和kube-state-metrics采集容器与Kubernetes对象指标,配置一个基础采集任务,只需三步:
- 在集群中创建命名空间monitoring。
- 通过Helm安装prometheus-community/kube-prometheus-stack。
- 添加ServiceMonitor,指定抓取路径和端口。
业内专家指出,多数容器平台的可观测性建设失败,不是因为工具不够,而是指标口径不统一,CPU使用率”到底指容器进程、Pod还是节点粒度?团队内部必须提前定义清楚。
日志(Logs)排查问题的“显微镜”
日志是离散的事件记录,描述“发生了什么”,容器日志的采集比虚拟机时代麻烦得多:容器文件系统是临时的,stdout会随Pod删除而消失,日志必须实时采集并集中存储。
当前主流做法是使用Fluent Bit或Vector作为Agent,以DaemonSet方式运行在每个节点上,采集/var/log/containers下的日志,再转发到Elasticsearch或Loki。

关键一步是给日志加上Kubernetes标签,比如pod名称、命名空间、容器名,这样后续才能按应用过滤。
容器日志采集有个常见坑:多行日志(如Java堆栈、Python traceback)默认会被拆成多行记录,导致检索困难,解决办法是配置multiline解析器,或者在应用层使用JSON格式输出,让每行日志自带结构化字段。
链路追踪(Traces)定位调用关系的“导航仪”
微服务架构下,一次用户请求会穿过十几个服务,链路追踪负责记录完整的调用链,包括每个Span的耗时、状态和携带的标签,容器平台让链路追踪的落地更复杂,因为实例数量动态变化,但这也正是追踪的价值所在:没有它,你只能看到某个服务P95延迟变高,却不知道是下游的哪个节点拖了后腿。
常见的开源追踪方案是Jaeger或Zipkin,配合OpenTelemetry统一埋点,在Kubernetes中部署时,建议把追踪后端单独部署在稳定节点池,避免与业务应用争抢资源,采样策略要分层:常规流量用10%比例采样,对异常请求(如错误码或高延迟)强制全采。
容器平台可观测性方案怎么选?先看这三个维度
很多团队纠结于选开源全家桶还是商业产品,容器平台可观测性方案怎么选,取决于你手里的资源:技术人力、预算规模、以及对SLA的要求,下面从三个维度拆解。
开源工具与商业产品对比
| 维度 | 开源组合(Prometheus + Loki + Tempo) | 商业产品(如Datadog、Dynatrace) |
|---|---|---|
| 采集能力 | 灵活,需自行配置 | 开箱即用,Agent自动发现 |
| 存储成本 | 自建存储,需调优 | 按量计费,价格随规模增长 |
| 告警能力 | 基于PromQL,学习曲线陡 | 内置AI降噪,规则模板丰富 |
| 关联分析 | 需要额外搭建标签关联 | 原生支持指标日志追踪联动 |
开源方案胜在掌控权和低成本,但需要至少一名熟悉Kubernetes和PromQL的工程师维护,商业产品则适合团队规模小而业务重要性高的场景,省下的运维工时往往超过订阅费用。
SaaS托管与自建部署的权衡
如果公司在北京或上海,且有自建机房的合规要求,可能会倾向自建,但如果追求快速上线,选择SaaS托管服务更合适,自建时,对象存储和索引成本是隐形大头日志数据量大,建议设置保留周期:调试日志存7天,业务日志存30天,审计日志按合规要求另存。
预算有限的起步组合
对于预算有限的初创团队,推荐一套低门槛组合:
- 指标:Prometheus + Grafana,完全开源免费。
- 日志:Loki,不建索引,存储成本远低于Elasticsearch。
- 追踪:Tempo,配合Grafana统一界面。
这套组合的劣势是关联性偏弱,但可以通过在三个后端中统一使用trace_id作为标签来弥补。
容器平台监控告警配置步骤:三大支柱联动
可观测性的最终目标是快速定位并解决问题,而告警是触发排障的开关,只配指标告警远远不够,必须让指标、日志、追踪联动,以下是一套可验证的实操流程。
第一步:统一采集与标签规范
在部署各采集器之前,先定义一套全局标签,至少包含:cluster、namespace、app、version,无论是Prometheus指标、Loki日志还是Tempo trace,都必须带上这四个标签,这样后续通过Grafana Explore时,才能从一个指标跳转到相关日志或追踪。
第二步:写一个实用的告警规则示例
以Prometheus为例,创建一个诊断Pod频繁重启的告警:
groups:
- name: container-health
rules:
- alert: PodCrashLooping
expr: kube_pod_container_status_restarts_total > 5
for: 10m
labels:
severity: warning
annotations:
summary: "{{ $labels.pod }} 重启次数超过5次"

这个规则看似简单,但仅靠指标只能知道重启,不知道原因,在告警通知中应附上日志查询链接,例如跳转到Loki的查询页面,自动带上Pod名称标签。这就是联动的基础:告警消息不是终点,而是起点。
第三步:建立排障SOP
- 收到告警后,先在指标页查看CPU、内存、请求量趋势。
- 如果指标异常,点击链接跳转日志,搜索该Pod的ERROR或Exception。
- 若日志中看到调用外部服务超时,进入追踪页面,按
trace_id查看完整链路,定位下游服务。
很多团队卡在第三步,因为日志和追踪的数据格式不一致,建议强制应用接入OpenTelemetry SDK,让日志中输出trace_id,日志采集器解析后自动关联,这一步需要应用开发配合,但收益显著:平均故障定位时间能从小时级缩短到分钟级。
常见问题解答
容器平台可观测性建设从哪开始?
先从指标开始,指标采集成本最低、工具最成熟,能覆盖大部分资源告警场景,跑通Prometheus+Grafana后,再加入日志采集,最后补链路追踪,三步按顺序走,每步都可独立交付,避免一次性大工程半途而废。
Prometheus和SkyWalking有什么区别?
Prometheus专注于指标采集和告警,属于监控体系;SkyWalking偏向链路追踪和应用性能分析,也能收集一些JVM指标和服务拓扑,两者不是替代关系,在容器平台中,常将Prometheus用于基础设施和基础指标,SkyWalking用于微服务的调用链分析,如果团队已有OpenTelemetry基础,也可用Jaeger或Tempo替代SkyWalking,选型的原则是看已有技术栈如果应用全是Java且没有OpenTelemetry埋点,SkyWalking的字节码注入更省事。
容器平台可观测性的本质,不是堆砌工具,而是让三类数据形成一套证据链,从指标发现异常,用日志定位原因,靠追踪还原调用路径。把这三个支柱扎实落地,比追新工具更重要。
