mcpField
O
opentelemetry

opentelemetry

github.com/julianobarbosa云与 DevOps15134 次安装4 天前更新
代码仓库

关于 opentelemetry

面向在 Kubernetes 中实施 OpenTelemetry 可观测性的团队,介绍服务埋点与 Collector 运维。内容涵盖遥测信号、管道配置、部署模式、验证方法和常见问题。

主要功能

  1. 01使用 Helm 部署 OpenTelemetry Collector
  2. 02通过 OTLP 发送测试遥测数据
  3. 03配置接收器、处理器和导出器
  4. 04比较 Kubernetes 部署模式
  5. 05检查 Collector Pod 和日志
  6. 06了解埋点及管道常见问题

适用场景

  1. 01在 Kubernetes 中设置遥测采集
  2. 02测试 OTLP 端点
  3. 03选择 Collector 部署模式
  4. 04排查数据丢失或链路传播中断

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/julianobarbosa/claude-code-skills --skill opentelemetry

安装后在 Claude Code 中输入/opentelemetry确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/
values-daemonset.yaml
values-deployment.yaml
references/
COLLECTOR.md
INSTRUMENTATION.md
KUBERNETES.md
TROUBLESHOOTING.md
scripts/
validate-otel.sh

详细介绍

OpenTelemetry 实施指南

概述

OpenTelemetry(OTel)是一个与供应商无关的可观测性框架,用于检测、生成、收集和导出遥测数据(跟踪、指标、日志)。本指南介绍如何在 Kubernetes 环境中实施 OTEL。

快速入门

在 Kubernetes 上部署 OTEL Collector
# Add Helm repo
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update

# Install with basic config
helm install otel-collector open-telemetry/opentelemetry-collector \
  --namespace monitoring --create-namespace \
  --set mode=daemonset
通过 OTLP 发送测试数据
# gRPC endpoint: 4317, HTTP endpoint: 4318
curl -X POST http://otel-collector:4318/v1/traces \
  -H "Content-Type: application/json" \
  -d '{"resourceSpans":[]}'

核心概念

信号:三种遥测数据:

  • 跟踪:跨服务的分布式请求流
  • 指标:数值测量(计数器、仪表、直方图)
  • 日志:包含结构化或非结构化数据的事件记录

Collector 组件:

  • 接收器:接收数据(OTLP、Prometheus、Jaeger、Zipkin)
  • 处理器:转换数据(batch、memory_limiter、k8sattributes)
  • 导出器:发送数据(prometheusremotewrite、loki、otlp)
  • 扩展:添加功能(health_check、pprof、zpages)

Collector 配置

基本管道结构
config:
  receivers:
    otlp:
      protocols:
        grpc:
          endpoint: ${env:MY_POD_IP}:4317
        http:
          endpoint: ${env:MY_POD_IP}:4318

  processors:
    batch:
      timeout: 10s
      send_batch_size: 1024
    memory_limiter:
      check_interval: 5s
      limit_percentage: 80
      spike_limit_percentage: 25

  exporters:
    prometheusremotewrite:
      endpoint: "http://prometheus:9090/api/v1/write"
    loki:
      endpoint: "http://loki:3100/loki/api/v1/push"

  service:
    pipelines:
      metrics:
        receivers: [otlp]
        processors: [memory_limiter, batch]
        exporters: [prometheusremotewrite]
      logs:
        receivers: [otlp]
        processors: [memory_limiter, batch]
        exporters: [loki]
      traces:
        receivers: [otlp]
        processors: [memory_limiter, batch]
        exporters: [otlp/tempo]
Kubernetes 属性增强
processors:
  k8sattributes:
    auth_type: "serviceAccount"
    passthrough: false
    filter:
      node_from_env_var: ${env:K8S_NODE_NAME}
    extract:
      metadata:
        - k8s.pod.name
        - k8s.namespace.name
        - k8s.deployment.name
        - k8s.node.name

部署模式

模式用例优点缺点
DaemonSet节点级收集覆盖全面,包含主机指标资源使用较高
Deployment集中式网关可扩展,易于管理单点故障
Sidecar每个 Pod 单独收集隔离性好,粒度精细每个 Pod 都有资源开销

常见模式

开发环境
  • 启用 debug exporter,以便查看数据
  • 降低资源限制(250m CPU、512Mi 内存)
  • 添加 spot 实例容忍度以节省成本
生产环境
  • 实施采样(跟踪采样率为 10-50%)
  • 提高批次大小(2048-4096)
  • 启用自动扩缩容和 PodDisruptionBudget
  • 所有端点均使用 TLS

详细参考

如需深入了解,请参阅:

验证命令

# Check collector pods
kubectl get pods -n monitoring -l app.kubernetes.io/name=otel-collector

# View collector logs
kubectl logs -n monitoring -l app.kubernetes.io/name=otel-collector --tail=100

# Test OTLP endpoint
kubectl run test-otlp --image=curlimages/curl:latest --rm -it -- \
  curl -v http://otel-collector.monitoring:4318/v1/traces

# Validate config syntax
otelcol validate --config=config.yaml

Helm Chart 关键值

mode: "daemonset"  # or "deployment"
presets:
  logsCollection:
    enabled: true
  hostMetrics:
    enabled: true
  kubernetesAttributes:
    enabled: true
  kubeletMetrics:
    enabled: true
useGOMEMLIMIT: true
resources:
  limits:
    cpu: 500m
    memory: 1Gi
  requests:
    cpu: 100m
    memory: 256Mi

注意事项

  • Collector 的 tail_sampling 放在管道末尾时,不会释放正在处理的缓冲区——延迟做出的丢弃决策仍会占用内存;负载较高时可能发生 OOM。
  • 自动检测与手动检测可能导致跟踪重复计数——每个服务选择一种策略,或通过采样器显式去重。
  • 上下文传播:HTTP B3 与 W3C traceparent 标头不会自动转换;混合环境会在无提示的情况下中断跟踪连续性。
  • OTel SDK 与 Collector 的协议版本:次要版本不匹配可能导致属性被静默丢弃(尤其是语义约定属性)。
  • 资源检测会添加平台属性(cloud.account.id、host.id),使跟踪数据膨胀;若不用于路由,请禁用。
  • 批处理器与内存限制器的顺序:限制器必须在管道中位于 batch 之前,否则内存压力会导致批次被丢弃,且没有背压机制。

评论

支持 Markdown