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

您可以将 OpenTelemetry Collector 部署为独立部署,而不是注入 Sidecar。应用通过网络将遥测数据发送到 Collector 服务端点。此方法允许集中式 Collector 实例接收来自多个应用的数据。

前提条件

  • 已安装 Alauda Container Platform 应用可观测性(之前称为 Alauda Build of OpenTelemetry v2)operator。
  • 已安装并部署 Alauda Container Platform 分布式追踪(之前称为 Alauda Build of Jaeger v2)。
  • 集群管理员已建立活动的 ACP CLI(kubectl)会话,并具有 cluster-admin 角色。
  • 按照操作步骤中的说明启用 Automatic 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: {}
          k8s_attributes: {}
          memory_limiter:
            check_interval: 1s
            limit_percentage: 80
            spike_limit_percentage: 20
        exporters:
          otlp_grpc/traces:
            endpoint: "<jaeger-instance-name>-collector:4317"
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [jaeger, otlp, zipkin]
              processors: [memory_limiter, k8s_attributes, batch]
              exporters: [otlp_grpc/traces]
    EOF
    1. 命名空间决定创建 Collector 资源的位置。
    2. OTLP gRPC exporter 的名称为 otlp_grpc。旧名称 otlp 仍然有效,但已弃用。请注意,OTLP receiver 仍使用名称 otlp;请参阅组件类型名称。
    3. 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用于追踪的采样器。parentbased_always_on
OTEL_EXPORTER_OTLP_PROTOCOLOTLP exporter 的传输协议。支持的值:grpc、http/protobuf。grpc
OTEL_EXPORTER_OTLP_TIMEOUTOTLP exporter 的最长等待时间(以毫秒为单位)。10000
OTEL_EXPORTER_OTLP_INSECURE是否禁用 OTLP exporter 的 TLS 验证。false