前言
categraf采集器如何监控java程序呢,之前这方面的文档比较少,我从官网找到了这篇JVM监控 打算按照这里说明实践一下进程级监控的方式。
procstat插件
这个procstat插件是怎么实现呢,‘如果配置了 jvm 这一项,会通过 jstat 采集一些 jvm 相关的指标,前提是机器上得有 jstat 命令可以用。’ 也就是用的jstat命令,这个是啥,还有其他命令吗,经我查找是有的,还挺多命令可选,详细如下表所示。
工具名称 | 主要功能 | 功能描述 | 优点 | 缺点 |
---|---|---|---|---|
jps | 进程状态查询 | 列出正在运行的Java进程及其主类 | 简单易用 | 仅能列出Java进程的基本信息 |
jstat | 虚拟机统计监视 | 收集并显示虚拟机各种运行数据,如垃圾回收时间、堆使用率、类加载数量等 | 数据实时性好,能够实时反映虚拟机的状态信息 | 只能查看当前虚拟机数据,不能进行历史数据的查找 |
jstack | 线程快照 | 生成Java应用程序线程的转储快照,帮助用户进行线程问题的排查 | 可以查看具体线程的状态、堆栈信息等 | 无法监控虚拟机以外的信息,如系统负载等 |
jmap | 内存映像 | 生成Java堆转储快照,帮助用户进行内存问题的诊断 | 可以对Java堆进行快速分析定位 | 无法实时监控Java应用程序的状态信息 |
jcmd | 通用命令行工具 | 操作正在运行的Java进程,包括获取JVM运行状态信息、执行GC、打印线程Dump等等多种操作 | 功能比较丰富,支持多种操作 | 需要以root或JVM所属用户的权限运行 |
我之前通常程序运行后可以通过ps -ef | grep java
看到进程信息,不过catgraf用的是pgrep命令,所以可以用pgrep java
看到相关信息,
pgrep java
9278
当得到这个输出我其实是有一个疑问的,这里怎么只有一个呢,感觉不对呀,我印象中idea用的是jvm,怎么没有呢,原来是它改名了,怎么可以看全呢?答案是上面表格里的jps命令就可以。
jps -l
80673
14673 jdk.jcmd/sun.tools.jps.Jps
9278 ./xxxx.jar
进程号80673,就是idea的进程,至于如何改进程名称这部分网上有很多分享,除了程序去改,还有用软链接方式来实现改名的方式,大家可以自行查找并实践。
剩下内容就很简单,按说明改配置文件
vi conf/input.procstat/procstat.toml
# # collect interval
interval = 15
# [[instances]]
# # executable name (ie, pgrep <search_exec_substring>)
search_exec_substring = "java"
# # pattern as argument for pgrep (ie, pgrep -f <search_cmdline_substring>)
# search_cmdline_substring = "n9e server"
# # windows service name
# search_win_service = ""
# # search process with specific user, option with exec_substring or cmdline_substring
# search_user = ""
# # append some labels for series
labels = { region="JVM", product="n9e" }
# # interval = global.interval * interval_times
# interval_times = 1
# # mode to use when calculating CPU usage. can be one of 'solaris' or 'irix'
mode = "irix"
# sum of threads/fd/io/cpu/mem, min of uptime/limit
gather_total = true
# will append pid as tag
gather_per_pid = false
# gather jvm metrics only when jstat is ready
gather_more_metrics = [
# "threads",
# "fd",
# "io",
# "uptime",
"cpu",
"mem",
# "limit",
"jvm"
]
上面是个错误的配置,希望你一下子能发现,不至于和我一样掉到自己挖的坑里:)
我自信满满的准备测试一把
./categraf --test --inputs procstat
I! tracing disabled
main.go:128: I! runner.binarydir: /Users/xxx/Tarball/categraf
main.go:129: I! runner.hostname: bogon
main.go:130: I! runner.fd_limits: (soft=61440, hard=unlimited)
main.go:131: I! runner.vm_limits: (soft=unlimited, hard=unlimited)
provider_manager.go:61: I! use input provider: [local]
traces_agent.go:19: I! traces agent disabled!
prometheus_agent.go:19: I! prometheus scraping disabled!
ibex_agent.go:19: I! ibex agent disabled!
agent.go:39: I! agent starting
agent.go:47: I! [*agent.MetricsAgent] started
agent.go:50: I! agent started
本来我刚想吐槽Categraf,是不是有啥问题,再细看配置,好嘛不怪Categraf没反应,忙活半天我配置改错了。
错误地方就是# [[instances]]
,另外instances代表一个实例,可以配置多个。
改好配置后就可以看到输出了。
11:49:53 procstat_lookup_count agent_hostname=bogon product=n9e region=JVM search_string=java 1
11:49:53 procstat_cpu_usage_total agent_hostname=bogon product=n9e region=JVM search_string=java 0
11:49:53 procstat_mem_usage_total agent_hostname=bogon product=n9e region=JVM search_string=java 0.16126633
11:49:53 procstat_jvm_S0U agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.0
11:49:53 procstat_jvm_EC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 126976.0
11:49:53 procstat_jvm_OC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 133120.0
11:49:53 procstat_jvm_MC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 14976.0
11:49:53 procstat_jvm_OU agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 2016.0
11:49:53 procstat_jvm_MU agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 14763.8
11:49:53 procstat_jvm_FGCT agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.000
11:49:53 procstat_jvm_CGC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0
11:49:53 procstat_jvm_S1U agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 5308.2
11:49:53 procstat_jvm_CCSC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 1984.0
11:49:53 procstat_jvm_CCSU agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 1915.7
11:49:53 procstat_jvm_FGC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0
11:49:53 procstat_jvm_GCT agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.020
11:49:53 procstat_jvm_CGCT agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.000
11:49:53 procstat_jvm_S0C agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.0
11:49:53 procstat_jvm_S1C agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 6144.0
11:49:53 procstat_jvm_EU agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.0
11:49:53 procstat_jvm_YGC agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 2
11:49:53 procstat_jvm_YGCT agent_hostname=bogon pid=9278 product=n9e region=JVM search_string=java 0.020