JAVA 服务可观测性最佳实践

前言

本次实践主要是介绍 Java 服务通过无侵入的方式接入观测云进行全面的可观测。

环境信息

  • 系统环境:Ubuntu(主机环境)
  • 开发语言:JDK 11.0.18
  • Web 框架:SpringBoot
  • 日志框架:Logback
  • APM 探针:DDTrace

实现目标

  • 应用链路接入
  • 应用日志接入
  • JVM 指标接入
  • Profiling 接入

对 JDK 有版本要求,具体参考文档: Java - 观测云文档

接入方案

准备工作

安装 DataKit
# 需要把token 改成观测云空间的实际token值(可在「观测云控制台」-「集成」-「Datakit」 上面获取)
DK_DATAWAY="https://openway.guance.com?token=tkn_xxxxxx" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)" 
重启 DataKit

以下接入配置后都需重启 DataKit ,使配置生效,命令如下:

datakit service -R

通过 datakit monitor 命令可以观察到采集器是否启动成功。

红色为采集器,下面各种接入都会开启采集器,每个采集器都需要重启 DataKit 。

日志接入

  • Logback 日志格式调整

主要是调整 pattern ,新增三个参数 %X{dd.service} %X{dd.trace_id} %X{dd.span_id} ,部分配置如下:

<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] [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>

Log 采集器主要用于采集日志信息,可以通过 Socket 或者 File 方式进行日志采集。进入到 DataKit 安装目录下,执行 conf.d/log/ ,复制 logging.conf.sample 并重命名为 logging.conf 。

  • 配置应用日志目录
  logfiles = ["/home/liurui/code/observable-demo/logs/server/server.log"]# 服务名称,非必填service = "server"## Grok pipeline script name.pipeline = "server.p"
  • 配置 pipeline

日志 pipeline 用于解析日志格式

解析脚本

grok(_, "%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name} - \\[%{NOTSPACE:method_name},%{NUMBER:line}\\] %{DATA:service_name} %{DATA:trace_id} %{DATA:span_id} - %{GREEDYDATA:msg}")default_time(time,"Asia/Shanghai")

可以按照实际日志格式进行调整,以上 pipeline 只适应 %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 的日志格式。

链路接入

  • 开启 DDTrace 采集器

DDTrace 采集器用于采集链路信息,进入到 DataKit 安装目录下,执行 conf.d/ddtrace/ ,复制 ddtrace.conf.sample 并重命名为 ddtrace.conf 即可 。

  • 应用启动参数
java \
-javaagent:/home/liurui/agent/dd-java-agent-1.21.1-guance.jar \
-Ddd.service.name=server \
-Ddd.env=dev \
-Ddd.version=1.2.3
-jar springboot-server.jar

JVM 指标接入

  • 开启 StatsD 采集器

StatsD 采集器用于采集指标信息,进入到 DataKit 安装目录下,执行 conf.d/statsd/ ,复制 statsd.conf.sample 并重命名为 statsd.conf 即可,默认端口为 8125 。

按照链路的启动方式启动应用即可。

Profiling 接入

  • 开启 Profile 采集器

Profiling 采集器主要用于采集应用性能数据,如 java 的 jfr。进入到 DataKit 安装目录下,执行 conf.d/profile/ ,复制 profile.conf.sample 并重命名为 profile.conf 。

  • 应用启动参数

主要是调整参数,添加以下参数。

-Ddd.profiling.enabled=true  \
-Ddd.profiling.ddprof.enabled=true \
-Ddd.profiling.ddprof.cpu.enabled=true \
-Ddd.profiling.ddprof.wall.enabled=true \
-Ddd.profiling.ddprof.alloc.enabled=true \
-Ddd.profiling.ddprof.liveheap.enabled=true \

完整启动命令

在启动命令加上 DDTrace 相关参数。

java \
-javaagent:/home/liurui/agent/dd-java-agent-1.21.1-guance.jar \
-Ddd.service.name=server \
-Ddd.env=dev \
-Ddd.version=1.2.3  \
-Ddd.profiling.enabled=true  \
-Ddd.profiling.ddprof.enabled=true \
-Ddd.profiling.ddprof.cpu.enabled=true \
-Ddd.profiling.ddprof.wall.enabled=true \
-Ddd.profiling.ddprof.alloc.enabled=true \
-Ddd.profiling.ddprof.liveheap.enabled=true \
-jar springboot-server.jar

实践效果

  • 日志视图

应用日志基本上都采集上来了,而且日志里面还包含了 trace_id 这些信息。

  • 日志详情

  • 链路视图

  • 链路详情

通过链路可以关联到日志信息,反之亦然,实现了日志与链路的联动效果。

  • Profiling

通过 Profiling 能更详细的追溯堆栈问题,从而更好的优化代码、提升性能。

  • JVM 监控视图

可以分析 java 在内存、cpu 等分配使用情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux深入剖析】操作系统与用户之间的接口:自定义简易shell制作全过程

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.shell2.自定义shell的准…

x86_64架构栈帧以及帧指针FP

文章目录 一、x86_64架构寄存器简介二、x86_64架构帧指针FP三、示例四、保存帧指针参考资料 一、x86_64架构寄存器简介 在x86架构中&#xff0c;有8个通用寄存器可用&#xff1a;eax、ebx、ecx、edx、ebp、esp、esi和edi。在x86_64&#xff08;x64&#xff09;扩展中&#xff…

第八届蓝桥杯省赛 分巧克力(二分)

题目描述&#xff1a; 思路&#xff1a; 给出N个长方形的长和宽&#xff0c;可以分别看长能被分成多少块&#xff0c;宽能被分为多少块&#xff0c; 也就是 (h/mid) * (w/mid),使其大于等于K 所以我们可以通过二分去找&#xff0c;最大的边长是多少 AC代码&#xff1a; #inc…

深度学习技巧总结

1、监控GPU使用情况 pip install nvitopnvitop -m fullhttps://zhuanlan.zhihu.com/p/577533593 2、本地拉取服务器上tensorboard数据并进行可视化显示 https://blog.csdn.net/Thebest_jack/article/details/125609849 3、服务器打不开pycharm软件 这个是已经有一个软件在运…

SD-WAN解决企业云网融合问题

随着市场竞争不断加剧&#xff0c;企业在提升业务的同时也面临着新兴业务需求的涌现。数字化发展的关键路径包括上云、跨云、云迁移&#xff0c;而广域网连接已不再仅限于总部和分支机构之间。为应对企业云转型对网络架构提出的更高要求&#xff0c;SD-WAN成为企业解决云网融合…

【SpringBoot】自定义工具类实现Excel数据新建表存入MySQL数据库

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; 前言———— Samba 是一个开源软件套件&#xff0c;可为 SMB/CIFS 客户端&#xff08;包括 Windows&#xff09;提供文件…

yolov8模型结构

yolov8模型结构 yolo发展历史yolov8简介yolov8模型结构 yolo发展历史 YOLOv1&#xff1a;2015年Joseph Redmon和 Ali Farhadi等 人&#xff08;华盛顿大学&#xff09; YOLOv2&#xff1a;2016年Joseph Redmon和Ali Farhadi等人&#xff08;华盛顿大学&#xff09; YOLOv3&…

KIOXIA铠侠CM7-R 30T大容量SSD KCMY1RUG30T7 NVMe™ 2.0 PCIe® 5.0

KCMY1RUG30T7是铠侠推出的一款高性能SSD硬盘&#xff0c;以下是对该产品的介绍&#xff1a; 产品规格介绍&#xff1a; 容量&#xff1a;30,720GB 读取速度&#xff1a;10,000 MB/s 写入速度&#xff1a;4,900 MB/s 随机读取&#xff1a;1,600K IOPS 随机写入&#xff1a;1…

【CSP试题回顾】201803-2-碰撞的小球

CSP-201803-2-碰撞的小球 解题思路 通过逐秒模拟每个小球的运动&#xff0c;并在小球到达线段端点或者与其他小球碰撞时改变其移动方向&#xff0c;来计算 t 秒后每个小球的位置。这个问题的关键点在于理解小球的运动和碰撞是独立并且可以预测的&#xff0c;所有的碰撞和方向变…

Linux - 安装 nacos(详细教程)

目录 一、简介二、安装前准备三、下载与安装四、基本配置五、单机模式 一、简介 官网&#xff1a;https://nacos.io/ GitHub&#xff1a;https://github.com/alibaba/nacos Nacos 是阿里巴巴推出的一个新开源项目&#xff0c;它主要是一个更易于构建云原生应用的动态服务发现…

IT营销师行业市场分析报告

一、行业概述 随着数字化转型的浪潮席卷全球&#xff0c;IT营销师行业作为连接信息技术与市场营销的关键桥梁&#xff0c;近年来呈现出强劲的增长态势。IT营销师凭借其独特的技能组合&#xff0c;即深入理解IT产品和服务的技术特性以及精准把握市场需求&#xff0c;正在为企业…

DVWA-master 存储型xss

什么是存储型xss 存储型xss意味着可以与数据库产生交互的&#xff0c;可以直接存在数据库中 先将DVWA安全等级改为低 先随便写点东西上传 我们发现上传的内容会被显示&#xff0c;怎么显示的呢&#xff1f; 它先是上传到数据库中&#xff0c;然后通过数据库查询语句将内容回显 …

MySQL 篇-深入了解事务四大特性及原理

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 事务的概述 2.0 事务的特性 2.1 原子性 2.2 一致性 2.3 持久性 2.4 隔离性 2.4.1 脏读问题 2.4.2 不可重复读问题 2.4.3 幻读问题 3.0 事务的四个隔离级别 3.1…

WAAP全站防护

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;诞生了APP、H5、小程序等多种应用形式&#xff0c;更多的企业核心业务、交易平台都越来越依赖这些新型应用程序。与此同时&#xff0c;越来越多的第三方API接口被调用&#xff0c;API业务带来的Web敞口风险和风险管控链…

H5自适应点状球动态背景个人主页源码

源码名称&#xff1a;自适应点状球动态背景个人主页源码 源码介绍&#xff1a;一款H5自适应点状球背景个人主页源码&#xff0c;带有个人联系方式、个人介绍、足迹、会的技能、相册、旗下站点、留言发邮箱功能【仅前端代码需自行配置或修改为其他功能】。可自行修改为你的个人…

LabVIEW电磁阀特性测控系统

LabVIEW电磁阀特性测控系统 电磁阀作为自动化工程中的重要组成部分&#xff0c;其性能直接影响系统的稳定性和可靠性。设计一种基于LabVIEW的电磁阀特性测控系统&#xff0c;通过高精度数据采集和智能化控制技术&#xff0c;实现电磁阀流阻、响应时间及脉冲特性的准确测量和分…

用机床测头为什么能提升加工中心精度?提高生产效率?

制造业的蓬勃发展为企业提出了更高的精度和效率要求。在现代制造业中&#xff0c;机床测头作为一种关键的检测装置&#xff0c;能够实时监控加工过程中的误差&#xff0c;及时调整&#xff0c;保证加工质量的稳定性&#xff0c;提高加工中心的精度&#xff0c;进而提升生产效率…

打开链接跳转的模式

摘要&#xff1a; 今天遇到一个需求&#xff1a;后台小程序的域名下打开微信客服链接的&#xff01;但是小程序的域名拒绝任何第三方域名&#xff0c;跨域了&#xff01;为了上线这微信客服的功能&#xff0c;打开新页签&#xff0c;脱离小程序的域名实现微信客服链接的跳转启动…

MISC:杂项

一、文件类型识别 背景&#xff1a;遇到文件没有后缀&#xff0c;不知道文件类型。 方法一、使用Linux中的file命令 原理&#xff1a;file命令会识别文件的文件头&#xff0c;通过文件头识别出文件类型。 命令格式&#xff1a;file <filename> 而文件头则可通过010edito…