观测云支持多种方式来接入 OpenTelemetry 上报的数据,比如通过 OpenTelemetry Collector ,也可以直接通过 exporter 方式上报。本次最佳实践主要通过 exporter 方式进行上报,架构如下:
- 免费开通观测云
- 安装 DataKit
- DataKit 开启 opentelemetry 采集器
- DataKit 开启 log采集器
- 准备应用,接入 opentelemetry-javaagent,上报至 DataKit 。
DataKit
1、安装 DataKit
参考链接:主机安装 - 观测云文档
2、opentelemetry 采集器
进入 DataKit 安装目录下的 conf.d/opentelemetry
目录,复制 opentelemetry.conf.sample
并命名为 opentelemetry.conf
,主要调整以下配置:
[inputs.opentelemetry.http]enable = truehttp_status_ok = 200trace_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 = truemetric_enable = trueaddr = "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。 Releases · GuanceCloud/opentelemetry-java-instrumentation · GitHub
- 调整日志输出格式
<?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。