文档中所用的模版均在百度云盘中获取:http://pan.baidu.com/s/1tDlAR
具体路径为: MinUnix  >  zabbix  >  template >  discovery_mysql.xml

一、思路:
当服务器过多的时候,手动去一个一个的服务,一个一个的进程添加,确实不是一个好办法,不如使用zabbix带有的discovery的功能。

二、自动监控tcp端口及服务
1、同样,可以利用json程序来获取zabbix参数信息。可通过http://jsonlint.com 进行查看结果的正确性。
2、脚本内容:
cat /usr/local/zabbix/bin/port.sh
#!/bin/bash
#Fuction:proc low-level discovery
printf '{\n'
printf '\t"data":[\n'
discovery() {
port=($(sudo netstat -tnlp|grep "$1"|awk '{print $4}'|awk -F":" '{print $NF}'))
last=($(sudo netstat -tnlp|grep  "sshd"|awk '{print $4}'|awk -F":" '{print $NF}'|tail -1))
for key in ${!port[@]}
do
if [[ "${port[${key}]}" -eq $last ]]; then
if [[ "${key}" -eq "((${#port[@]}-1))" ]];then
printf '\t {\n'
echo '"{#SERVICEPORT}":' \"${port[${key}]}\" ',' '"{#NAME}":' \"$1\"'}'
fi
else
printf '\t {\n'
echo '"{#SERVICEPORT}":'\"${port[${key}]}\" ',' '"{#NAME}":' \"$1\"'},'
fi
done
}

services="mysqld httpd zabbix_agentd zabbix_server sshd"
procname="mysqld|httpd|zabbix_agentd|zabbix_server|sshd"
for svr in $services;do
discovery $svr
done
printf '\t ]\n'
printf '}\n'

将该文件放入/usr/local/zabbix/bin 目录下,添加zabbix用户组权限,添加执行权限;
3、修改zabbix_agent.conf文件
添加以下内容:
UserParameter=proc_port_discovery,/bin/bash /usr/local/zabbix/bin/port.sh

4、将zabbix加入sudoers文件
echo  “zabbix  ALL=(ALL)”  NOPASSWD:/bin/netstat >> /etc/sudoers

5、重启zabbix_agentd
# pkill  -9  zabbix
# /usr/local/zabbix/sbin/zabbix_agentd
6、测试:
在zabbix_server端通过get命令测试
# /usr/local/zabbix/bin/zabbix_get  -s 172.16.8.252  -k proc_port_discovery
{
"data":[
{
"{#SERVICEPORT}":"3306" , "{#NAME}": "mysqld"},
{
"{#SERVICEPORT}":"80" , "{#NAME}": "httpd"},
{
"{#SERVICEPORT}":"10050" , "{#NAME}": "zabbix_agentd"},
{
"{#SERVICEPORT}": "22" , "{#NAME}": "sshd"}
]
}
三、自动监控进程:
1、脚本内容:
#  cat  /usr/local/zabbix/bin/process.sh

#!/bin/bash
# get the list service if running in the server
printf '{\n'
printf '\t"data":[\n'
getservice() {
ps axu | grep -v grep | grep $1 &> /dev/null
if [ $? == 0 ];then
if [ $1 != 'sshd' ]; then
printf '\t {\n'
echo '"{#PROCNAME}":' \"$1\" '},'
else
printf '\t {\n'
echo '"{#PROCNAME}":' \"$1\" '}'
fi
fi
}
services="httpd mysqld nginx zabbix_agentd zabbix_server zabbix_proxy sshd"
for srv in $services;do
getservice $srv
done
printf '\t ]\n'
printf '}\n'

将该文件放入/usr/local/zabbix/bin 目录下,添加zabbix用户组权限,添加执行权限。

2、修改zabbix_agentd.conf 文件:
# vim  /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=proc_discovery,/bin/bash /usr/local/zabbix/bin/process.sh

4、将zabbix加入sudoers文件
echo  “zabbix  ALL=(ALL)”  NOPASSWD:/bin/netstat >> /etc/sudoers

5、重启zabbix_agentd
# pkill  -9  zabbix
# /usr/local/zabbix/sbin/zabbix_agentd
6、zabbix_get测试:
# /usr/local/zabbix/bin/zabbix_get  -s 172.16.8.252  -k proc_discovery

{
"data":[
{
"{#PROCNAME}": "httpd" },
{
"{#PROCNAME}": "mysqld" },
{
"{#PROCNAME}": "zabbix_agentd" },
{
"{#PROCNAME}": "sshd" }
]
}

四、导入模版:
因我将两个项目的自动发现比较少,所以将两个规则合成到一个模版里;

之后您也可以将此规则添加到zabbix监控系统中的Template OS Linux 中。
模版:port_and_proc_discovery.xml

文档中所用的模版均在百度云盘中获取:http://pan.baidu.com/s/1tDlAR
具体路径为: MinUnix  >  zabbix  >  template >  discovery_mysql.xml