將jmx指標寫入influxdb

前面了介紹瞭如何將服務器指標、性能壓測指標寫入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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章