利用jstat 自动发现监控java程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用jstat 自动发现监控java程序相关的知识,希望对你有一定的参考价值。
利用jstat 自动发现监控java程序这个项目搞了好几天,总结了一下原因:
- 对自动发现注册监控不了解原理,之前有遗留的脚本很多都不支持不能
- 用对脚本还不能够完全掌握,有时间还是要好好看看
- 还是思路问题,解决问题的方法千千万,不要吊死在一棵树上,多试试几种死法本人比较懒,之前打算使用jmx监控,发现公司使用的supervisorctl 管理jar包启动,自己也是第一次使用,这里不做赘述。
-
使用jstat 命令来获取参数,这里使用的是计划任务,之前放在脚本中,服务搞死了 哈哈哈
干货在这里直接上:
监控指标:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数 !
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数 !
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
干货直接撸
脚本一 :
[root@iZj6chku2ng9ofxksew0oiZ userparameter_scripts]# cat java_name_discovery.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import subprocess
import simplejson as json
t=subprocess.Popen("ps -ef | grep java|grep -vE ‘(grep|/bin/bash)‘|awk ‘{print $9}‘|awk -F ‘=‘ ‘{print $2}‘",stdout=subprocess.PIPE,shell=True).communicate()[0]
#data=t.stdout.readlines()
#print(data)
tomcats=[]
for tomcat in t.split(‘
‘):
if len(tomcat) != 0:
tomcats.append({‘{#TOMCAT_NAME}‘:tomcat})
# 打印出zabbix可识别的json格式
print json.dumps({‘data‘:tomcats},sort_keys=True,indent=4,separators=(‘,‘,‘:‘))
此脚本用于自动发现java程序打印名称,返回成json 格式 ,供zabbix来读取!
需要有pip命令,并安装相关模块
脚本二:
#!/bin/bash
JAVA_NAME=$1
STATUS=$2
export PATH=$PATH:/usr/java/jdk1.8.0_144/bin/
PID=$(ps -ef | grep $JAVA_NAME | grep ‘/bin/java‘ | grep -v grep | awk ‘{print $2}‘)
#echo $PID
fun1 () {
# echo "1"
jstat -gc $PID | awk -v st=$STATUS ‘{for(i=1;i<=NF;i++) if($i ==st) n=i} END{print $n}‘
}
fun2 () {
# echo "2"
jstat -gcutil $PID | awk -v st=$STATUS ‘{for(i=1;i<=NF;i++) if($i ==st) n=i} END{print $n}‘
}
case $STATUS in
"S0C"| "S1C"|"S0U"|"S1U"|"EC"|"EU"|"OC"|"OU"| "YGC"|"YGCT"|"FGC"|"FGCT")
fun1;;
"S0"|"S1"|"E"|"O")
fun2;;
*)echo "print number error"
exit1;;
esac
Zabbix 配置文件
UserParameter=java.name.discovery,sudo /usr/bin/python /etc/zabbix/zabbix_agentd.d/userparameter_scripts/java_name_discovery.py
UserParameter=java.status.monitor[*],sudo /etc/zabbix/zabbix_agentd.d/userparameter_scripts/java_status_monitor.sh $1 $2
关于权限这里需要注意一下:sudo 免密配置
visudo
zabbix ALL=(ALL) NOPASSWD: ALL. #免密
Defaults:zabbix !requiretty #不需要登陆
Zabbix 配置文件需要修改的地方:
AllowRoot=1 #AllowRoot=1(允许以root运行)
注意:修改配置后重启zabbix-agent ,利用zabbix_get 来获取数据查看一下是否能正常获取到数据
以上是关于利用jstat 自动发现监控java程序的主要内容,如果未能解决你的问题,请参考以下文章