本帖最后由 枫狐狸 于 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 
[Shell] 纯文本查看 复制代码 
#!/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 [t]omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`          #检查tomcat实例路径,如果实例都是root用户启动,在| grep [t]omcat后添加|grep root
#tomcat_no=`ps -ef | grep [t]omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'|wc -l`    #检查tomcat实例数,如果实例都是root用户启动,在| grep [t]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 
[Shell] 纯文本查看 复制代码 
#!/bin/bash
#t_datadir=`ps -ef | grep [t]omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`          #检查tomcat实例路径,如果实例都是root用户启动,在| grep [t]omcat后添加|grep root
#tomcat_no=`ps -ef | grep [t]omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'|wc -l`    #检查tomcat实例数,如果实例都是root用户启动,在| grep [t]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端口 
 
 
 
 
 
 
 
zbx3.0_export_templates.rar
(2.77 KB, 下载次数: 254, 售价: 5 金币)
 
 
 
zbx2.0_export_templates.rar
(2.77 KB, 下载次数: 62, 售价: 5 金币)
 
 
 
 
 
jar包.rar
(27.8 KB, 下载次数: 192)
 
 
 
 
 
tomcat监控安装方法.txt
(749 Bytes, 下载次数: 219)
 
 
 
jmx_discovery.rar
(538 Bytes, 下载次数: 40)
 
 
 
add_service_tomcat.rar
(1.1 KB, 下载次数: 39)
 
 
下面是热心用户回复: 
@xl_young 
脚本我改了下:jmx_discovery.sh 
#!/bin/bash 
t_datadir=`ps -ef | grep [t]omcat | awk '{print $9}'| awk -F"=|conf" '{print $3}'`           
tomcat_no=`ps -ef | grep [t]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 
 
 
 
 
 
 
 
 |