枫狐狸 发表于 2016-6-8 09:24:10

监控一台主机上多个tomcat实例5.11修正一个语法问题

本帖最后由 枫狐狸 于 2017-6-7 12:19 编辑

20170511:修改一个语法问题例至提取不到应用路径的问题,因为tomcat启动后的进程里有关路径的列号不统一,所以调整了一下提取方式,本例中的tomcat应用采用标准化安装,所以都放在一个目录下,所以不再用进程查找了,直接在目录下提取。两个附件已更新,需要的可自己下载后修改。
************jmx_discovery.sh、add_service_tomcat.sh************
t_datadir=`find /home/*/tomcat*/bin/ -name catalina.sh|awk -F"/bin/catalina.sh" '{print $1}'`
tomcat_no=`find /home/*/tomcat*/bin/ -name catalina.sh|awk -F"/bin/catalina.sh" '{print $1}'|wc -l`   
*********************************************************

注意事项:1、因为unix版本不同的关系,某些命令提取数据的列可能不同。
2、本例都是提取网卡1的数据,请自行跟据需要修改网卡号。

方法说明:
1、首先在catalina.sh中添加监控接口,并重启tomcat服务
2、使用jmx_discovery.sh生成监控清单
3、修改zabbix_agentd配置,并重启服务

操作步骤:
1、上传 catalina-jmx-remote.jar,cmdline-jmxclient-0.10.3.jar,jmx_discovery.sh 和 add_service_tomcat.sh 到 /tmp/目录下
2、给 add_service_tomcat.sh 赋执行权限,并执行

3、zabbix服务端对主机添加模版

脚本说明:
add_service_tomcat.sh

#!/bin/bash
cp /tmp/jmx_discovery.sh /home/zabbix/bin/jmx_discovery.sh                           #复制文件
mv /tmp/cmdline-jmxclient-0.10.3.jar /lib/cmdline-jmxclient-0.10.3.jar               #复制文件

#t_datadir=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`          #检查tomcat实例路径,如果实例都是root用户启动,在| grep omcat后添加|grep root
#tomcat_no=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'|wc -l`    #检查tomcat实例数,如果实例都是root用户启动,在| grep omcat后添加|grep root

因为lunix版本的及命令格式等问题,上面两句不一定能得到正确路径,所以用下面两句替换上面两行,各自改下你们安装tomcat的路径即可。
t_datadir=`find /home/*/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`      
tomcat_no=`find /home/*/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`


n_port=12345                                                                              #配置监控初始端口
local_ip=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'`                                 #提取主机IP
for tomcat in $t_datadir
do
    m_no=`cat -n $tomcat/bin/catalina.sh|grep 'Execute The Requested Command'|awk '{print $1}'`    #提取代码插入位置
    cp $tomcat/bin/catalina.sh$tomcat/bin/catalina.sh_bak                                        #备份catalina.sh
    cp /tmp/catalina-jmx-remote.jar$tomcat/lib/catalina-jmx-remote.jar                           #复制文件到实例lib目录
    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"'$tomcat/bin/catalina.sh                        #插入监控配置
    let "m_no=m_no+1"                                                                                                                      #设置行号
    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname='$local_ip'"' $tomcat/bin/catalina.sh               #插入监控配置
    let "m_no=m_no+1"                                                                                                                      #设置行号
    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port='$n_port'"' $tomcat/bin/catalina.sh          #插入监控配置
    let "m_no=m_no+1"                                                                                                                      #设置行号
    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"' $tomcat/bin/catalina.sh               #插入监控配置
    let "m_no=m_no+1"                                                                                                                      #设置行号
    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"' $tomcat/bin/catalina.sh      #插入监控配置
    let "n_port=n_port+1"
done

local_ip=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'`               #提取主机IP

cat >> /etc/zabbix/zabbix_agentd.conf <<END                                 #修改zabbix_agentd.conf,添加KEY
UserParameter=java.jmx.discovery,/home/zabbix/bin/jmx_discovery.sh
UserParameter=java.Runtime.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Runtime \$2 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.Memory.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory \$2 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.System.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=OperatingSystem \$2 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.HeapMemoryUsage.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.NonHeapMemoryUsage.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.LoadClass.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=ClassLoading \$2 2>&1 |awk '{print \$NF}'
UserParameter=java.Threading.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Threading \$2 2>&1 |awk '{print \$NF}'
END

chmod +x /home/zabbix/bin/jmx_discovery.sh
rm -rf /tmp/jmx_discovery.sh
rm -rf /tmp/add_service_tomcat.sh
rm -rf /tmp/catalina-jmx-remote.jar
service zabbix_agentd restart
ps -ef|grep java
tomcat_stop
tomcat_start
ps -ef|grep java




jmx_discovery.sh

#!/bin/bash
#t_datadir=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`          #检查tomcat实例路径,如果实例都是root用户启动,在| grep omcat后添加|grep root
#tomcat_no=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'|wc -l`    #检查tomcat实例数,如果实例都是root用户启动,在| grep omcat后添加|grep root

因为lunix版本的及命令格式等问题,上面两句不一定能得到正确路径,所以用下面两句替换上面两行,各自改下你们安装tomcat的路径即可。
t_datadir=`find /home/*/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`      
tomcat_no=`find /home/*/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`

n_port=12345                                                                              #配置监控初始端口
i=1
printf '{"data":[\n'

for tomcat in $t_datadir                                                                  #输出JSON文件
do
    t_service=`echo "$tomcat"|awk -F"/" '{print $(NF-1)}'`
    if [ "$i" != ${tomcat_no} ];then
      printf "\t\t{ \n"
      printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"
      printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n"
    else
      printf "\t\t{ \n"
      printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"
      printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n"
    fi
    let "n_port=n_port+1"
    let "i=i+1"
done

效果:
tomcat实例名会和添加的监控端口绑定,如下图的01绑定为12345端口,02绑定为12346端口




















下面是热心用户回复:
@xl_young
脚本我改了下:jmx_discovery.sh
#!/bin/bash
t_datadir=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`         
tomcat_no=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'|wc -l`   
#n_port=12345                                                                              
printf '{"data":[\n'

for tomcat in $t_datadir                                                                  
do
    t_service=`echo "$tomcat"|awk -F"/" '{print $(NF-1)}'`
    t_port=`cat "$tomcat"bin/catalina.sh|grep 1234|awk -F"'" '{print $2}'`
    if [ "$i" != ${tomcat_no} ];then
      printf "\t\t{ \n"
      printf "\t\t\t\"{#JMX_PORT}\":\"${t_port}\",\n"
      printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n"
    else
      printf "\t\t{ \n"
      printf "\t\t\t\"{#JMX_PORT}\":\"${t_port}\",\n"
      printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n"
    fi
done







xl_young 发表于 2016-9-12 17:20:14

脚本我改了下:jmx_discovery.sh
#!/bin/bash
t_datadir=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`         
tomcat_no=`ps -ef | grep omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'|wc -l`   
#n_port=12345                                                                              
printf '{"data":[\n'

for tomcat in $t_datadir                                                                  
do
    t_service=`echo "$tomcat"|awk -F"/" '{print $(NF-1)}'`
    t_port=`cat "$tomcat"bin/catalina.sh|grep 1234|awk -F"'" '{print $2}'`
    if [ "$i" != ${tomcat_no} ];then
      printf "\t\t{ \n"
      printf "\t\t\t\"{#JMX_PORT}\":\"${t_port}\",\n"
      printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n"
    else
      printf "\t\t{ \n"
      printf "\t\t\t\"{#JMX_PORT}\":\"${t_port}\",\n"
      printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n"
    fi
done

崖山 发表于 2016-7-5 14:57:01

多谢分享

精神力量 发表于 2016-7-7 09:51:27

回贴赚金币啦

denghua9968 发表于 2016-8-21 00:20:43

找了好久的资源,终于找到了

denghua9968 发表于 2016-8-21 00:21:41

3.0的资源可以下载吗

秦世杰 发表于 2016-8-22 13:50:29

赚金币下载

秦世杰 发表于 2016-8-22 13:51:15

赚金币下载

秦世杰 发表于 2016-8-22 13:51:22

赚金币下载

秦世杰 发表于 2016-8-22 13:51:29

赚金币下载

秦世杰 发表于 2016-8-22 13:51:41

赚金币下载

秦世杰 发表于 2016-8-22 13:51:59

赚金币下载

秦世杰 发表于 2016-8-22 13:52:07

赚金币下载

秦世杰 发表于 2016-8-22 13:52:25

赚金币下载

秦世杰 发表于 2016-8-22 13:52:38

赚金币下载

秦世杰 发表于 2016-8-22 13:52:52

赚金币下载

秦世杰 发表于 2016-8-22 13:52:58

赚金币下载

秦世杰 发表于 2016-8-22 13:53:16

赚金币下载

秦世杰 发表于 2016-8-22 13:53:24

赚金币下载

秦世杰 发表于 2016-8-22 13:53:41

3.0的资源可以下载吗

秦世杰2 发表于 2016-8-22 13:55:54

http://www.iyunv.com/thread-227674-1-1.html
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 监控一台主机上多个tomcat实例5.11修正一个语法问题