入门OpenTelemetry——部署OpenTelemetry

2025年05月14日22:52:06 科技 1397

OpenTelemetry 部署模式

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

Agent 模式

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

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

入门OpenTelemetry——部署OpenTelemetry - 天天要闻

Gateway 模式

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

入门OpenTelemetry——部署OpenTelemetry - 天天要闻

发送遥测数据最佳实践是将数据发送到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 的名称为 center
  namespace: opentelemetry
# 具体的配置内容
spec:
  replicas: 1           # 设置副本数量为1
  config:               # 定义 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]                      # 接收器为 OTLP
          processors: [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 collector
        endpoint: "center-collector.opentelemetry.svc:4317"  # 替换为 central collector 的地址
        tls:
          insecure: true              # 不使用 TLS

    service:
      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。

科技分类资讯推荐

中国首个独立研发在美获批的全球首创新药,来自无锡高新区! - 天天要闻

中国首个独立研发在美获批的全球首创新药,来自无锡高新区!

7月3日无锡高新区企业迪哲医药宣布舒沃哲的新药上市申请正式获得美国食品药品监督管理局批准成为全球首个且唯一在美国获批的表皮生长因子受体(EGFR)20号外显子插入突变(exon20ins)非小细胞肺癌(NSCLC)国创新药同时也是中国首个独立研发在美获批的全球首创新药舒沃哲是一款口服、不可逆、针对多种EGFR突变亚型的高...
百度前副总裁璩静开医美诊所,人均消费2218元,曾因 “霸道女总裁” 言论道歉辞职 - 天天要闻

百度前副总裁璩静开医美诊所,人均消费2218元,曾因 “霸道女总裁” 言论道歉辞职

红星资本局7月2日消息,百度前副总裁璩静在华为总部坂田基地附近开了一家医美诊所。据公开资料,璩静名下新增一家存续企业——深圳大为诊所。该诊所成立于2024年12月23日,璩静持股比例为100%,认缴出资额为100万元,经营范围为诊所服务等。企查查显示,根据璩静关联的任职历史,她曾任深圳市星光健康管理有限公司(以下简...
推荐数商云B2B撮合交易平台,搭建企业间合作桥梁 - 天天要闻

推荐数商云B2B撮合交易平台,搭建企业间合作桥梁

来源:数商云引言:企业数字化转型与B2B撮合交易平台的崛起在全球经济一体化与数字经济深度融合的背景下,企业间的合作模式正经历深刻变革。传统供应链中信息不对称、交易成本高、协同效率低等问题,已成为制约企业发展的核心痛点。
当无人机 “飞” 入生活,数字低空如何重构我们的出行与未来? - 天天要闻

当无人机 “飞” 入生活,数字低空如何重构我们的出行与未来?

交汇点讯 近日,苏州国际博览中心的展厅里人头攒动,2025数字低空大会在此隆重举行。作为第三届低空(苏州)产业创新生态大会的重要组成部分,这场由未来移动通信论坛与鹏城实验室联合主办的盛会,承载着特殊的行业意义——继2024年在深圳首次提出“数字低空”概念并引发广泛共鸣后,它既是对过去一年行业探索的总结,更是...
雷军披露小米 YU7 销售数据;特斯拉 Q2 交付汽车 38.4 万辆;荣耀 Magic V5 发布|Do早报 - 天天要闻

雷军披露小米 YU7 销售数据;特斯拉 Q2 交付汽车 38.4 万辆;荣耀 Magic V5 发布|Do早报

Hello,大家早上好,又是元气满满的一天,先来浏览新鲜的早报吧~【微信多端正式更新】7 月 2 日,微信 iOS / 安卓 8.0.61 正式版携手登场;而在 7 月 1 日,微信在官网也上架了 PC 的新版本,Windows / Mac 4.0.6 迎来全新发布。【多地开放往届高考成绩网上查询功能】河北、浙江、陕西、山东等地都开放了往届高考成绩的查...
长城为何不做增程?详解Hi4背后的技术和战略逻辑 - 天天要闻

长城为何不做增程?详解Hi4背后的技术和战略逻辑

在中国新能源汽车产业迈入智能化与电动化深水区的当下,动力技术路线的选择,不仅关乎产品体验,也在重塑车企的技术底盘与品牌认知。与越来越多自主品牌押注增程技术不同,长城汽车选择走另一条更具挑战性的路线——全场景智能四驱电混技术体系Hi4。这个选择背后,是对效率、安全与技术普适性的权衡与押注。Hi4,一种技术“...
解码“民生答卷”丨如何“唤醒”沉睡的养老资源 - 天天要闻

解码“民生答卷”丨如何“唤醒”沉睡的养老资源

湖北日报全媒记者 方琳 李光正 张华“幸福食堂、健身房、阅览室、娱乐室、理疗室一应俱全,可没多少人来。”6月19日,在鄂东南某镇,一家开业一个多月的养老服务综合体经营者王先生望着冷清的门厅,难掩焦虑。截然不同的是,在武汉众多社区养老中心,唱歌、跳舞等活动日程排得满满当当,老人们排队“抢位”,养老床位更是“...
YU7爆火是雷军营销太强?张全蛋贴脸开大车企大佬,遮羞布都撕了 - 天天要闻

YU7爆火是雷军营销太强?张全蛋贴脸开大车企大佬,遮羞布都撕了

6月26日,小米YU7正式公布售价,很多人都预料到小米YU7会非常火,但是完全没有料到小米YU7能那么火,3分钟大定破20万辆,18小时锁单24.8万辆,可以说创造了国内汽车市场前所未有的新纪录。这也让之前那些攻击小米汽车的车企大佬和业外人士的表述显得苍白无力,小米YU7的价格不便宜,现在整个汽车行业的需求量也呈现疲软态势...