使用 Sidecar 注入向 OpenTelemetry Collector 发送遥测数据

您可以配置 Alauda build of OpenTelemetry v2,将 OpenTelemetry Collector 作为 sidecar 容器注入应用 Pod。Sidecar Collector 与应用运行在同一个 Pod 中,使应用无需复杂的网络配置即可通过 localhost 向 Collector 发送遥测数据。

NOTE

在 sidecar 模式下,Operator 不会为 Collector 创建 Service、Ingress、NetworkPolicy 或 HorizontalPodAutoscaler 资源,因为在该模式下,Operator 不管理 Pod 的生命周期。应用通过 localhost 访问 sidecar;如果需要从 Pod 外部访问其端口,请通过应用自身的 Service 暴露这些端口。

前提条件

  • 已安装 Alauda Container Platform Application Observability(之前称为 Alauda Build of OpenTelemetry v2)Operator。
  • 已安装并部署 Alauda Container Platform Distributed Tracing(之前称为 Alauda Build of Jaeger v2)。
  • 由具有 cluster-admin 角色的集群管理员建立的有效 ACP CLI (kubectl) 会话。

操作步骤

  1. 运行以下命令,将 OpenTelemetry Collector 部署为 sidecar:

    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1beta1
    kind: OpenTelemetryCollector
    metadata:
      name: otel-sidecar
      namespace: observability
    spec:
      mode: sidecar
      image: "<image-registry>/asm/opentelemetry-collector:<image-tag>"
      config:
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint:
              http:
                endpoint:
        processors:
          batch: {}
          memory_limiter:
            check_interval: 1s
            limit_percentage: 80
            spike_limit_percentage: 20
        exporters:
          otlp_grpc:
            endpoint: "jaeger-<example>-collector:4317"
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [otlp]
              processors: [memory_limiter, batch]
              exporters: [otlp_grpc]
    EOF
    1. 将 <image-registry>/asm/opentelemetry-collector:<image-tag> 替换为 sidecar Collector 的实际镜像仓库和标签。
    2. OTLP gRPC exporter 的名称为 otlp_grpc。旧名称 otlp 仍可使用,但已弃用。请注意,OTLP receiver 仍使用名称 otlp;请参阅组件类型名称。
    3. 将 jaeger-<example>-collector 替换为 Alauda Build of Jaeger v2 Collector 的实际服务名称。其格式通常为 <instance-name>-collector。
  2. 添加注解 sidecar.opentelemetry.io/inject: "true" 并使用已创建的 ServiceAccount,创建一个使用 sidecar 注入的 Deployment:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
      namespace: observability
    spec:
      selector:
        matchLabels:
          app: my-app
      replicas: 1
      template:
        metadata:
          labels:
            app: my-app
          annotations:
            sidecar.opentelemetry.io/inject: "true"
        spec:
          containers:
          - name: app
            image: myapp:latest
            ports:
            - containerPort: 8080
    EOF