Managed Service for OpenTelemetry支援接收應用的鏈路追蹤、指標和日誌資料,提供直接上報和通過 OpenTelemetry Collector 轉寄兩種上報方式。
前提條件
如您需要上報 Logs 資料,請確保Log Service已開通,Project 和 Logstore 已建立完成,並建立用於日誌資料上報的 AK 和 SK。
擷取存取點和鑒權資訊。以下表格給出了本文涉及到的所有組態變數,請您根據使用情境(上報資料類型和上報方式),提前準備好所需的存取點和鑒權資訊。更多資訊,請參見準備工作。
使用情境
變數名
說明
樣本
上報 Traces 與 Metrics 資料
gRPC 方式上報
${GRPC_ENDPOINT}
Managed Service for OpenTelemetry的 gRPC 上報地址,支援上報 Traces 與 Metrics 資料。
若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網地址,否則選擇公網地址。
內網地址:http://tracing-analysis-dc-hz-internal.aliyuncs.com:8090
公網地址:http://tracing-analysis-dc-hz.aliyuncs.com:8090
${GRPC_AUTHENTICATION_TOKEN}
使用 gRPC 上報至Managed Service for OpenTelemetry時所需的鑒權 Token。擷取方式,請參見準備工作。
abcdef1234@abcdef****56789_abcdef1234@abcdef****56789
HTTP 方式上報
${HTTP_TRACES_ENDPOINT}
Managed Service for OpenTelemetry的 HTTP 上報地址,支援上報 Traces 資料。
若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網地址,否則選擇公網地址。
內網地址:http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_***_***/api/otlp/traces
公網地址: http://tracing-analysis-dc-hz.aliyuncs.com/adapt_***_***/api/otlp/traces
${HTTP_METRICS_ENDPOINT}
Managed Service for OpenTelemetry的 HTTP 上報地址,支援上報 Metrics 資料。
若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網地址,否則選擇公網地址。
內網地址:http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_***_***/api/otlp/metrics
公網地址: http://tracing-analysis-dc-hz.aliyuncs.com/adapt_***_***/api/otlp/metrics
上報 Logs 資料
${SLS_ENDPOINT}
Log ServiceProject的接入地址,僅上報 Logs 資料時需要填寫。擷取接入地址的操作步驟,請參見服務入口。
test-project.cn-hangzhou.log.aliyuncs.com
${SLS_PROJECT}
Log ServiceProject名稱。僅上報 Logs 資料時需要填寫。
test-project
${SLS_LOGSTORE}
Log Service Logstore 名稱。僅上報 Logs 資料時需要填寫。
test-logstore
${ALIYUN_ACCESS_KEY_ID}
阿里雲帳號AccessKey ID。僅上報 Logs 資料時需要填寫。
建議您使用只具備Log ServiceProject寫入許可權的RAM使用者的AccessKey(包括AccessKey ID和AccessKey Secret)。授予RAM使用者向指定Project寫入資料許可權的具體操作,請參見RAM自訂授權樣本。如何擷取AccessKey的具體操作,請參見存取金鑰。
無
${ALIYUN_ACCESS_KEY_SECRET}
阿里雲帳號AccessKey Secret。僅上報 Logs 資料時需要填寫。
建議您使用只具備Log ServiceProject寫入許可權的RAM使用者的AccessKey。
無
直接上報
通過配置 OpenTelemetry Agent 或 SDK 的上報存取點資訊和鑒權資訊,您可以將 OpenTelemetry 採集到的 Traces 與 Metrics 資料直接發送到Managed Service for OpenTelemetry服務端。
方案一:在代碼中配置上報資訊(以 Java 為例)
以下 Java 程式碼範例展示如何配置Managed Service for OpenTelemetry的存取點資訊,支援通過 HTTP 或 gRPC 協議上報。請訪問接入中心或通過OpenTelemetry上報Java應用資料查看完整接入代碼和 Demo。
HTTP上報
...
// 上報 Traces 資料
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
.setEndpoint("${HTTP_TRACES_ENDPOINT}") // 設定HTTP Traces存取點,將Traces資料上報至可觀測鏈路OpenTelemetry版
.build()).build())
.build();
// 上報 Metrics 資料
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
.registerMetricReader(PeriodicMetricReader.builder(OtlpHttpMetricExporter.builder()
.setEndpoint("${HTTP_METRICS_ENDPOINT}") // 設定HTTP Metrics存取點,將Metrics資料上報至可觀測鏈路OpenTelemetry版
.build()).build())
.build();
...gRPC上報
...
// 上報 Traces 資料
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder()
.setEndpoint("${GRPC_AUTHENTICATION_TOKEN}") // 設定gRPC存取點,將Traces資料上報至可觀測鏈路OpenTelemetry版
.addHeader("Authentication","${GRPC_AUTHENTICATION_TOKEN}") // 設定可觀測鏈路OpenTelemetry版的鑒權Token資訊
.build()).build())
.setResource(resource)
.build();
// 上報 Metrics 資料
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
.registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder()
.setEndpoint("${GRPC_METRICS_ENDPOINT}") // 設定gRPC存取點,將Traces資料上報至可觀測鏈路OpenTelemetry版
.addHeader("Authentication", "${GRPC_AUTHENTICATION_TOKEN}") // 設定可觀測鏈路OpenTelemetry版的鑒權Token資訊
.build()).build())
.setResource(resource)
.build();
...方案二:通過環境變數方式設定上報資訊
OpenTelemetry 還支援通過環境變數方式配置資料上報點。以下表格為上報至Managed Service for OpenTelemetry時所需環境變數,更多 OpenTelemetry OTLP 環境變數,請參考 OTLP Exporter Configuration。
環境變數名 | 說明 | 樣本 |
OTEL_SERVICE_NAME | 應用程式名稱 | export OTEL_SERVICE_NAME=opentelemetry-demo-service |
OTEL_EXPORTER_OTLP_PROTOCOL | 上報協議。 Traces 支援 grpc、http/protobuf、http/json。 Metrics 支援 grpc、http/protobuf。 當您選擇 gRPC 上報點時,請設定為 | export OTEL_EXPORTER_OTLP_PROTOCOL=grpc |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | Traces 上報點。支援 HTTP 和 gRPC 上報點。 上報點為前提條件中擷取到的 ${GRPC_ENDPOINT} 或 ${HTTP_TRACES_ENDPOINT}。 |
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_***_***/api/otlp/traces
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://tracing-analysis-dc-hz-internal.aliyuncs.com:8090 |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | Metrics 上報點,支援 HTTP 和 gRPC 上報點。 上報點為前提條件中擷取到的 ${GRPC_ENDPOINT} 或 ${HTTP_METRICS_ENDPOINT}。 |
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_***_***/api/otlp/metrics
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://tracing-analysis-dc-hz-internal.aliyuncs.com:8090 |
OTEL_EXPORTER_OTLP_HEADERS | gRPC 上報時的要求標頭資訊,主要用於身分識別驗證。 填寫格式為Authentication=${GRPC_AUTHENTICATION_TOKEN},${GRPC_AUTHENTICATION_TOKEN}為前提條件中擷取到的鑒權 Token。 | export OTEL_EXPORTER_OTLP_HEADERS=Authentication=abcdef1234@abcdef****56789_abcdef1234@abcdef****56789 |
通過 OpenTelemetry Collector 轉寄
版本說明
OpenTelemetry Collector(核心版):支援上報 Traces 和 Metrics 資料
OpenTelemetry Collector Contrib(擴充版):支援上報 Traces、Metrics 和 Logs 資料。
部署方案一: ACK 應用市場一鍵部署至 ACK 叢集
ACK 應用市場當前僅支援 OpenTelemetry Collector 核心版,未提供 Contrib 版本。如果您有採集 Logs 的需求,請參考其他方式部署。
1、部署 Collector
登入Container Service管理主控台,在左側導覽列選擇。
在應用市場中搜尋並單擊
opentelemetry-collector,單擊頁面右上方一鍵部署。在建立頁面選擇需要部署
opentelemetry-collector的叢集和命名空間(預設為 otel-collector),然後單擊下一步。在參數配置頁面,設定 mode 參數為
deployment或daemonset,然後單擊確定。
2、配置 Collector 參數
在叢集列表頁面單擊目的地組群。
在左側導覽列選擇。
選擇 opentelemetry-collector 所在的命名空間(預設為 otel-collector)。
在配置項頁面找到opentelemetry-collector,然後單擊YAML 編輯。
參考以下 YAML 中的內容,配置 exporters、processors、receivers 和 service 四部分內容,然後單擊確定。
opentelemetry-collector 配置項(gRPC上報)
exporters: otlp: endpoint: "${GRPC_ENDPOINT}" headers: Authentication: "${GRPC_AUTHENTICATION_TOKEN}" tls: insecure: true processors: batch: {} memory_limiter: check_interval: 5s # 檢查記憶體使用量的時間間隔,請按需更改 limit_percentage: 80 # 最大記憶體使用量百分比,請按需更改 spike_limit_percentage: 25 # 允許突發使用的額外記憶體百分比,請按需更改 receivers: otlp: protocols: grpc: endpoint: ${env:MY_POD_IP}:4317 http: endpoint: ${env:MY_POD_IP}:4318 service: pipelines: traces: exporters: [otlp] processors: [memory_limiter, batch] receivers: [otlp] metrics: exporters: [otlp] processors: [memory_limiter, batch] receivers: [otlp]opentelemetry-collector 配置項(HTTP上報)
exporters: otlphttp: traces_endpoint: "${HTTP_TRACES_ENDPOINT}" metrics_endpoint: "${HTTP_METRICS_ENDPOINT}" tls: insecure: true timeout: 5s # 逾時時間,預設5s,請按需更改 processors: batch: {} memory_limiter: check_interval: 5s # 檢查記憶體使用量的時間間隔,請按需更改 limit_percentage: 80 # 最大記憶體使用量百分比,請按需更改 spike_limit_percentage: 25 # 允許突發使用的額外記憶體百分比,請按需更改 receivers: otlp: protocols: grpc: endpoint: ${env:MY_POD_IP}:4317 http: endpoint: ${env:MY_POD_IP}:4318 service: pipelines: traces: exporters: [otlphttp] processors: [memory_limiter, batch] receivers: [otlp] metrics: exporters: [otlphttp] processors: [memory_limiter, batch] receivers: [otlp]配置完成後,手動重啟 opentelemetry-collector 。
部署方案二:Docker 部署
1、拉取鏡像
opentelemetry-collector
如要指定鏡像版本,請訪問 https://hub.docker.com/r/otel/opentelemetry-collector/tags。
docker pull otel/opentelemetry-collector:latestopentelemetry-collector-contrib
如要指定鏡像版本,請訪問 https://hub.docker.com/r/otel/opentelemetry-collector-contrib/tags。
docker pull otel/opentelemetry-collector-contrib:latest2、準備設定檔
建立 config.yaml 檔案並配置相關參數。
opentelemetry-collector 配置項(gRPC上報)
# config.yaml
exporters:
otlp:
endpoint: "${GRPC_ENDPOINT}"
headers:
Authentication: "${GRPC_AUTHENTICATION_TOKEN}"
tls:
insecure: true
processors:
batch: {}
memory_limiter:
check_interval: 5s # 檢查記憶體使用量的時間間隔,請按需更改
limit_percentage: 80 # 最大記憶體使用量百分比,請按需更改
spike_limit_percentage: 25 # 允許突發使用的額外記憶體百分比,請按需更改
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # 預設值為 localhost:4317,請按需修改
http:
endpoint: 0.0.0.0:4318 # 預設值為 localhost:4318,請按需修改
service:
pipelines:
traces:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]opentelemetry-collector 配置項(HTTP上報)
# config.yaml
exporters:
otlphttp:
traces_endpoint: "${HTTP_TRACES_ENDPOINT}"
metrics_endpoint: "${HTTP_METRICS_ENDPOINT}"
tls:
insecure: true
timeout: 5s # 逾時時間,預設5s,請按需更改
processors:
batch: {}
memory_limiter:
check_interval: 5s # 檢查記憶體使用量的時間間隔,請按需更改
limit_percentage: 80 # 最大記憶體使用量百分比,請按需更改
spike_limit_percentage: 25 # 允許突發使用的額外記憶體百分比,請按需更改
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # 預設值為 localhost:4317,請按需修改
http:
endpoint: 0.0.0.0:4318 # 預設值為 localhost:4318,請按需修改
service:
pipelines:
traces:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]opentelemetry-collector-contrib 配置項(gRPC上報)
# config.yaml
exporters:
otlp:
endpoint: "${GRPC_ENDPOINT}"
headers:
Authentication: "${GRPC_AUTHENTICATION_TOKEN}"
tls:
insecure: true
# 日誌匯出器配置(可選)
alibabacloud_logservice/logs:
endpoint: "${SLS_ENDPOINT}"
project: "${SLS_PROJECT}"
logstore: "${SLS_LOGSTORE}"
access_key_id: "${ALIYUN_ACCESS_KEY_ID}"
access_key_secret: "${ALIYUN_ACCESS_KEY_SECRET}"
processors:
batch: {}
memory_limiter:
check_interval: 5s # 檢查記憶體使用量的時間間隔,請按需更改
limit_percentage: 80 # 最大記憶體使用量百分比,請按需更改
spike_limit_percentage: 25 # 允許突發使用的額外記憶體百分比,請按需更改
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # 預設值為 localhost:4317,請按需修改
http:
endpoint: 0.0.0.0:4318 # 預設值為 localhost:4318,請按需修改
service:
pipelines:
traces:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
# 日誌資料處理流程(可選)
logs:
exporters: [alibabacloud_logservice/logs]
processors: [memory_limiter, batch]
receivers: [otlp]opentelemetry-collector-contrib 配置項(HTTP上報)
# config.yaml
exporters:
otlphttp:
traces_endpoint: "${HTTP_TRACES_ENDPOINT}"
metrics_endpoint: "${HTTP_METRICS_ENDPOINT}"
tls:
insecure: true
timeout: 5s # 逾時時間,預設5s,請按需更改
# 日誌匯出器配置(可選)
alibabacloud_logservice/logs:
endpoint: "${SLS_ENDPOINT}"
project: "${SLS_PROJECT}"
logstore: "${SLS_LOGSTORE}"
access_key_id: "${ALIYUN_ACCESS_KEY_ID}"
access_key_secret: "${ALIYUN_ACCESS_KEY_SECRET}"
processors:
batch: {}
memory_limiter:
check_interval: 5s # 檢查記憶體使用量的時間間隔,請按需更改
limit_percentage: 80 # 最大記憶體使用量百分比,請按需更改
spike_limit_percentage: 25 # 允許突發使用的額外記憶體百分比,請按需更改
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # 預設值為 localhost:4317,請按需修改
http:
endpoint: 0.0.0.0:4318 # 預設值為 localhost:4318,請按需修改
service:
pipelines:
traces:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
# 日誌資料處理流程(可選)
logs:
exporters: [alibabacloud_logservice/logs]
processors: [memory_limiter, batch]
receivers: [otlp]3、掛載自訂設定檔並運行
opentelemetry-collector
docker run -v $(pwd)/config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector:latestopentelemetry-collector-contrib
docker run -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:latest