← 返回文章列表
使用指南 4 分钟阅读 炬鲸团队

Kubernetes 集群接入 OBSERVE:OpenTelemetry Collector 部署与日志采集

用 OpenTelemetry Collector 把 K8s 集群接入 OBSERVE:DaemonSet+Deployment 双层架构、Helm 配置、容器日志采集、应用无侵入埋点与常见排障。

架构:DaemonSet + Deployment

把 K8s 集群接进 OBSERVE,推荐用 OpenTelemetry Collector 分两类部署:

  • DaemonSet:每个节点跑一个,负责采集节点日志、容器 stdout、kubelet 指标,走 hostPath 读日志文件,就近上报;
  • Deployment:跑一组中心化的 Collector 实例,接收应用 OTLP 上报(链路、指标、日志),做批处理和负载均衡后转发给 OBSERVE。

这个分层的好处是:节点级数据就近采集,避免跨节点搬运;应用级数据集中接收入口,方便统一加采样、脱敏、过滤。

部署 Collector

用 Helm 安装官方 chart,再覆盖关键配置:

mode: daemonset
config:
  receivers:
    filelog:
      include: [/var/log/pods/*/*/*.log]
      operators:
        - type: json_parser
    otlp:
      protocols: { grpc: {}, http: {} }
    prometheus:
      config:
        scrape_configs:
          - job_name: kubelet
            scheme: https
  exporters:
    otlp:
      endpoint: "otel.example.com:4317"
  service:
    pipelines:
      logs: [filelog, otlp]
      metrics: [prometheus, otlp]
      traces: [otlp, otlp]

关键点:fileloginclude 指向 /var/log/pods,配合 json_parser 把容器日志拆字段;OTLP exporter 统一指向 OBSERVE 网关。

采集应用日志

容器日志走 stdout,采集器从节点日志目录抓取,不需要应用改代码。对于写文件到持久卷的应用,DaemonSet 里给 hostPath 挂载业务日志目录,再配一条 filelog 规则即可。多行堆栈(Java/Go panic)用 multiline 配置按首行正则合并。

指标与链路

应用无侵入接入链路,给 Pod 加环境变量即可:

env:
  - name: OTEL_EXPORTER_OTLP_ENDPOINT
    value: "http://otel-collector:4317"
  - name: OTEL_SERVICE_NAME
    value: order-service

搭配 Java/Python/Go 的自动埋点 Agent,链路数据自动上报到集群内的 Collector,再由 Deployment 层统一转发。

验证与排障

部署完先查 Collector 自身指标(otelcol_receiver_accepted_spans 等)确认数据在流动;再看 OBSERVE 侧是否有 service.name 出现。常见坑:DaemonSet 的 hostPath 权限不足、OTLP endpoint 写成了集群外地址导致跨网超时、Pod 的 OTEL_SERVICE_NAME 没设导致服务名全是 unknown。