前情提要:
00 写个简单的java应用
在监控之前,我们需要准备一个简单的java web
应用
这里用springboot实现:
- ip:
10.154.0.24
- 端口:
8081
- http请求:
get
- 路径:
/hello
- 返回内容:
hello world
生成jar包:testing.jar
,上传至linux
01 启动参数
通过jmx的方式获取java进程信息,需要在参数中添加(参数按环境填写):
java -jar \
-Dcom.sun.management.jmxremote.port=8999 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=10.154.0.24 \
testing.jar
跑起来就先告一段落啦,接下来数据采集:jmxtrans
02 jmxtrans安装
官方链接:
下载链接:jmxtrans.rpm 安装说明:installation
下载安装:
上传并安装:
yum localinstall -y jmxtrans-271.rpm
03 配置文件
Ⅰ 参数
"port": "8999",
"host": "10.154.0.24",
这两个参数对应java启动参数
中的ip
和port
Ⅱ 数据库
这里使用influxdb数据库,所以这里outputWriters
中的相关配置与influxdb有关
"outputWriters": [{
"@class": "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.154.0.24:8086/",
"username" : "root",
"password" : "root",
"database" : "test",
"tags" : {"application" : "Memory"}
}],
"obj": "java.lang:name=CMS Old Gen,type=MemoryPool",
"resultAlias": "cmsoldgen",
"attr": ["Usage"]
创建文件
目录:cd /var/lib/jmxtrans
创建配置文件:test.json
{
"servers": [{
"port": "8999",
"host": "10.154.0.24",
"queries": [{
"outputWriters": [{
"@class": "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.154.0.24:8086/",
"username" : "root",
"password" : "root",
"database" : "test",
"tags" : {"application" : "Memory"}
}],
"obj": "java.lang:type=Memory",
"resultAlias": "heap",
"attr": ["HeapMemoryUsage", "NonHeapMemoryUsage"]
}, {
"outputWriters": [{
"@class": "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.154.0.24:8086/",
"username" : "root",
"password" : "root",
"database" : "test",
"tags" : {"application" : "MemoryPool"}
}],
"obj": "java.lang:name=CMS Old Gen,type=MemoryPool",
"resultAlias": "cmsoldgen",
"attr": ["Usage"]
}, {
"outputWriters": [{
"@class": "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.154.0.24:8086/",
"username" : "root",
"password" : "root",
"database" : "test",
"tags" : {"application" : "GarbageCollector"}
}],
"obj": "java.lang:type=GarbageCollector,name=*",
"resultAlias": "gc",
"attr": ["CollectionCount", "CollectionTime"]
}],
"numQueryThreads": 2
}]
}
04 启动
启动命令:systemctl start jmxtrans
日志位置:/var/log/jmxtrans/jmxtrans.log
如有报错,可以日志中查看,一般来说是json配置的问题。
查看数据库:
influx
use test
(这里不清楚是否需要手动创建database
:test
)
show measurements
gc
Memory
05 番外 - 使用 jconcole监控进程数据
jsoncole
是jdk
自带的jmx信息抓取程序
jmxtrans
也是用这种方式来抓取数据的,展示页面如下(windows
):
06 番外2 - kafka配置方法
修改文件kafka/bin/kafka-run-class.sh
修改配置,如下
# JMX port to use
if [ $JMX_PORT ] && [ -z "ISKAFKASERVER" ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
fi
# Memory options
if [ -z "$KAFKA_HEAP_OPTS" ]; then
KAFKA_HEAP_OPTS="-Xmx256M"
JMX_PORT="8999"
fi
启动kafka:
bin/kafka-server-start.sh config/server.properties
即可在jconsole上连接