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

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

6.jpg

前言介绍

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

章节列表

  • 基于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
目录
相关文章
|
4月前
|
存储 Arthas Java
技术经验分享:javaagent技术&Attach技术
技术经验分享:javaagent技术&Attach技术
25 0
|
Java 编译器 Maven
javaagent实战
javaagent实战
|
Arthas 监控 Java
Arthas-java应用排障利器
Arthas-java应用排障利器
158 0
|
JSON Kubernetes Cloud Native
美女同事的烦恼:如何配置 Apache SkyWalking 告警?
技术部基本上是一个和尚庙,女生非常少,即使有女生也略微有点抽象,小婉就不一样,她气质绝佳。 上午,同事小婉刚才从老板办公室里出来,看上去一脸不悦的样子。为了表示对同事的关(ba)心(gua),我就主动和她聊一聊。
345 0
美女同事的烦恼:如何配置 Apache SkyWalking 告警?
|
Java 数据库
skywalking05 - skywalking探针插件开发
skywalking05 - skywalking探针插件开发
210 0
|
监控 Java 应用服务中间件
APM - Hello Javaagent
APM - Hello Javaagent
110 0
|
Java
APM - 使用JavaAgent+Javassit 插桩C3P0
APM - 使用JavaAgent+Javassit 插桩C3P0
122 0
|
存储 监控 Java
链路追踪自从用了SkyWalking,睡的真香!
链路追踪自从用了SkyWalking,睡的真香!
|
Arthas SQL 监控
java性能监控利器Arthas
java性能监控利器Arthas
797 0
java性能监控利器Arthas
|
Arthas 监控 Java
【监控系统】Arthas
Arthas 是阿里巴巴开源项目,他是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
375 0
【监控系统】Arthas