elk简述
传统日志管理问题
在项目初期的时候,大家都是赶着上线,一般来说对日志没有过多的考虑,当然日志量也不大,所以用log4j就够了,随着应用的越来越多,日志散落在各个服务器的logs文件夹下,确实有点不大方便
当我们需要日志分析的时候你大概会这么做:直接在日志文件中 grep、awk 就可以获得自己想要的信息
我的博客
在项目初期的时候,大家都是赶着上线,一般来说对日志没有过多的考虑,当然日志量也不大,所以用log4j就够了,随着应用的越来越多,日志散落在各个服务器的logs文件夹下,确实有点不大方便
当我们需要日志分析的时候你大概会这么做:直接在日志文件中 grep、awk 就可以获得自己想要的信息
javaagnet为插桩提供入口,javassist实现字节码修改,这部分将记录3个demo,分别是静态agent结合javassist修改方法体,动态agent结合javassist修改方法体,最后一个demo综合使用javaagent和javassist监听c3p0数据源
通过前两节,了解了javaagent相关的知识,无论静态agent还是动态agent都可以在对应用无侵入的情况下实现对应用的监控(拦截),那么我们拦截应用的执行有什么用呢?答案是可以实现应用的监控,对类字节码的修改,动态代理等等,如果要修改类字节码则需要一个工具,这个工具就是javassist
Javassist是一个开源的分析、编辑和创建Java字节码的类库。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成
通过 上一篇博客 可以知道静态javaagent的使用必须在启动项目时加上javagent的相关启动参数,并且premain()方法也总是在main()方法之前执行,因此有一一定的局限性,在java6之后则做出了改变,有另一种方式可以在main方法启动之后执行,而且不需要添加jvm的启动参数
javaagent是java5的新特性,依赖他我们可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义,过程上简单来说就是编写一个特殊的类将其打成jar包,要监控(拦截)的项目在启动时jvm参数加上特殊的启动命令,即可监控该项目
JavaWeb开发中生产环境一般都为linux,因此我们要具有在linux环境下搭建基本的JavaWeb开发常用环境的能力,本篇博客介绍的是linux环境下jdk的安装,tomcat的安装,及mysql数据库的安装
首先明确ThreadLocal并不是解决多线程下共享对象的并发访问而产生的,他也做不到这一点,因为他内部保存的仍然是对象的引用,而不是真的存储的是对象本身,通常使用ThreadLocal保存的对象,是当前线程单独创建(new)的对象,然后通过ThreadLocal.set()放入到当前当前线程中,这样对该对象的操作肯定不会影响到其他线程,其他线程也不需要对该对象进行操作(其他线程想要应该要自己去创建属于该线程自己的对象)
下面代码证明:ThreadLocal存储的是对象引用,无法保证共享对象的线程安全
这一部分内容主要来源网络,这里整理归纳到博客中,阅读之后对ActiveMq有一个基本的认知和了解。
1. ActiveMQ概念
ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE 1.4规范的JMSProvider实现的消息中间件(Message Oriented Middleware,MOM)。