监控一台主机上多个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
脚本我改了下: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 多谢分享 回贴赚金币啦 找了好久的资源,终于找到了 3.0的资源可以下载吗 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 赚金币下载 3.0的资源可以下载吗 http://www.iyunv.com/thread-227674-1-1.html