跳到主要内容

接入OpenTelemetry Trace和Metric数据

适配范围

当前仅支持OpenTelemetry Java语言探针的数据采集,支持的探针版本2.0~2.21。

Collector最低版本要求:4.2.0.0, 并且启用Guanyun Collector模块

准备Collector主机资源

部署Collector的主机最小配置如下:

  • 操作系统:CentOS 7及以上、 Redhat 7及以上、Ubuntu 18及以上

  • CPU:4 Core及以上

  • 物理内存:8GB及以上

目前,在同一部署环境中,仅支持部署一台接入 OpenTelemetry Trace 的 Collector,不支持通过多个Collector实例方式进行水平扩展。

接入 OpenTelemetry Trace 数据会占用较多主机资源。经测试验证,部署在 4 Core / 8 GB 配置的主机上的 Collector,可承载约 1500 TPS 的 Trace 数据流量。

如果接入的流量超过1500TPS,需要扩展此台Collector的资源,我们推荐按照以下公式计算Collector的CPU、内存资源:

CPU 核数 = 4 * 一天内TPS的峰值 / 1500

内存(GB) = 8 * 一天内TPS的峰值 / 1500

开通防火墙策略

OpenTelemetry Agent 会在业务应用服务器上采集数据,并将数据上报至 Collector所在服务器。因此,需要确保OpenTelemetry Agent服务器与Collector服务器之间的网络连通性,以保证数据采集与传输的正常进行。

⚠️ 下面是演示的IP地址和端口,请根据实际项目内的地址和端口信息开通网络策略。

源地址目标地址目标端口说明
Collector所在服务器观云平台80Collector安装,上传数据
OpenTelemetry AgentCollector所在服务器7667(HTTP)接收OpenTelemetry Agent上报的数据

安装Collector

  1. 登录平台,在左侧导航栏中依次选择“全部应用 > 部署状态 > Collectors管理”。

  2. 在 Collectors管理 页签的右上角单击“新增”,并配置Collector参数。

    collector-setup-4.0.png

    推荐关闭 “APM Collector”: 因为APM功能需要消耗比较高的CPU,尽量减少APM功能和OpenTelemetry Trace之间的相互影响。

    必须开启“Guanyun Collector”: 用来接收Zabbix、Prometheus、OpenTelemetry、外部数据源等产生的监控数据。

    复制安装Collector的脚本,在服务器上安装Collector。

配置 Collector 接收 OpenTelemetry 数据

进入 Collector 安装目录

cd /opt/tingyun-collector/

开启 OpenTelemetry 模块,当前仅支持Java语言探针的数据采集

cd conf.d/o11y
cp o11y-processor-exporter.yaml.example o11y-processor-exporter.yaml

服务间调用拓扑(ServiceGraph)的窗口时间默认设置为 1 分钟。 如果同一条调用链中各服务的请求时间间隔超过 1 分钟,部分调用关系可能无法被正确关联。

如需延长窗口时间,请在 o11y-processor-exporter.yaml 中修改connectors.servicegraph.store.ttl配置项:

    store:
ttl: 1m

⚠️ 注意:增大该参数会增加 Collector 的内存占用,请根据实际负载谨慎调整。

重启Collector

修改完配置需重启 Collector

sudo systemctl restart tingyun-collector

Java应用程序嵌入OpenTelemetry探针(示例)

1、下载并解压OpenTelemetry探针

wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v2.21.0/opentelemetry-javaagent.jar

官方参考地址

2、修改Java应用程序启动脚本

java -javaagent:path/to/opentelemetry-javaagent.jar \
-Dotel.service.name=your-service-name \ #应用名称
-Dotel.traces.exporter=otlp \ #设置Traces导出器到Collector
-Dotel.metrics.exporter=otlp \ #设置metric导出器到Collector
-Dotel.exporter.otlp.protocol=http/protobuf \ #设置导出器到Collector协议类型,grpc暂不支持
-Dotel.exporter.otlp.endpoint=http://192.168.1.2:7667 \ #Collector地址:端口
-Dotel.resource.attributes=service.port=8080,host.ip=192.168.1.8 \ #添加自定义属性
-jar your-application.jar

1、otel.service.name 代表服务名称,建议设置为应用名称,方便在报表中识别。

2、otel.exporter.otlp.endpoint 代表 上面接收数据Collector 地址,默认端口为 7667。

3、otel.resource.attributes 代表自定义属性,可以添加多个属性,方便在报表中筛选。service.port 代表应用端口(OpenTelemetry Agent采集不到应用端口,可选添加。添加上之后在一台机器部署多个应用时更容易区分),host.ip 代表应用所在服务器IP(OpenTelemetry Agent采集不到,可选添加。添加上之后在不同台机器部署的应用更容易区分)。

验证Collector端OpenTelemetry功能是否正常

tail -f /opt/tingyun-collector/logs/guanyun/collector.log

# 使用命令查看日志是否包含"Setting up own telemetry"
grep "Setting up own telemetry" collector.log

查看报表

查看【实体管理】轻应用 ,模型选择【应用】查看实体,按应用名称过滤 your-service-name ot_entity.png 查看【应用】轻应用,过滤应用名称为 your-service-name ot_application.png

问题排查

如果数据在报表中看不到数据,可以通过以下几种方式排查,注意修改完配置文件要要恢复配置。

方式1:打开监控端口,通过curl命令查看是否有数据接收

修改Collector配置文件,打开监控端口8888,查看是否有数据。注:如果此端口被占用,可以修改配置文件改成其他的端口。

vim /opt/tingyun-collector/conf/guanyun/collector.yaml

增加readers下的配置内容,并注释level,修改文件内容如下:

service:
telemetry:
logs:
level: INFO
output_paths: ${env:TINGYUN_COLLECTOR_HOME}/logs/guanyun/collector.log
metrics:
readers:
- pull:
exporter:
prometheus:
host: '0.0.0.0'
port: 8888
#level: none

修改完成之后重启 Collector

sudo systemctl restart tingyun-collector

查看聚合的指标的数量是否增加,增加说明数据接收正常。

curl http://127.0.0.1:8888/metrics | grep 'sent_metric_points'

collector_sent_metric_points.png

方式2:输出指标到临时文件,查看明细数据

修改Collector 配置文件,配置输出指标到临时文件地址,增加file。

vim /opt/tingyun-collector/conf/guanyun/collector.yaml

配置内容如下:

exporters:
debug:
verbosity: '${env:TINGYUN_GUANYUN_LOGLEVEL}'
file:
path: /opt/tingyun-collector/guanyun-collector.json

修改

vim /opt/tingyun-collector/conf.d/o11y/o11y-processor-exporter.yaml

修改exporters,增加file。

service:
pipelines:
traces/o11y:
receivers: [otlp]
processors: [groupbytrace/o11y, groupbyattrs/o11y]
exporters: [servicegraph, otlphttp/default]
metrics/servicegraph:
receivers: [servicegraph]
processors: [filter/servicegraph, cumulativetodelta/o11y/sg]
exporters: [otlphttp/default]
metrics/o11y:
receivers: [otlp]
processors: [filter/o11y, transform/o11y, cumulativetodelta/o11y/metric]
exporters: [file,otlphttp/default]

修改完成之后重启 Collector

sudo systemctl restart tingyun-collector

查看guanyun-collector.json文件是否有数据输出。

tail -f /opt/tingyun-collector/guanyun-collector.json