OpenTelemetry 簡介
如果你在做系統運維或開發,建設可觀測性必然是近年來一個少不了的課題,同時相信你對 OpenTelemetry 也一定不陌生。OpenTelemetry 提供了一個統一、開放且不受特定廠商限制的標準和工具集,使得我們可以一次性集成 OTel SDK,全面採集應用的指標、日誌和鏈路追蹤數據,並自由地將數據發送到任何支持 OTel 協議的後端。
觀測雲
觀測雲是一個統一實時監測平台,它提供全面的系統可觀測性解決方案,可以幫助我們快速實現對雲平台、雲原生、應用及業務的監控需求。觀測雲的核心功能包括:基礎設施監測,日誌採集和分析,用户訪問監測(RUM),應用性能監測(APM),服務可用性監測(撥測),安全檢測(SIEM),智能監控等等。
更多信息可以訪問觀測雲官網:https://www.guance.com
DataKit 統一數據採集器
DataKit 是觀測雲的統一數據採集器,能夠全面採集各類可觀測數據。通過豐富的插件生態和簡單的配置,DataKit 可以靈活部署在各種操作系統和容器環境中,高效地將數據發送至觀測雲平台,從而快速構建一個統一、完整的可觀測性體系。
DataKit 採用了插件化的設計,內置了大量現成的採集插件,包括但不限於:
- 主流的雲平台,操作系統,容器平台(全面採集集羣、節點、Pod、容器的性能指標和日誌);
- 主流的數據庫(如 MySQL、PostgreSQL)、消息隊列(如 Kafka、RabbitMQ)、Web服務器(如 Nginx、Apache)等;
- 同時也能夠接收第三方開源工具的數據,包括 StatsD、Telegraf、Prometheus 等協議,也包括 OpenTelemetry。
DataKit 接收 OpenTelemetry Collector 數據
DataKit 引進了 OpenTelemetry 設計理念,兼容 OTLP 協議,同時,也支持接收 OpenTelemetry Collector 推送的 APM 鏈路調用數據。在有些場景下,例如你已經通過 OpenTelemetry Collector 實現了尾部採樣,這時候就可以將數據發送到 DataKit,統一在觀測雲中進行查看和分析。
通過 DataKit 接收 OpenTelemetry Collector 鏈路數據的主要流程如下:
- 前提條件:應用服務已經部署,並已配置 OpenTelemetry Exporter 和 Collector,從而將應用服務的鏈路調用即 APM 數據,通過 OTLP gRPC 或 HTTP 協議,上報到 OpenTelemetry Collector;
- 部署 DataKit,開啓 OpenTelemetry 採集器,使用 4319 端口接收 OpenTelemetry Collector 的數據;
- 配置 OpenTelemetry Collector 的 Exporter config 文件,將鏈路數據發送到 DataKit。
主要流程如下圖所示:
部署 DataKit
以 K8s 中部署為例,可以參考在線文檔:https://docs.guance.com/datakit/datakit-daemonset-deploy/
開啓 OpenTelemetry 採集器:
- 在
datakit.yaml的DaemonSet下面新增volumeMounts
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: daemonset-datakit
name: datakit
namespace: datakit
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
app: daemonset-datakit
template:
metadata:
labels:
app: daemonset-datakit
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
...
volumeMounts:
- mountPath: /usr/local/datakit/conf.d/opentelemetry/opentelemetry.conf
name: datakit-conf
subPath: opentelemetry.conf
....
- 在
datakit.yaml的ConfigMapdata 下新增opentelemetry.conf
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
opentelemetry.conf: |-
[[inputs.opentelemetry]]
[inputs.opentelemetry.grpc]
trace_enable = true
metric_enable = true
addr = "0.0.0.0:4319"
[inputs.opentelemetry.http]
enable = false
http_status_ok = 200
- 重啓 DataKit
更多詳細信息,可以參考:https://docs.guance.com/integrations/opentelemetry/
部署和配置 Opentelemetry Collector
1. 安裝 Collector
可參考 OpenTelemetry 官方文檔:https://opentelemetry.io/docs/collector/installation/
2. config.yaml 配置
/etc/otelcol/config.yaml 配置文件詳情:
Opentelemetry Collector 配置文件定義了 Receivers 的來源、Processors 併發數據配置、以及 Exporters 導出的端點。此處主要關注:
- Receivers:定義接收來自應用服務的 Opentelemetry gRPC/HTTP 服務監聽
- Exporters:定義了數據轉發到標準 otlp 的後端,即 DataKit
config.yaml 參考示例:
receivers:
otlp:
protocols: # 接收 Java 代理數據的協議和端口,按實際需要配置
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch: # 批處理提高性能
timeout: 1s
send_batch_size: 1000
resource: # 添加額外標籤的處理器
attributes:
- key: environment
value: production
action: insert
exporters:
otlp:
endpoint: "127.0.0.1:4319" # datakit 暴露的 otel-endpoint,端口為 4319
tls:
insecure: true
compression: none # 不開啓gzip
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, resource]
exporters: [otlp]
重載 systemd 並啓動 otelcol 服務:
systemctl daemon-reload
systemctl enable otelcol
systemctl restart otelcol
更多詳細信息,可以參考:https://docs.guance.com/best-practices/cloud-native/opentelem...
3. 安裝驗證
驗證 Collector 是否正常運行:
systemctl status otelcol # 檢查服務狀態
journalctl -u otelcol -f # 查看日誌
數據正常上報後,在觀測雲中可以查看應用性能監測的鏈路數據:
總結
通過 DataKit 接收 OpenTelemetry Collector 的應用鏈路數據,可以幫助我們快速實現一個靈活的可觀測性數據管理體系。我們既可以利用 OpenTelemetry 的標準化能力,統一採集各種可觀測數據,又可以利用 DataKit 強大的數據處理和集成功能,將這些數據統一傳輸到觀測雲平台,充分利用觀測雲平台提供的全面分析和可視化能力,並能協同其他維度的可觀測數據進行統一查詢分析。