利用jstat 自动发现监控java程序

利用jstat 自动发现监控java程序

这个项目搞了好几天,总结了一下原因:

  1. 对自动发现注册监控不了解原理,之前有遗留的脚本很多都不支持不能
  2. 用对脚本还不能够完全掌握,有时间还是要好好看看
  3. 还是思路问题,解决问题的方法千千万,不要吊死在一棵树上,多试试几种死法本人比较懒,之前打算使用jmx监控,发现公司使用的supervisorctl 管理jar包启动,自己也是第一次使用,这里不做赘述。
  4. 使用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代已使用的占当前容量百分比

干货直接撸

脚本一 :


[[email protected] 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(‘\n‘):
    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 来获取数据查看一下是否能正常获取到数据

原文地址:https://blog.51cto.com/innocence/2464465

时间: 2024-10-28 19:07:13

利用jstat 自动发现监控java程序的相关文章

zabbix自动发现监控多台mysql

1: 前言 由于前面写的博客,zabbix自动发现监控redis.zabbix自动发现监控mongo这两篇博客虽然都能自动发现并监控,但是由于每个zabbix_agentd都得配置,监控起来非常不方便,因此,再做了个模板,能够自动发现并监控多台mysql.这个方法在监控mongo.redis或者mysql主从等时候也都适用. 2: 在zabbix_agentd下编写自动发现并监控多台mysql的脚本,脚本如下: #!/bin/sh #zhuangweihong 20160512 zabbix d

Zabbix自动发现监控Mysql数据库

结果图展现 先让大家看下结果图,Zabbix通过自动发现监控Mysql每秒的增.删.改.查,通过自动发现监控Mysql的流入流出流量,结果图如下: Mysql给Zabbix监控的权限 首先创建一个监控用户,usage on为比较小的权限,较安全.sql如下 grant usage on *.* to 'monitor'@'127.0.0.1' identified by 'shijiangepwd'; flush privileges; 测试监控用户是否生效,测试结果如下 mysql -umon

zabbix企业应用:利用自动发现监控IIS站点

如果一台windows server有许多个IIS站点,我们想实现这样一个监控目标:监控每个站点的状态.请求.流量.连接数,而且以后新增加的站点也可以自动加入到监控里,不需要再手动添加. 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 先看一下监控的效果: 上图中的"Web Service(wskh)"是指IIS网站名称为wskh:"Web Service(_Total)"是指IIS下所有的站点. 网站流量

(转)利用JConsole工具监控java程序内存和JVM

转自:http://www.cnblogs.com/luihengk/p/5446279.html 一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29.218:7070/training/ 部署的应用服务器为tomcat6.028 启动tomcat服务器后,任务管理器里可以看到多了java.exe进程,如图 PS:这里启动了多个其他程序 2.查询测试应用程序对应的进程PID号(根据端口号查找) 1)  Cmd命令:netstat  -aon|fi

JConsole监控Java程序的运行情况

JConsole 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JConsole(或者,它更高端的 "近亲" VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码. 注:现在jdk已经发展到jdk8版本,在这我安装的是jdk8,所以以jdk8给大家分享jconsole的一些简单用法 二 .jconsole的启动问题 我现

zabbix3.0自动发现监控IIS

说明此处配置针对的是zabbix3.0版本 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 效果图: 具体配置步骤: 1.  zabbix服务端配置 配置过滤正则表达式: 依次选择Administration->General->Regular expressions.创建新的正则表达式"IISSite for discovery",会在后面的模板中引用.正则表达式的名字不能有错,否则导入模板报错. 导入模块 将内

zabbix自动发现监控tomcat健康页面

一.背景 公司系统平台有10几个tomcat服务,由于需要服务保持全年无间断服务,特在tomcat中嵌入专门的监控页面,在curl 专用页面返回值为200时,则认定服务正常运行,否则报警发送专门的监控运维的邮箱. 二.原理 正常的tomcat健康状态监控页面如下图 我们利用如下命令判断返回值是否为200 shell>/usr/bin/curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}' http://10.0.0.107:9100/

zabbix自动发现监控mongo

1: zabbix自动发现mongo监控的端口,并返回zabbix_server需要的格式,脚本部署在zabbix_agent上,路径为/usr/local/zabbix/zabbix_discover_mongo.sh,脚本内容如下: #!/bin/sh #zhuangweihong 20160419 zabbix discover mysql res=`sudo ss -tulnp|grep mongo|grep -v 28107|awk '{print $(NF-2)}'|awk -F':

利用IKVM在C#中调Java程序

原文转自:http://luanxiyuan.iteye.com/blog/1937081 IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.),希望能给大家带来惊喜.如果只想知道怎么使用的请直接跳转到第五步使用入门. 一.介绍 IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.它包含了以