前面了介绍了如何将服务器指标、性能压测指标写入influxdb。本小节写如何将java应用相关指标抓出来写入influxdb,没什么新鲜的还是采用拿来主义借助jmx
配置jmx
https://blog.csdn.net/yue530tomtom/article/details/80805412 这里有
https://blog.csdn.net/yue530tomtom/article/details/80355724 包括obj、attr获取
启动相关java应用
JMXtrans
下载
http://central.maven.org/maven2/org/jmxtrans/jmxtrans/
配置
创建配置文件json或者yaml,以json为例
更多更详细的配置可以参考jmxtrans wiki
{
"servers" : [ {
"port" : "8999",
"host" : "10.255.254.31",
"queries" : [ {
"obj" : "java.lang:type=Memory",
"attr" : [ "HeapMemoryUsage" ],
"resultAlias":"RenameHeapMemoryUsage",
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.255.254.25:8086/",
"username" : "lingyue",
"password" : "123456",
"database" : "testJmx"
} ]
},
{
"obj" : "java.lang:type=Memory",
"attr" : [ "NonHeapMemoryUsage" ],
"resultAlias":"RenameNonHeapMemoryUsage",
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.255.254.25:8086/",
"username" : "lingyue",
"password" : "123456",
"database" : "testJmx"
} ]
} ]
} ]
}
查看jmxtrans帮助
D:\下载>java -jar jmxtrans-270-all.jar --help
Usage: <main class> [options]
Options:
-a, --additional-jars
Default: []
--config
global jmxtrans configuration file
-c, --continue-on-error
If it is false, then JmxTrans will stop when one of the JSON
configuration file is invalid. Otherwise, it will just print an error
and continue processing.
Default: false
-h, --help
-j, --json-directory
-f, --json-file
-q, --quartz-properties-file
The Quartz server properties.
--query-processor-executor-pool-size
Number of threads used to process queries.
Default: 10
--query-processor-executor-work-queue-capacity
Size of the query work queue
Default: 100000
--result-processor-executor-pool-size
Number of threads used to process results
Default: 10
--result-processor-executor-work-queue-capacity
Size of the result work queue
Default: 100000
-e, --run-endlessly
If this is set, then this class will execute the main() loop and then
wait 60 seconds until running again.
Default: false
-s, --run-period-in-seconds
The seconds between server job runs.
Default: 60
--use-separate-executors
If this set every server node will be handed by separate executor.
Default: false
D:\下载>
运行jmxtrans
D:\下载>java -jar jmxtrans-270-all.jar -f "D:\csdn\jmxtrans.json"
2018-09-18 15:32:14 [main] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
2018-09-18 15:32:14 [main] INFO o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2018-09-18 15:32:14 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.1.8.6 created.
2018-09-18 15:32:14 [main] INFO org.quartz.simpl.RAMJobStore - RAMJobStore initialized.
2018-09-18 15:32:14 [main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v1.8.6) 'ServerScheduler' with instanceId 'A06P-A918547D1537255934537'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
2018-09-18 16:08:43 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'ServerScheduler' initialized from an externally opened InputStream.
2018-09-18 16:08:43 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 1.8.6
2018-09-18 16:08:43 [main] INFO org.quartz.core.QuartzScheduler - JobFactory set to: com.googlecode.jmxtrans.guice.GuiceJobFactory@bae7dc0
2018-09-18 16:08:43 [main] INFO c.googlecode.jmxtrans.JmxTransformer - Starting Jmxtrans on : D:\csdn\jmxtrans.json
2018-09-18 16:08:43 [main] INFO org.quartz.core.QuartzScheduler - Scheduler ServerScheduler_$_A06P-A918547D1537258123115 started.
2018-09-18 16:08:43 [main] DEBUG c.g.j.m.output.InfluxDbWriterFactory - Result Tags to write set to: [ResultAttribute(name=typeName), ResultAttribute(name=objDomain), ResultAttribute(name=className), ResultAttribute(name=attributeName)]
2018-09-18 16:08:43 [main] DEBUG c.g.j.m.output.InfluxDbWriterFactory - Connecting to url: http://10.255.254.25:8086/ as: username: lingyue
2018-09-18 16:08:43 [main] DEBUG c.g.j.m.output.InfluxDbWriterFactory - Result Tags to write set to: [ResultAttribute(name=typeName), ResultAttribute(name=objDomain), ResultAttribute(name=className), ResultAttribute(name=attributeName)]
2018-09-18 16:08:43 [main] DEBUG c.g.j.m.output.InfluxDbWriterFactory - Connecting to url: http://10.255.254.25:8086/ as: username: lingyue
2018-09-18 16:08:43 [main] DEBUG c.g.jmxtrans.ConfigurationParser - Loaded file: D:\csdn\jmxtrans.json
2018-09-18 16:08:43 [main] DEBUG c.googlecode.jmxtrans.JmxTransformer - Scheduled job: 10.255.254.31:8999-691317545800932-9828169924 for server: Server(pid=null, host=10.255.254.31, port=8999, url=service:jmx:rmi:///jndi/rmi://10.255.254.31:8999/jmxrmi, cronExpression=null, numQueryThreads=0)
2018-09-18 16:08:47 [ServerScheduler_Worker-1] DEBUG c.googlecode.jmxtrans.jobs.ServerJob - +++++ Started server job: Server(pid=null, host=10.255.254.31, port=8999, url=service:jmx:rmi:///jndi/rmi://10.255.254.31:8999/jmxrmi, cronExpression=null, numQueryThreads=0)
2018-09-18 16:08:47 [ServerScheduler_Worker-1] DEBUG c.googlecode.jmxtrans.jobs.ServerJob - +++++ Finished server job: Server(pid=null, host=10.255.254.31, port=8999, url=service:jmx:rmi:///jndi/rmi://10.255.254.31:8999/jmxrmi, cronExpression=null, numQueryThreads=0)
2018-09-18 16:08:47 [jmxtrans-query-0] DEBUG com.googlecode.jmxtrans.model.Query - Executing queryName [java.lang:type=Memory] from query [Query(objectName=java.lang:type=Memory, keys=[], attr=[HeapMemoryUsage], typeNames=[], resultAlias=RenameHeapMemoryUsage, useObjDomainAsKey=false, allowDottedKeys=false, useAllTypeNames=false, outputWriterInstances=[com.googlecode.jmxtrans.model.output.support.ResultTransformerOutputWriter@1a4b6fd8])]
2018-09-18 16:08:47 [jmxtrans-query-1] DEBUG com.googlecode.jmxtrans.model.Query - Executing queryName [java.lang:type=Memory] from query [Query(objectName=java.lang:type=Memory, keys=[], attr=[NonHeapMemoryUsage], typeNames=[], resultAlias=RenameNonHeapMemoryUsage, useObjDomainAsKey=false, allowDottedKeys=false, useAllTypeNames=false, outputWriterInstances=[com.googlecode.jmxtrans.model.output.support.ResultTransformerOutputWriter@7c1398e9])]
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[committed], value=701497344, epoch=1537258127953, keyAlias=RenameHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[committed], value=80150528, epoch=1537258127953, keyAlias=RenameNonHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameHeapMemoryUsage, time=1537258127953, tags={attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={HeapMemoryUsage_committed=701497344, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameNonHeapMemoryUsage, time=1537258127953, tags={attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={NonHeapMemoryUsage_committed=80150528, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[init], value=526385152, epoch=1537258127953, keyAlias=RenameHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[init], value=2555904, epoch=1537258127953, keyAlias=RenameNonHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameHeapMemoryUsage, time=1537258127953, tags={attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={HeapMemoryUsage_init=526385152, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameNonHeapMemoryUsage, time=1537258127953, tags={attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={NonHeapMemoryUsage_init=2555904, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[max], value=7478968320, epoch=1537258127953, keyAlias=RenameHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[max], value=-1, epoch=1537258127953, keyAlias=RenameNonHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameHeapMemoryUsage, time=1537258127953, tags={attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={HeapMemoryUsage_max=7478968320, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameNonHeapMemoryUsage, time=1537258127953, tags={attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={NonHeapMemoryUsage_max=-1, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[used], value=401319400, epoch=1537258127953, keyAlias=RenameHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Query result: Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[used], value=76808512, epoch=1537258127953, keyAlias=RenameNonHeapMemoryUsage)
2018-09-18 16:08:48 [jmxtrans-result-1] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameHeapMemoryUsage, time=1537258127953, tags={attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={HeapMemoryUsage_used=401319400, _jmx_port=8999}]
2018-09-18 16:08:48 [jmxtrans-result-0] DEBUG c.g.j.model.output.InfluxDbWriter - Point: Point [name=RenameNonHeapMemoryUsage, time=1537258127953, tags={attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory}, precision=MILLISECONDS, fields={NonHeapMemoryUsage_used=76808512, _jmx_port=8999}]
……
默认60s收集一次~
查看influxdb数据库
> show databases
name: databases
name
----
_internal
graphite
> show databases
name: databases
name
----
_internal
graphite
testJmx
> use testJmx
Using database testJmx
> show measurements
name: measurements
name
----
RenameHeapMemoryUsage
RenameNonHeapMemoryUsage
> select * from RenameHeapMemoryUsage
name: RenameHeapMemoryUsage
time HeapMemoryUsage_committed HeapMemoryUsage_init HeapMemoryUsage_max HeapMemoryUsage_used _jmx_port attributeName className hostname objDomain typeName
---- ------------------------- -------------------- ------------------- -------------------- --------- ------------- --------- -------- --------- --------
1537258127953000000 701497344 526385152 7478968320 401319400 8999 HeapMemoryUsage sun.management.MemoryImpl 10.255.254.31 java.lang type=Memory
>
附录
当然不止这一种方法,还可以用collectd的插件GenericJMX或者collectd-fast-jmx在此简单介绍
collectd有丰富的插件可以使用,且collectd插件的安装比较简单,下载jar包,在配置文件中添加相关配置就可以了。
vim collectd.conf
添加相应的配置部分 GenericJMX 参考 、collectd-fast-jmx 参考
~又完成一部分
性能测试平台粗略框架
influxdb基础—介绍和配置
jmeter将统计结果写入influxdb
telegraf将数据写入influxdb
将jmx指标写入influxdb
jenkins创建一个jmeter任务
grafana读取influxdb