在不注入 Sidecar 的情况下向 OpenTelemetry Collector 发送遥测数据

你可以不注入 sidecar,而是将 OpenTelemetry Collector 作为独立部署进行部署。应用程序通过网络向 Collector 服务端点发送遥测数据。这种方式允许一个集中式 Collector 实例接收来自多个应用程序的数据。

前提条件

  • 已安装 Alauda 构建版 OpenTelemetry v2 Operator。
  • 已安装并部署 Alauda 构建版 Jaeger v2。
  • 由具有 cluster-admin 角色的集群管理员建立的有效 ACP CLI (kubectl) 会话。
  • 按照 操作步骤 中的说明启用自动 RBAC 创建。

操作步骤

  1. 通过运行以下命令,使用 deployment 模式部署 OpenTelemetry Collector 实例:

    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1beta1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: observability
    spec:
      mode: deployment
      replicas: 1
      config:
        receivers:
          jaeger:
            protocols:
              grpc: {}
              thrift_binary: {}
              thrift_compact: {}
              thrift_http: {}
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
              http:
                endpoint: 0.0.0.0:4318
          zipkin: {}
        processors:
          batch: {}
          k8sattributes: {}
          memory_limiter:
            check_interval: 1s
            limit_percentage: 80
            spike_limit_percentage: 20
        exporters:
          otlp/traces:
            endpoint: "<jaeger-instance-name>-collector:4317"
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [jaeger, otlp, zipkin]
              processors: [memory_limiter, k8sattributes, batch]
              exporters: [otlp/traces]
    EOF
    1. 命名空间决定了 Collector 资源的创建位置。
    2. exporter 端点必须指向 Jaeger collector 服务。请将 <jaeger-instance-name>-collector:4317 替换为你的 Jaeger 部署的实际服务名称。
  2. 在包含已埋点应用程序的容器中设置环境变量,以便将遥测数据发送到 Collector:

    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
        spec:
          containers:
          - name: app
            image: myapp:latest
            env:
            - name: OTEL_SERVICE_NAME
              value: "my-application"
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "http://otel-collector.observability.svc.cluster.local:4318"
            - name: OTEL_EXPORTER_OTLP_PROTOCOL
              value: "http/protobuf"
            - name: OTEL_TRACES_SAMPLER
              value: "parentbased_traceidratio"
            - name: OTEL_EXPORTER_OTLP_TIMEOUT
              value: "20000"
            - name: OTEL_EXPORTER_OTLP_INSECURE
              value: "true"
    EOF

环境变量

下表描述了用于在应用程序中配置 OpenTelemetry SDK 的环境变量:

环境变量描述默认值
OTEL_SERVICE_NAME设置 service.name 资源属性的值。""
OTEL_EXPORTER_OTLP_ENDPOINTOTLP exporter 的基础端点 URL。http://localhost:4317
OTEL_EXPORTER_OTLP_CERTIFICATE用于验证服务器身份的 TLS 证书文件路径。""
OTEL_TRACES_SAMPLER用于 traces 的 sampler。parentbased_always_on
OTEL_EXPORTER_OTLP_PROTOCOLOTLP exporter 的传输协议。支持的值:grpchttp/protobufgrpc
OTEL_EXPORTER_OTLP_TIMEOUTOTLP exporter 的最大等待时间(毫秒)。10000
OTEL_EXPORTER_OTLP_INSECURE是否为 OTLP exporter 禁用 TLS 验证。false