0
点赞
收藏
分享

微信扫一扫

观测云对接 OpenTelemetry 最佳实践

山竹山竹px 2024-08-12 阅读 23

观测云支持多种方式来接入 OpenTelemetry 上报的数据,比如通过 OpenTelemetry Collector ,也可以直接通过 exporter 方式上报。本次最佳实践主要通过 exporter 方式进行上报,架构如下:

图片

  • 安装 DataKit
  • DataKit 开启 opentelemetry 采集器
  • DataKit 开启 log采集器
  • 准备应用,接入 opentelemetry-javaagent,上报至 DataKit 。

DataKit

1、安装 DataKit

参考链接:https://docs.guance.com/datakit/datakit-install/

2、opentelemetry 采集器

进入 DataKit 安装目录下的 conf.d/opentelemetry 目录,复制 opentelemetry.conf.sample 并命名为 opentelemetry.conf ,主要调整以下配置:

[inputs.opentelemetry.http]
enable = true
http_status_ok = 200
trace_api = /otel/v1/trace
metric_api = /otel/v1/metric

## OTEL agent GRPC config for trace and metrics.
## GRPC services for trace and metrics can be enabled respectively as setting either to be true.
## add is the listening on address for GRPC server.
[inputs.opentelemetry.grpc]
trace_enable = true
metric_enable = true
addr = 0.0.0.0:4317

从上面配置可以看出,opentelemetry 采集器支持两种协议 :

  • GRPC:4317 端口,也可以自行调整。
  • HTTP:9529 端口,是 DataKit 的端口,访问地址是 http://localhost:9529/otel/v1/trace

3、log 采集器

用于采集应用日志信息,进入 DataKit 安装目录下的 conf.d/log 目录,复制 logging.conf.sample 并命名为 logging.conf 。示例如下:

[[inputs.logging]]
# 日志文件列表,可以指定绝对路径,支持使用 glob 规则进行批量指定
# 推荐使用绝对路径
logfiles = [
/home/code/observable-demo/logs/server/server.log,
]
......

注意日志路径和文件名,也可以支持通配符的方式。

4、重启 Datakit

datakit service -R

应用接入 OpenTelemetry

准备一个应用,这里主要演示 java 环境下接入 OpenTelemetry。

  • 下载 opentelemetry-javaagent

建议下载观测云版本的 opentelemetry-javaagent。 https://github.com/GuanceCloud/opentelemetry-java-instrumentation/releases

  • 调整日志输出格式
<?xml version=1.0 encoding=UTF-8?>
<configuration debug=false>
<springProperty scope=context name=LOG_HOME source=logback.home/>
<!-- <property name=log.pattern value=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] %X{dd.service} %X{dd.trace_id} %X{dd.span_id} - %msg%n />-->
<property name=log.pattern value=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] %X{trace_id} %X{span_id} - %msg%n />
<!-- <property name=log.pattern value=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] [traceId=%X{trace_id} spanId=%X{span_id}] - %msg%n />-->
<springProperty scope=context name=logName source=spring.application.name defaultValue=Springboot/>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->
<appender name=STDOUT class=ch.qos.logback.core.ConsoleAppender>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>

<appender name=FILE class=ch.qos.logback.core.rolling.RollingFileAppender>
<file>logs/${logName}/${logName}.log</file> <!-- 使用方法 -->
<append>true</append>
<rollingPolicy class=ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy>
<fileNamePattern>logs/${logName}/${logName}-%d{yyyy-MM-dd}.log.%i</fileNamePattern>
<maxFileSize>64MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>

<!-- 只打印error级别的内容 -->
<logger name=net.sf.json level=ERROR />
<logger name=org.springframework level=ERROR />
<!-- <logger name=io.opentelemetry level=DEBUG />-->
<root level=info>
<appender-ref ref=STDOUT/>
<appender-ref ref=FILE/>
</root>
</configuration>

主要是在 logback.xml 上调整 pattern 格式 %X{trace_id} %X{span_id} ,用于日志和链路的关联。

  • 启动应用
java \
-javaagent:/home/liurui/code/opentelemetry-java-instrumentation/javaagent/build/libs/opentelemetry-javaagent-1.31.0.jar \
-Dotel.traces.exporter=otlp \
-Dotel.exporter.otlp.protocol=grpc \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-Dotel.resource.attributes=service.name=springboot \
-jar springboot-server.jar

观测云效果

  • 链路列表

可以看到所有链路相关的数据

图片

查看链路详情,可以关联到对应的日志信息

图片

  • 日志

图片

  • Opentelemetry JVM 视图

Opentelemetry JVM 视图是基于 Opentelemetry 上报的指标信息进行绘制的视图模版,可以选择对应的模版进行 clone。

图片

图片

举报

相关推荐

0 条评论