open-falcon之JMX监控(五)
一、JMX监控
1.1 jmxmon简介
jmxmon是一个基于open-falcon的jmx监控插件,通过这个插件,结合open-falcon agent,可以采集任何开启了JMX服务端口的java进程的服务状态,并将采集信息自动上报给open-falcon服务端。
主要功能:
通过jmx采集java进程的jvm信息,包括gc耗时、gc次数、gc吞吐、老年代使用率、新生代晋升大小、活跃线程数等信息。对应用程序代码无侵入,几乎不占用系统资源。
环境需求:
Linux
JDK>=1.6
Open-Falcon>=0.0.5
目标java进程开启jmx端口
采集指标:
Counters | Type | Notes |
---|---|---|
parnew.gc.avg.time | GAUGE | 一分钟内,每次YoungGC(parnew)的平均耗时 |
concurrentmarksweep.gc.avg.time | GAUGE | 一分钟内,每次CMSGC的平均耗时 |
parnew.gc.count | GAUGE | 一分钟内,YoungGC(parnew)的总次数 |
concurrentmarksweep.gc.count | GAUGE | 一分钟内,CMSGC的总次数 |
gc.throughput | GAUGE | GC的总吞吐率(应用运行时间/进程总运行时间) |
new.gen.promotion | GAUGE | 一分钟内,新生代的内存晋升总大小 |
new.gen.avg.promotion | GAUGE | 一分钟内,平均每次YoungGC的新生代内存晋升大小 |
old.gen.mem.used | GAUGE | 老年代的内存使用量 |
old.gen.mem.ratio | GAUGE | 老年代的内存使用率 |
thread.active.count | GAUGE | 当前活跃线程数 |
thread.peak.count | GAUGE | 峰值线程数 |
建议设置监控告警项:
博文来自:www.51niux.com
不同应用根据其特点,可以灵活调整触发条件及触发阈值
告警项 | 触发条件 | 备注 |
---|---|---|
gc.throughput | all(#3)<98 | gc吞吐率低于98%,影响性能 |
old.gen.mem.ratio | all(#3)>90 | 老年代内存使用率高于90%,需要调优 |
thread.active.count | all(#3)>500 | 线程数过多,影响性能 |
1.2 jmxmon部署(以Hadoop集群为例)
#哪个客户端需要采集这个都要安装哈
#wget https://github.com/toomanyopenfiles/jmxmon/releases/download/v0.0.2/jmxmon-v0.0.2.tar.gz
#tar zxf jmxmon-v0.0.2.tar.gz
#cp -rf jmxmon-v0.0.2 /home/work/open-falcon/
#cd /home/work/open-falcon/jmxmon-v0.0.2/
#cp conf.example.properties conf.properties
# vim conf.properties
# 工作目录用来存放jmxmon的临时缓存文件,注意不要修改此目录下的文件 workDir=./ # 需要监听的本地jmx端口,支持监听多个端口,多端口用逗号分隔 jmx.ports=10012,10001 #这里的端口根据自己的实际端口改 # 本地agent的上报url,如果使用open-falcon的默认配置,则这里不需要改变 agent.posturl=http://localhost:1988/v1/push # 可选项:上报给open-falcon的endpoint,默认值为本机hostname。不建议修改 #hostname=slave02.hadoop # 可选项:上报给open-falcon的上报间隔,默认值60,单位秒。不建议修改 #step=
#./control start #启动服务
#./control tail #现在查看肯定是要报错的,报错如下,为啥因为你程序的jmx端口还没启动呢,所以采集不到数据会有报错
2018-11-25 19:21:32,346 [main] INFO [com.stephan.tof.jmxmon.Config] - /home/work/open-falcon/jmxmon-v0.0.2/./jmxmon.jvm.context.json is not exist 2018-11-25 19:21:32,346 [main] INFO [com.stephan.tof.jmxmon.Config] - init config ok 2018-11-25 19:22:06,116 [pool-1-thread-1] ERROR [com.stephan.tof.jmxmon.JMXMonitor] - error during JRMP connection establishment; nested exception is: java.io.EOFException java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: java.io.EOFException
# jps
47229 JMXMonitor #每个启动的节点都会有这个进程
# ps -ef|grep jmxmon
root 47229 1 2 22:49 pts/1 00:00:02 java -cp ./jmxmon-0.0.2-jar-with-dependencies.jar com.stephan.tof.jmxmon.JMXMonitor conf.properties
1.3 hadoop集群设置一下jmx端口
# vim /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh #再文件最末尾天下下面的配置
# Extra Java runtime options. Empty by default. export HADOOP_OPTS="-Djava.rmi.server.hostname=127.0.0.1 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.access.file=$HADOOP_CONF_DIR\jmxremote.access \ -Dcom.sun.management.jmxremote.password.file=$HADOOP_CONF_DIR\jmxremote.password" # Command specific options appended to HADOOP_OPTS when specified export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS -Dcom.sun.management.jmxremote.port=10010" export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS -Dcom.sun.management.jmxremote.port=10011" export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS -Dcom.sun.management.jmxremote.port=10012"
# vim /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh #在文件最末尾添加下面的配置
YARN_OPTS="$YARN_OPTS -Dcom.sun.management.jmxremote.authenticate=false" YARN_OPTS="$YARN_OPTS -Dcom.sun.management.jmxremote.port=10001" YARN_OPTS="$YARN_OPTS -Dcom.sun.management.jmxremote.ssl=false"
#然后重启hadoop集群。
博文来自:www.51niux.com
namenode节点查看:
# netstat -lntup|grep 100
tcp 0 0 0.0.0.0:10010 0.0.0.0:* LISTEN 20630/java tcp6 0 0 :::10001 :::* LISTEN 20938/java
datanode节点查看:
# netstat -lntup|grep 100
tcp 0 0 0.0.0.0:10012 0.0.0.0:* LISTEN 24598/java tcp6 0 0 :::10001 :::* LISTEN 23904/java
SecondaryNameNode节点查看:
# netstat -lntup|grep 100
tcp 0 0 0.0.0.0:10012 0.0.0.0:* LISTEN 41822/java tcp 0 0 0.0.0.0:10011 0.0.0.0:* LISTEN 41893/java tcp6 0 0 :::10001 :::* LISTEN 41973/java
1.4 日志查看
# tail -f var/app.log
#上图是每分钟发送一次的消息信息。
1.5 dashboard查看
#点开某一个metric可以查看多个机器在一起的指标。
二、Screen设置
#前面看到metric都得是一一点开才能查看图形,如何将多个metric的图放到一个屏幕里,把一些重要机器或者集群里面的数据图放到一个屏幕里面全局一览,非常好的一个功能。
#好久以上面的hadoop的JMX监控为例,我们把采集到的数据做一些Screen。
博文来自:www.51niux.com
2.1 Screen的创建
添加一个新的screen:
screen/screen下的界面功能:
+graph操作:
克隆graph:
#如果想克隆哪个graph,就要点击某个图的编辑
2.2 最后查看一下
#我只截图了一部分,这样不同的metric就能在一个屏幕显示了,很直观的查看。