美文网首页基于JavaA...
基于JavaAgent的全链路监控一《嗨!JavaAgent》

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

作者: bugstack虫洞栈 | 来源:发表于2019-07-30 10:49 被阅读14次

    前言介绍

    全链路监控又名分布式监控系统全链路追踪,目前市面的全链路监控系统基本都是参考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>
            <!-- Build args -->
            <argline>-Xms512m -Xmx512m</argline>
            <skip_maven_deploy>false</skip_maven_deploy>
            <updateReleaseInfo>true</updateReleaseInfo>
            <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
            <maven.test.skip>true</maven.test.skip>
            <!-- 自定义MANIFEST.MF -->
            <maven.configuration.manifestFile>src/main/resources/META-INF/MANIFEST.MF</maven.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
    嗨!JavaAgent
    
    Process finished with exit code 0
    

    关注{bugstack虫洞栈}公众号获取源码,回复<基于JavaAgent的全链路监控>

    微信公众号,bugstack虫洞栈

    相关文章

      网友评论

        本文标题:基于JavaAgent的全链路监控一《嗨!JavaAgent》

        本文链接:https://www.haomeiwen.com/subject/tuvirctx.html