观测云对接 OpenTelemetry 最佳实践

观测云支持多种方式来接入 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。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容