Kubernetes 部署 OpenTelemetry Collector到后端示例
前置条件
- 拥有一个正常运行的Kubernetes集群
- 服务端已安装Prometheus, 并与Kubernetes集群正常通信
- 服务端已安装Jaeger, 并与Kubernetes集群正常通信
- 客户端go 版本>=1.13
说明
- ct: 即
kubectl
的简写形式, 个人爱好, 图片里使用ct
简写代替了kubectl
架构
graph LR
App --> OpenTelemetrySDK
OpenTelemetrySDK -->|telemeasuring-data| Exporter
Exporter --> OpenTelemetryCollector
OpenTelemetryCollector --> Jaeger
OpenTelemetryCollector --> Prometheus
OpenTelemetry服务端环境搭建
OpenTelemetry服务端分为Daemonset和Sidecar模式
Daemonset
Daemonset是在集群中的每一个节点运行一个OpenTelemetry Collector Pod,遥测数据需要导出到worknode的OpenTelemetry Collector Pod上, 通常需要一个网关Collector
graph TB
subgraph node1
Application1-1 --> OpenTelemetryCollectorPod1
Application1-1 --> OpenTelemetryCollectorPod1
end
subgraph node2
Application2-1 --> OpenTelemetryCollectorPod2
Application2-2 --> OpenTelemetryCollectorPod2
end
subgraph node3
Application3-1 --> OpenTelemetryCollectorPod3
Application3-2 --> OpenTelemetryCollectorPod3
end
Sidecar
Sidecar 是一个pod运行一个OpenTelemetryCollector实例
graph TB
subgraph pod1
Application1 --> OpenTelemetryCollector1
end
subgraph pod2
Application2 --> OpenTelemetryCollector2
end
subgraph pod3
Application3 --> OpenTelemetryCollector3
end
它们会去安装cert-manager和创建CRD,用于管理OpenTelemetry的和instrumentations.opentelemetry.io自动埋点
```shell
ct get crd | grep openTelemetry
![[images/Pasted image 20231114103025.png]]
OpenTelemetry Operator Helm Chart
如果你已经安装了cert-manager, 则可以跳过安装cert-manager的阶段, 使用 --set admissionWebhooks.certManager.enable=false
Helm 图表在 Kubernetes 集群中安装 OpenTelemetry Operator。OpenTelemetry Operator 是 Kubernetes Operator 的实现。此时,它将 OpenTelemetry Collector 作为唯一的托管组件
希望 helm 创建自动生成的自签名证书,请确保在安装图表时设置适当的值:
helm install --set admissionWebhooks.certManager.enabled=false --set admissionWebhooks.certManager.autoGenerateCert=true \
opentelemetry-operator open-telemetry/opentelemetry-operator
Yaml创建OpenTelemetry Collector(otelcol)实例
创建一个名为simplest
的 OpenTelemetry Collector 实例,公开一个jaeger-grpc
端口以使用检测应用程序中的跨度,并通过debug
导出这些跨度,从而将跨度写入接收跨度的 OpenTelemetry Collector 实例的控制台 (stdout
)
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: simplest
spec:
config: |
receivers:
otlp:
protocols:
grpc:
http:
processors:
memory_limiter:
check_interval: 1s
limit_percentage: 75
spike_limit_percentage: 15
batch:
send_batch_size: 10000
timeout: 10s
exporters:
debug:
service:
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [debug]
EOF
在集群查询OpenTelemetry Collector的端口, 这里为30080
![[images/Pasted image 20231113172147.png]]