百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> zabbix使用jstat自动发现监控tomcat多实例
分享文章到:

zabbix使用jstat自动发现监控tomcat多实例

发布时间:01/15 来源: 浏览: 关键词:
对于多实例监控我们以前介绍过nginx监控了,下面我们来看一篇关于zabbix使用jstat自动发现监控tomcat多实例教程,具体的如下。

使用jstat -gc TOMCAT ID将数据重新排序导入到$TOMCAT文件中,循环执行
但是jstat这条命令在被zabbix执行需要和tomcat启动用户一样的权限,你可以将zabbix-agent使用和tomcat启动用户一样的用户来启动zabbix-agent,也可以visudo

[root@iZ62bxn7uuzZ scripts]# cat jstat.sh
#!/bin/bash
# -------------------------------------------------------------------------------

# -------------------------------------------------------------------------------
# Notice
# Apply zabbix version 2.4.x to 3.0.3
# auto search jmx pid
# You need to understand:
# jstat.sh search pid;jvm_name.sh search tomcat name;jvm_status.sh Obtain $1 transfer
# Automatic discovery jmx monitoring.It applies only to jstat -gc pid it
#################################################################################
tomcat_name=`ps -ef | grep tomcat | grep -v grep | grep -v "jvm_status.sh" | awk -F "=" '{print $NF}' | cut -d "/" -f 3`

for t in ${tomcat_name[@]};do
        t_id=`ps -ef | grep  "$t/" | grep -v "grep" | awk '{print $2}'`
        /usr/java/jdk1.7.0_79/bin/jstat -gc $t_id | awk 'BEGIN{FS=" "}{for(i = 1;i <= NF;i++) {array[i,NR]=$i}}END {for(i = 1;i <= NF;i++) {for(j = 1;j <= NR;j++) {printf "%s ",array[i,j]}printf "\n"}}' > /tmp/"$t".gc
done


自动发现tomcat路径,以路径命名

[root@iZ62bxn7uuzZ scripts]# cat jvm_name.sh
#!/bin/bash
# -------------------------------------------------------------------------------

# -------------------------------------------------------------------------------
# Notice
# Apply zabbix version 2.4.x to 3.0.3
# auto search jmx name.
# You need to understand:
# jstat.sh search pid;jvm_name.sh search tomcat name;jvm_status.sh Obtain $1 transfer
# Automatic discovery jmx monitoring.It applies only to jstat -gc pid it
#################################################################################
tomcat_name=`ps -ef | grep tomcat | grep -v grep | awk -F "=" '{print $NF}' | cut -d "/" -f 3`
falg=0
count=`ps -ef | grep tomcat | grep -v grep | wc -l`
if [ $count == 0 ];then
exit
fi
echo '{"data":['
echo "$tomcat_name" |while read LINE;do
echo -n '{"{#JVMNAME}":"'$LINE'"}'
flag=`expr $flag + 1`
if [ $flag -lt $count ];then
echo ','
fi
done
echo ']}'


这里其实可简写:

[root@iZ62bxn7uuzZ scripts]# cat jvm_status.sh
#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    jvm_status.sh

# -------------------------------------------------------------------------------
# Notice
# Apply zabbix version 2.4.x to 3.0.3
# auto search jmx name
# You need to understand:
# jstat.sh search pid;jvm_name.sh search tomcat name;jvm_status.sh Obtain $1 transfer
# Automatic discovery jmx monitoring.It applies only to jstat -gc pid it
#################################################################################
t=$1
jvm_key=$2
cat /tmp/"$t".gc | grep -w "$jvm_key" | awk '{print $2}'

随便过滤下http的线程数即可:

jvm_thread_num.sh
#!/bin/sh
jvmname=$1
pid=`ps -ef | grep "$jvmname" | grep -v grep | grep -v "$0"| awk '{print $2}' `
jvm_status=`sudo -u ody /usr/local/java/jdk1.7.0_80/bin/jstack "$pid" > /data/zabbix/shell/jstack.txt`
function all {
    cat /data/zabbix/shell/jstack.txt | grep http|wc -l
         } 
function runnable {
    cat /data/zabbix/shell/jstack.txt | grep http|grep runnable|wc -l
          }
$2

在配置文件中添加即可:

UserParameter=jvm.name,/usr/local/zabbix/scripts/jvm_name.sh
UserParameter=jvm.thread.num[*],/usr/local/zabbix/scripts/jvm_thread_num.sh $1 $2
UserParameter=jvm.status[*],/usr/local/zabbix/scripts/jvm_status.sh $1 $2

计划任务中需要每分钟执行循环脚本追加文件,保持每分钟的最新状态

*/1 * * * * /bin/bash /usr/local/zabbix/scripts/jstat.sh 2>/dev/null
jstat:

check_mode() {
    tomcat_name=`ps -ef | grep tomcat | grep -v grep | grep -v "jvm_status.sh" | awk -F "=" '{print $NF}' | cut -d "/" -f 3`

for t in ${tomcat_name[@]};do
   t_id=`ps -ef | grep  "$t/" | grep -v "grep" | awk '{print $2}'`
   /usr/java/jdk1.7.0_79/bin/jstat -gc $t_id | \
   awk 'BEGIN{FS=" "}{for(i=1;i<=NF;i++) {array[i,NR]=$i}}END {for(i = 1;i <= NF;i++) {for(j = 1;j <= NR;j++) {printf "%s ",array[i,j]}printf "\n"}}' > /tmp/"$t".gc
        done
}

while :; do
        check_mode
        sleep 60
done

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有3人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板