基于JavaAgent的全链路监控一《嗨!JavaAgent》


前言介绍

全链路监控又名分布式监控系统全链路追踪,目前市面的全链路监控系统基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)来做的。例如;蚂蚁金服分布式链路跟踪组件SOFATracer、Gokit微服务-服务链路追踪 、Pinpoint、Prometheus(普罗米修斯)等等。

章节列表 | 关注微信公众号,bugstack虫洞栈,回复<基于JavaAgent的全链路监控>获取源码

  • 基于JavaAgent的全链路监控一《嗨!JavaAgent》
  • 基于JavaAgent的全链路监控二《通过字节码增加监控执行耗时》
  • 基于JavaAgent的全链路监控三《ByteBuddy操作监控方法字节码》
  • 基于JavaAgent的全链路监控四《JVM内存与GC信息》
  • 基于JavaAgent的全链路监控五《ThreadLocal链路追踪》
  • 基于JavaAgent的全链路监控六《开发应用级监控》

案例简述
JavaAgent是在JDK5之后提供的新特性,也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM),动态更改类方法实现AOP,提供监控服务如;方法调用时长、可用率、内存等。本章节初步怎么让java代码执行时可以进入我们的agent方法。

环境准备
1、IntelliJ IDEA Community Edition
2、jdk1.8.0_45 64位

配置信息(路径相关修改为自己的)
1、配置位置:Run/Debug Configurations -> VM options
2、配置内容:-javaagent:E:\itstack\GIT\itstack.org\itstack-demo-agent\itstack-demo-agent-01\target\itstack-demo-agent-01-1.0.0-SNAPSHOT.jar=testargs

代码示例

itstack-demo-agent-01
├── pom.xml
└── src├── main│   ├── java│   │   └── org.itstack.demo.agent│   │       └── MyAgent.java│	└── resources│       └── META-INF│           └── MANIFEST.MF 	└── test└── java└── org.itstack.demo.test└── ApiTest.java

pom.xml

    <properties><argline>-Xms512m -Xmx512margline><skip_maven_deploy>falseskip_maven_deploy><updateReleaseInfo>trueupdateReleaseInfo><project.build.sourceEncoding>utf-8project.build.sourceEncoding><maven.test.skip>truemaven.test.skip><maven.configuration.manifestFile>src/main/resources/META-INF/MANIFEST.MFmaven.configuration.manifestFile>properties>

MyAgent.java

/*** 博客:http://itstack.org* 论坛:http://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}*/
public class MyAgent {//JVM 首先尝试在代理类上调用以下方法public static void premain(String agentArgs, Instrumentation inst) {System.out.println("嗨!JavaAgent " + agentArgs);}//如果代理类没有实现上面的方法,那么 JVM 将尝试调用该方法public static void premain(String agentArgs) {}}

MANIFEST.MF

Manifest-Version: 1.0
Premain-Class: org.itstack.demo.agent.MyAgent
Can-Redefine-Classes: true

ApiTest.java

/**** http://bigbully.github.io/Dapper-translation/** 配置监控* VM options:* -javaagent:E:\itstack\GIT\itstack.org\itstack-demo-agent\itstack-demo-agent-01\target\itstack-demo-agent-01-1.0.0-SNAPSHOT.jar=testargs** 博客:http://itstack.org* 论坛:http://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* create by fuzhengwei on 2019*/
public class ApiTest {public static void main(String[] args) {System.out.println("hi itstack-demo-agent-01");}}

测试结果

this is my agent:testargs
嗨!JavaAgentProcess finished with exit code 0

关注{bugstack虫洞栈}公众号获取源码

关注{bugstack虫洞栈}公众号获取源码


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部