观测云对接 OpenTelemetry 最佳实践

devtools/2024/9/24 4:45:21/

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


http://www.ppmy.cn/devtools/92469.html

相关文章

Spring统一处理请求响应与异常

在web开发中&#xff0c;规范所有请求响应类型&#xff0c;不管是对前端数据处理&#xff0c;还是后端统一数据解析都是非常重要的。今天我们简单的方式实现如何实现这一效果 实现方式 定义响应类型 public class ResponseResult<T> {private static final String SUC…

书生.浦江大模型实战训练营——(一)InternStudio+Vscode SSH连接远程服务器+Linux基础指令

最近在学习书生.浦江大模型实战训练营&#xff0c;所有课程都免费&#xff0c;以关卡的形式学习&#xff0c;也比较有意思&#xff0c;提供免费的算力实战&#xff0c;真的很不错&#xff08;无广&#xff09;&#xff01;欢迎大家一起学习&#xff0c;打开LLM探索大门&#xf…

Recyclerview网格布局学习备忘

网格分割线&#xff0c;网格布局代码&#xff1a; 两个链接构成完整代码&#xff1a; Android RecyclerView线性布局详解(1)_Android_脚本之家 (jb51.net) Android RecyclerView网格布局&#xff08;支持多种分割线&#xff09;详解(2)_Android_脚本之家 (jb51.net)

HCIA、OSPF笔记

一、OSI参考模型 1、OSI的结构 应用层&#xff1a;把人类语言转化成编码&#xff0c;为各种应用程序提供网络服务。 表示层&#xff1a;定义一些数据的格式&#xff0c;&#xff08;对数据进行加密、解密、编码、解码、压缩、解压缩&#xff0c;每一层都可以实现&#xff0c…

vue+elementui 表格分页限制最大页码数

vue3element-plus &#xff1a; 在组件里直接使用page-count属性&#xff0c;在获取数据的时候测试一下总条数/每页数量向上取整是否大于1000&#xff0c;是默认count为1000&#xff0c;否则使用计算后的值&#xff1b; vue2 elementui el-pagination &#xff1a;total与pag…

魔方远程时时获取短信内容APP 前端Vue 后端Ruoyi框架(含搭建教程)

前端Vue 后端Ruoyi框架 APP原生JAVA 全兼容至Android14(鸿蒙 澎湃等等) 前后端功能&#xff1a; ①后端可查看用户在线状态(归属地IP) ②发送短信(自定义输入收信号码以及短信内容&#xff0c;带发送记录) ③短信内容分类清晰(接收时间、上传时间等等) ④前后端分离以及A…

Linux Shell面试题大全及参考答案(3万字长文)

目录 解释Shell脚本是什么以及它的主要用途 主要用途 Shell脚本中的注释如何编写? 如何在Shell脚本中定义和使用变量? Shell支持哪些数据类型? 什么是Shell的命令替换?请举例说明。 管道(pipe)和重定向(redirection)有什么区别? 如何在Shell脚本中使用条件语句…

深入理解 RDMA 的软硬件交互机制

作者&#xff1a;羽京 一、前言 随着数据中心的飞速发展&#xff0c;高性能网络不断挑战着带宽与时延的极限&#xff0c;网卡带宽从过去的 10 Gb/s 、25 Gb/s 到如今的 100 Gb/s、200 Gb/s 再到下一代的 400Gb/s 网卡&#xff0c;其发展速度已经远大于 CPU 发展的速度。 为了…