当前位置: 首页 > news >正文

入门OpenTelemetry——部署OpenTelemetry

OpenTelemetry 部署模式

OpenTelemetry Collector 按部署方式分为 Agent 和Gateway 模式。

Agent 模式

在 Agent 模式下,OpenTelemetry 检测的应用程序将数据发送到与应用程序一起驻留的(收集器)代理。然后,该代理程序将接管并处理所有来自应用程序的追踪数据。

收集器可以通过 sidecar 方式部署为代理,sidecar 可以配置为直接将数据发送到存储后端。

Gateway 模式

Gateway 模式则是将数据发送到另一个 OpenTelemetry 收集器,然后从(中心)收集器进一步将数据发送到存储后端。在这种配置中,我们有一个中心的 OpenTelemetry 收集器,它使用 deployment/statefulset/daemonset 模式部署,具有许多优势,如自动扩展。

发送遥测数据最佳实践是将数据发送到OpenTelemetry Collector而不是直接发送到后端。Collector可以帮助简化密钥管理,将数据导出与应用程序解耦,并允许您在遥测数据中添加其他数据。

部署 OpenTelemetry

建议使用 OpenTelemetry Operator 来部署,因为它可以帮助我们轻松部署和管理 OpenTelemetry 收集器,还可以自动检测应用程序。具体可参考文档https://opentelemetry.io/docs/platforms/kubernetes/operator/

部署cert-manager

因为 Operator 使用了 Admission Webhook 通过 HTTP 回调机制对资源进行校验/修改。Kubernetes 要求 Webhook 服务必须使用 TLS,因此 Operator 需要为其 webhook server 签发证书,所以需要先安装cert-manager。

# wget https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
# kubectl apply -f cert-manager.yaml
# kubectl get pod -n cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5577849d6c-kwg7f              1/1     Running   0          3m18s
cert-manager-cainjector-5755f77bbb-knlm2   1/1     Running   0          3m18s
cert-manager-webhook-b78d65b96-vpvrn       1/1     Running   0          3m18s

部署Operator

在 Kubernetes 上使用 OpenTelemetry,主要就是部署 OpenTelemetry 收集器。

# wget https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
# kubectl apply -f opentelemetry-operator.yaml
# kubectl get pod -n opentelemetry-operator-system 
NAME                                                         READY   STATUS    RESTARTS   AGE
opentelemetry-operator-controller-manager-6d94c5db75-cz957   2/2     Running   0          74s
# kubectl get crd |grep opentelemetry
instrumentations.opentelemetry.io           2025-04-21T09:48:53Z
opampbridges.opentelemetry.io               2025-04-21T09:48:54Z
opentelemetrycollectors.opentelemetry.io    2025-04-21T09:48:54Z
targetallocators.opentelemetry.io           2025-04-21T09:48:54Z

部署Collector(中心)

接下来我们部署一个精简版的 OpenTelemetry Collector,用于接收 OTLP 格式的 trace 数据,通过 gRPC 或 HTTP 协议接入,经过内存控制与批处理后,打印到日志中以供调试使用。

# cat center-collector.yaml              
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
# 元数据定义部分
metadata:name: center        # Collector 的名称为 centernamespace: opentelemetry
# 具体的配置内容
spec:replicas: 1           # 设置副本数量为1config:               # 定义 Collector 配置receivers:          # 接收器,用于接收遥测数据(如 trace、metrics、logs)otlp:             # 配置 OTLP(OpenTelemetry Protocol)接收器protocols:      # 启用哪些协议来接收数据grpc: endpoint: 0.0.0.0:4317      # 启用 gRPC 协议http: endpoint: 0.0.0.0:4318      # 启用 HTTP 协议processors:         # 处理器,用于处理收集到的数据batch: {}         # 批处理器,用于将数据分批发送,提高效率exporters:          # 导出器,用于将处理后的数据发送到后端系统debug: {}         # 使用 debug 导出器,将数据打印到终端(通常用于测试或调试)service:            # 服务配置部分pipelines:        # 定义处理管道traces:         # 定义 trace 类型的管道receivers: [otlp]                      # 接收器为 OTLPprocessors: [batch]                    # 使用批处理器exporters: [debug]                     # 将数据打印到终端# kubectl apply -f center-collector.yaml 
opentelemetrycollector.opentelemetry.io/center created
# kubectl get pod -n opentelemetry
NAME                                READY   STATUS    RESTARTS      AGE
center-collector-5c5987f4ff-zwqbk   1/1     Running   0             9s
# kubectl get svc -n opentelemetry  
NAME                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
center-collector              ClusterIP   10.109.226.90    <none>        4317/TCP,4318/TCP             22s
center-collector-headless     ClusterIP   None             <none>        4317/TCP,4318/TCP             22s
center-collector-monitoring   ClusterIP   10.110.106.116   <none>        8888/TCP                      22s

部署Collector(代理)

我们使用 Sidecar 模式部署 OpenTelemetry 代理。该代理会将应用程序的追踪发送到我们刚刚部署的中心OpenTelemetry 收集器。

# cat sidecar-collector.yaml 
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector          # 定义资源类型为 OpenTelemetryCollector
metadata:name: sidecar                       # Collector 的名称namespace: opentelemetry
spec:mode: sidecar                       # 以 sidecar 模式运行(与应用容器同 Pod)config:                             # Collector 配置部分(结构化 YAML)receivers:otlp:                           # 使用 OTLP 协议作为接收器protocols:grpc: endpoint: 0.0.0.0:4317      # 启用 gRPC 协议http: endpoint: 0.0.0.0:4318      # 启用 HTTP 协议processors:batch: {}                       # 使用 batch 处理器将数据批量发送,提高性能exporters:debug: {}                       # 将数据输出到 stdout 日志(用于调试)otlp:                           # 添加一个 OTLP 类型导出器,发送到 central collectorendpoint: "center-collector.opentelemetry.svc:4317"  # 替换为 central collector 的地址tls:insecure: true              # 不使用 TLSservice:telemetry:logs:level: "debug"              # 设置 Collector 自身日志等级为 debug(方便观察日志)pipelines:traces:                       # 定义 trace 数据处理流水线receivers: [otlp]           # 从 otlp 接收 trace 数据processors: [batch]         # 使用批处理器exporters: [debug, otlp]    # 同时导出到 debug(日志)和 otlp(中心 Collector)
# kubectl apply -f sidecar-collector.yaml                
opentelemetrycollector.opentelemetry.io/sidecar created
# kubectl get opentelemetrycollectors -n opentelemetry   
NAME      MODE         VERSION   READY   AGE   IMAGE                                                                                     MANAGEMENT
center    deployment   0.123.1   1/1     10m   ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector:0.123.1   managed
sidecar   sidecar      0.123.1           11s                                                                                             managed
# kubectl get pod -n opentelemetry                    
NAME                                READY   STATUS    RESTARTS      AGE
center-collector-5c5987f4ff-zwqbk   1/1     Running   0             10m

sidecar 代理依赖于应用程序启动,因此现在创建后并不会立即启动,需要我们创建一个应用程序并使用这个 sidecar 模式的 collector。

查看更多

崔亮的博客-专注devops自动化运维,传播优秀it运维技术文章。更多原创运维开发相关文章,欢迎访问https://www.cuiliangblog.cn

相关文章:

  • AI智能分析网关V4周界入侵检测算法精准监测与智能分析,筑牢周界安全防线
  • 《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架
  • 【SSL证书系列】操作系统如何保障根证书的有效性和安全
  • 适配华为昇腾 NPU 的交互式监控工具
  • 大模型训练简介
  • json-server的用法-基于 RESTful API 的本地 mock 服务
  • 仿射变换 与 透视变换
  • 第二个五年计划!
  • 计算机网络:手机和基站之间是通过什么传递信息的?怎么保证的防衰减,抗干扰和私密安全的?
  • Java内存马的检测与发现
  • 基于 GPUGEEK平台进行vLLM环境部署DeepSeek-R1-70B
  • 一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp
  • 容器安全-核心概述
  • 【论文阅读】UNIT: Backdoor Mitigation via Automated Neural Distribution Tightening
  • 内存安全设计方案
  • Python 常用模块(八):logging模块
  • 游戏引擎学习第279天:将实体存储移入世界区块
  • 时源芯微| KY键盘接口静电浪涌防护方案
  • 精益数据分析(59/126):移情阶段的深度博弈——如何避开客户访谈的认知陷阱
  • 力扣3337. 字符串转换后的长度 II随笔
  • 深圳拟出让3宗居住用地,共计用地面积6.77公顷
  • 上海145家博物馆、73家美术馆将减免费开放
  • 大英博物馆展歌川广重:他是梵高最钟爱的浮世绘名家
  • 内塔尼亚胡:以军将在未来几天“全力进入”加沙
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 优化营商环境,服务上海“五个中心”建设,北外滩有何举措?