|
要实现Zabbix LLD监控,通常需要两个脚本,一个自定义发现check脚本,并输出成Json格式,另一个才是获取监控项values的脚本。
自定义发现checks脚本输出结果为以下形式:
{
"data": [
{
"{#APP_NAME}": "AppCMDB"
},
{
"{#APP_NAME}": "AppMerchantWebApi"
},
{
"{#APP_NAME}": "AppNOC"
},
{
"{#APP_NAME}": "AppSSO"
}
]
}
用python写这样的脚本非常方便,那么如何用shell写呢?
先看一个实例:
公司需要生生产服务器的APP进程进行监控,监控项为CPU使用率、内存使用大小和进程启动数。
App目录都放在/workspace/carkey/ 目录下
root@localhost:/workspace/carkey# ls
aaa AppCMDB AppNOC AppSSO AppYunboWeb get_app.sh
apache-tomcat-8.0.28 AppMerchantWebApi AppPms AppTest bbb.py
所有App开头的目录都是公司APP目录,其他的不是。这些App都是JAVA程序,启动后进程名可以通过
ps -ef | grep App_name 匹配到,例如
[root@PMS001 ~]# ps -ef | grep AppPms
root 4698 1 0 Jul13 ? 00:00:28 /usr/java/latest/bin/java -Djava.util.logging.config.file=/workspace/carkey/AppPms/latest/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m -Xms512M -Xmx1024M -server -XX:+UseParallelGC -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/workspace/carkey/AppPms/latest -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/workspace/carkey/AppPms/latest/temp org.apache.catalina.startup.Bootstrap start
现需要对所有的App进程进行监控。所以,我们通过ls /workspace/carkey/ 命令来获取所有的进程名。并将进程名做成JSON格式:
{
"data": [
{
"{#APP_NAME}": "AppCMDB"
},
{
"{#APP_NAME}": "AppMerchantWebApi"
},
{
"{#APP_NAME}": "AppNOC"
},
{
"{#APP_NAME}": "AppSSO"
}
]
}
以下是shell脚本内容:
#!/bin/bash
export LANG=en_US.UTF-8
unset LC_ALL
a=(`ls /workspace/carkey | grep "^App" 2>/dev/null`)
b=()
for i in ${a[@]}; do
if [ `ls /workspace/carkey/$i |grep latest|wc -l` -gt 0 ];then
b=("${b[@]}" "$i")
fi
done
length=${#b[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i |
|
|