本文介绍如何在Kubernetes集群中自动安装OpenTelemetry探针,实现Trace数据上传到日志服务。

操作步骤

  1. 登录Kubernetes集群。
  2. 执行如下命令,安装cert-manager。
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
  3. 执行如下命令,安装OpenTelemetry Operator。
    kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

    opentelemetry-operator.yaml配置文件中设置的是ghcr.com镜像地址。在中国境内访问时,会出现访问速度慢或报错问题。您可以修改opentelemetry-operator.yaml配置文件中的镜像地址,实现镜像加速。例如,使用日志服务提供的加速镜像,如下所示。

    • 将镜像地址ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator替换为sls-registry.cn-beijing.cr.aliyuncs.com/opentelemetry-operator/opentelemetry-operator
    • 将镜像地址gcr.io/kubebuilder/kube-rbac-proxy替换为sls-registry.cn-beijing.cr.aliyuncs.com/opentelemetry-operator/kube-rbac-proxy
  4. 执行如下命令,安装OpenTelemetry Collector。
    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
    spec:
      image: otel/opentelemetry-collector-contrib:latest
      config: |
        receivers:
          otlp:
            protocols:
              grpc:
              http:
        exporters:
          alibabacloud_logservice/logs:
            endpoint: "cn-hangzhou.log.aliyuncs.com"
            project: "demo-project"
            logstore: "store-logs"
            access_key_id: "access-key-id"
            access_key_secret: "access-key-secret"
          alibabacloud_logservice/metrics:
            endpoint: "cn-hangzhou.log.aliyuncs.com"
            project: "demo-project"
            logstore: "store-traces-metrics"
            access_key_id: "access-key-id"
            access_key_secret: "access-key-secret"
          alibabacloud_logservice/traces:
            endpoint: "cn-hangzhou.log.aliyuncs.com"
            project: "demo-project"
            logstore: "store-traces"
            access_key_id: "access-key-id"
            access_key_secret: "access-key-secret"
    
        service:
          pipelines:
            traces:
              receivers: [otlp]
              exporters: [alibabacloud_logservice/traces]
            logs:
              receivers: [otlp]
              exporters: [alibabacloud_logservice/logs]
            metrics:
              receivers: [otlp]
              exporters: [alibabacloud_logservice/metrics]
    EOF

    命令中的重要参数说明如下表所示,请根据实际情况修改。

    参数 说明
    endpoint 日志服务的服务入口,例如cn-hangzhou.log.aliyuncs.com。更多信息,请参见服务入口
    project 设置为您在创建Trace实例时所选择的Project。更多信息,请参见创建Trace实例
    logstore 创建Trace实例后,日志服务自动在您所选择的Project下生成3个Logstore,分别用于存储Logs、Metrics和Traces数据。请根据实际情况替换Logstore名称。
    • trace_instance_id-logs
    • trace_instance_id-traces-metrics
    • trace_instance_id-traces
    其中trace_instance_id为Trace实例ID,请根据实际情况替换。更多信息,请参见创建Trace实例
    access_key_id 阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥
    access_key_secret 阿里云访问密钥AccessKey Secret。更多信息,请参见访问密钥
  5. 执行如下命令,安装OpenTelemetry Auto-Instrumentation。
    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1alpha1
    kind: Instrumentation
    metadata:
      name: my-java-instrumentation
    spec:
      exporter:
        endpoint: http://otel-collector:4317
      propagators:
        - tracecontext
        - baggage
        - b3
      java:
        image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest
      nodejs:
        image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:latest
      python:
        image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:latest
      dotnet:
        image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:latest
      env:
        - name: OTEL_RESOURCE_ATTRIBUTES
          value: service.name=your_service,service.namespace=your_service_namespace
    EOF
    • 针对服务名、服务空间等参数,您可以通过Auto-Instrumentation环境变量进行传递。存在多个应用时,建议创建多个Auto-Instrumentation以区分服务名。
      说明 多个Auto-Instrumentation中的metadata.name参数不可重复。
    • 针对不同开发语言的应用(java、nodejs、python、dotnet等) ,请根据实际部署的情况,配置对应语言的Auto-Instrumentation。
    • 将ghcr镜像地址替换为日志服务提供的镜像地址,例如将ghcr.io/open-telemetry/openteleme try-operator替换为sls-registry.cn-beijing.cr.aliyuncs.com/opentelemetry -operator,可实现镜像加速。
  6. 在配置文件中添加自动注入探针配置。

    根据实际情况,在具体应用的配置文件中添加脚本。目前只支持Python、Node.js、Java和dotNET应用。

    注意 my-java-instrumentation是安装Auto-Instrumentation时,设置的Instrumentation名称,即name参数的值,请根据实际值替换。
    探针
    • Java
      instrumentation.opentelemetry.io/inject-java: "my-java-instrumentation"
      instrumentation.opentelemetry.io/inject-sdk: "my-java-instrumentation"
    • Python
      instrumentation.opentelemetry.io/inject-python: "my-java-instrumentation"
      instrumentation.opentelemetry.io/inject-sdk: "my-java-instrumentation"
    • Node.js
      instrumentation.opentelemetry.io/inject-nodejs: "my-java-instrumentation"
      instrumentation.opentelemetry.io/inject-sdk: "my-java-instrumentation"
    • dotNET
      instrumentation.opentelemetry.io/inject-dotnet: "my-java-instrumentation"
      instrumentation.opentelemetry.io/inject-sdk: "my-java-instrumentation"