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

操作步骤

  1. 登录Kubernetes集群。
  2. 安装cert-manager。
    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml
  3. 部署OpenTelemetry Operator。
    1. 下载opentelemetry-operator.yaml文件。
      wget https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
    2. 打开opentelemetry-operator.yaml文件,并替换其中的镜像信息。
      将opentelemetry-operator.yaml文件中ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator替换为sls-registry.cn-beijing.cr.aliyuncs.com/opentelemetry-operator/opentelemetry-operator,如下图所示。采集Ingress链路数据
    3. 部署OpenTelemetry Operator。
      kubectl apply -f opentelemetry-operator.yaml
  4. 部署OpenTelemetry Collector。
    1. 创建一个YAML文件。
      vim collector.yaml
    2. 在YAML文件输入如下脚本,并根据实际情况设置其中的参数。
      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]
                                      
      参数 说明
      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。更多信息,请参见访问密钥
    3. 执行如下命令使配置生效。
      kubectl apply -f collector.yaml
  5. 部署OpenTelemetry Auto-Instrumentation。
    1. 创建一个YAML文件。
      vim instrumentation.yaml
    2. 在YAML文件输入如下脚本。
      apiVersion: opentelemetry.io/v1alpha1
      kind: Instrumentation
      metadata:
        name: my-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
    3. 在容器中传递环境变量,设置服务名称和模块名称。
      OTEL_RESOURCE_ATTRIBUTES=service.name=your_service,service.namespace=your_service_namespace
      参数 说明
      service.name 服务名称,请根据实际值替换your_service
      service.namespace 模块名称,请根据实际值替换your_service_namespace
    4. 执行如下命令使配置生效。
      kubectl apply -f instrumentation.yaml
  6. 在配置文件中添加自动注入探针配置。

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

    探针
    • Java
      instrumentation.opentelemetry.io/inject-java: 'true'
    • Python
      instrumentation.opentelemetry.io/inject-python: "true"
    • Node.js
      instrumentation.opentelemetry.io/inject-nodejs: "true"