JMX在Java编程语言中定义了应用程序以及网络管理和监控的 体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
Jolokia 作为目前最主流的JMX监控组件,spring社区(springboot、MVC、cloud)以及目前主流的中间件服务均采用它作为JMX监控,简单来说,jolokia可以帮助我们解决:
1)JMX可以实现JVM内部运行时数据状态的对外export,我们通过将运行态数据封装成MBean,通过JMX Server统一管理,并允许外部程序通过RMI方式获取数据。总之,JMX允许运行态数据通过RMI协议被外部程序获取。这对我们监控、操作VM内部数据提供窗口。
2)JMX扩展性、可实施能力非常强大,但是其问题就是如果获取MBean数据,需要使用JAVA栈的RMI协议,这对外部程序比如监控组件(非JAVA栈)支持不够良好。
3)jolokia完全兼容并支撑JMX组件,它可以作为agent嵌入到任何JAVA程序中,特别是WEB应用,它将复杂而且难以理解的MBean Filter查询语句,转换成更易于实施和操作的HTTP 请求范式,不仅屏蔽了RMI的开发困难问题,还实现了对外部监控组件的透明度,而且更易于测试和使用。
4)直观来说,jolokia就是用于解决JMX数据获取时,所遇到的RMI协议复杂性、Mbean查询的不便捷、数据库序列化、MBeanServer的托管等问题;我们只需要使用HTTP请求,直接访问与WEB服务相同的port即可获取JMX数据。
这里 HDFS 本身就已经实现了 jmx 的相关内容,可以通过访问 链接 来查看相关的内容信息, 这里我们的思路是,通过 Jolokia 读取 hdfs 本身的 jmx 内容,并通过 telegraf 进行采集信息
这里对 HDFS 集成进行说明
首先下载 Jolokia Jvm-Agent 并重命名, 这里 jar 包里内置了一个微型的 http 服务器
将下载好的 jolokia-jvm-*-agent.jar 放到 hdfs 的各个节点上,建立一个目录 [jolokia_install_path]
修改 $HADOOP_HOME/etc/hadoop/hadoop-env.sh , 添加如下内容
export JOLOKIAJAR="<jolokia_install_path>/jolokia-jvm-1.6.0-agent.jar"
export HADOOP_NAMENODE_OPTS="${HADOOP_NAMENODE_OPTS} -javaagent:${JOLOKIAJAR}=port=7777,host=0.0.0.0"
export HADOOP_DATANODE_OPTS="${HADOOP_DATANODE_OPTS} -javaagent:${JOLOKIAJAR}=port=7778,host=0.0.0.0"
重启 dfs
这里我们需要安装一下 jmx4Perl 工具, 主要是验证 jolokia 对 hdfs jmx 的读取是否有问题
参照 github 进行配置