应用别动我来扛:聊聊 Kubernetes 里的「观测注入」这门手艺
做运维这行久了,你一定有过这种崩溃时刻:
「服务慢了,你们日志呢?」
「没打……」
「指标呢?」
「没接……」
「链路追踪呢?」
「代码里没埋……」
然后空气突然安静。
问题不在于大家不想做可观测性,而在于——没人敢动应用代码。
- 代码不是你写的
- 改一次要走一堆评审
- 上线窗口比春运抢票还难
这时候,Kubernetes 给了运维一个“翻身”的机会:
👉 观测注入(Observability Injection)
一句话概括就是:
不改一行业务代码,也能把指标、日志、链路“薅”出来。
一、先说人话:什么叫“观测注入”?
传统可观测性是这样的:
业务代码
├── 埋指标
├── 打日志
└── 接 SDK
而 Kubernetes 里的观测注入是:
Pod 外围
├── Sidecar
├── eBPF
├── Admission Webhook
└── 节点级 Agent
应用无感,运维接管。
这不是偷懒,是现实妥协。
二、指标注入:别再逼开发写 Prometheus client 了
很多团队 Prometheus 推不起来,不是 Prometheus 不好,是这一步太难:
「你帮我在代码里加个 metrics 吧」
然后开发心里一万个问号。
1️⃣ kube-state-metrics:先把“集群体征”拿到手
这是最容易被低估的组件。
kubectl apply -f kube-state-metrics.yaml
你立刻能得到:
- Pod Ready / Restart
- Deployment 副本状态
- Job 成功失败次数
👉 这类指标,100% 不该让业务管。
2️⃣ Sidecar 注入:HTTP 指标“顺手牵羊”
以 Envoy / Nginx 为例:
annotations:
sidecar.istio.io/inject: "true"
你不改应用,就能拿到:
- 请求 QPS
- 延迟分布
- 错误率
这是我心中“性价比最高”的观测注入方式。
三、日志注入:日志不是“写出来的”,是“收出来的”
很多应用日志写得像天书,但你没得选。
好在 Kubernetes 的日志路径是统一的:
/var/log/containers/*.log
Fluent Bit / Vector 的典型玩法
[INPUT]
Name tail
Path /var/log/containers/*.log
[FILTER]
Name kubernetes
Merge_Log On
这一步的意义不在采集,而在上下文补全:
- Pod
- Namespace
- Node
- Labels
👉 没有上下文的日志,只是文本;有上下文的日志,才是线索。
四、链路追踪:eBPF 是运维的“外挂级神器”
说实话,全链路追踪最难“非侵入”。
但这两年 eBPF 的成熟,真的改变了玩法。
1️⃣ 基于 eBPF 的自动探针(以 Pixie 为例)
它干的事很简单粗暴:
- 在内核层 hook 系统调用
- 识别 HTTP / gRPC
- 自动拼请求链路
你部署完之后,啥都不改:
kubectl apply -f pixie.yaml
然后你就能看到:
- 哪个服务慢
- 慢在哪个下游
- TCP 重传、队列阻塞
👉 这对“祖传服务”简直是救命稻草。
五、Admission Webhook:运维的“隐形注射器”
这是我个人非常喜欢的一种方式。
你可以在 Pod 创建时,悄悄塞点东西进去。
比如自动加 sidecar、加环境变量、加探针。
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
你能做到什么?
- 所有 Java 服务自动加 JMX exporter
- 所有 HTTP 服务自动加 tracing sidecar
- 不符合规范的 Pod 直接拒绝
运维终于不用“求人配合”了。
六、说点掏心窝子的:非侵入 ≠ 永远不侵入
写到这儿,我想说句可能不太“政治正确”的话。
观测注入不是银弹。
- eBPF 有性能成本
- Sidecar 会吃资源
- 自动推断不如手动语义准
所以我心中的最佳实践是:
短期靠注入兜底,长期还是要推动“可观测性左移”。
也就是:
- 新服务,规范先行
- 老服务,注入托底
- 指标、日志、链路逐步标准化
七、一个成熟团队的真实状态
真正成熟的 Kubernetes 运维体系,通常长这样:
节点层:eBPF / Node Exporter
Pod 层:Sidecar / 日志 Agent
集群层:kube-state-metrics
准入层:Admission Webhook
应用开发:
「我只管写业务」
运维:
「别慌,我能看到」
最后一句话,送给所有运维同行
可观测性不是“看得多”,而是“看得稳”;
非侵入不是目的,而是通往工程现实的桥。