本文介绍如何在Kubernetes集群中自动安装OpenTelemetry探针,实现Trace数据上传到日志服务。
操作步骤
- 登录Kubernetes集群。
- 执行如下命令,安装cert-manager。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
- 执行如下命令,安装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
。
- 将镜像地址
- 执行如下命令,安装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
access_key_id 阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥。 access_key_secret 阿里云访问密钥AccessKey Secret。更多信息,请参见访问密钥。 - 执行如下命令,安装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
,可实现镜像加速。
- 针对服务名、服务空间等参数,您可以通过Auto-Instrumentation环境变量进行传递。存在多个应用时,建议创建多个Auto-Instrumentation以区分服务名。
- 在配置文件中添加自动注入探针配置。
根据实际情况,在具体应用的配置文件中添加脚本。目前只支持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"
- Java