http://ywzhou.blog.51cto.com/2785388/1580160  

http://www.linuxsa.org/post/32/ 

1、客户端新建脚本

[root@agent01 ~]# vi /usr/local/zabbix_agent/sbin/discovertcpport.sh 
#!/bin/bash
portarray=(`netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
#namearray=(`netstat -tnlp|egrep -i "$1"|awk {'print $7'}|awk -F'/' '{if ($NF != "Address") print $NF}'|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
  do
     printf '\n\t\t{'
     printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
#     printf "\"{#TCP_NAME}\":\"${namearray[$i]}\"}"
     if [ $i -lt $[$length-1] ];then
                printf ','
     fi
  done
printf  "\n\t]\n"
printf "}\n"

脚本说明:

    使用netstat命令输出端口号;-tnlp=Tcp协议+不显示别名+listen状态+显示程序名称;$1~$9表示输出的第几个参 数;awk {'print $4'}表示输出第4个参数(如 0.0.0.0:80);awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}表示截取冒号后面的值,且只能是0~9 的数字;|sort|uniq表示排序和去重。

    脚本中注释掉的两行是用来监控服务的,只需替换掉其上的一行就是个扫描服务的脚本了。


2、客户端增加discovery的key

[root@agent01 ~]# echo "UnsafeUserParameters=1" >> /usr/local/zabbix_agent/etc/zabbix_agentd.conf
[root@agent01 ~]# echo "UserParameter=tcpportlisten,/usr/local/zabbix_agent/sbin/discovertcpport.sh \"\$1\"">>/usr/local/zabbix_agent/etc/zabbix_agentd.conf

提示:客户端的脚本和配置可在安装时就提前做好,可以参考:

http://wgkgood.blog.51cto.com/1192594/1567615

http://ywzhou.blog.51cto.com/2785388/1579060

3、重启zabbix_agentd服务

[root@agent01 ~]# service zabbix_agentd restart
#实际上我发现restart命令无效,因此使用下面的方法Kill进程
[root@agent01 ~]# ps ax|grep zabbix_agentd|grep -v grep |awk '{print $2}'|xargs kill -9
[root@agent01 ~]# /etc/init.d/zabbix_agentd start

4、测试

    客户端运行脚本测试:

[root@agent01 ~]# cd /usr/local/zabbix_agent/sbin
[root@agent01 sbin]# chmod +x discovertcpport.sh
[root@agent01 sbin]# ./discovertcpport.sh

wKiom1U7RfbxFgyZAACgd3ZrTg8621.jpg

客户端测试扫描端口命令:

[root@agent01 ~]# netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'

wKioL1U7R6CTF8URAACl0SZBn5Q580.jpg

客户端测试扫描服务命令:

[root@agent01 ~]# netstat -tnlp|egrep -i "$1"|awk {'print $7'}|awk -F'/' '{print $NF}'

wKiom1U7RmHzp5vKAAC92idoQV4133.jpg

可以看到上面两条命令输出都有重复项,因为没有加上去重|uniq。

    以下命令在客户端执行,目录是zabbix_agent,和服务端不一样,命令没有添加到init.d中,因此必须输入全路径,否则提示命令无效。

[root@zabbix ~]# /usr/local/zabbix_agent/bin/zabbix_get -s 127.0.0.1 -k tcpportlisten

注意:很可能的情况是客户端执行该命令无反应,不理会,直接往下走,能在zabbix上监控到就行。

    下图是在zabbix服务器创建的脚本,然后进行本地的zabbix_get测试:

wKioL1U7R_2AhWZjAAC92idoQV4863.jpg

5、在Linux模板中创建端口自动发现规则

wKiom1U7RtChxtXGAAPZCMxGj8I947.jpg

  设置自动发现规则名称和KEY:

wKioL1U7SEmxs2tqAAKLxmkGuoE396.jpg

  创建Item原型:

wKiom1U7RxmyC1E2AAKY8g33IJA816.jpg

  创建触发器原型:

wKiom1U7R3TjcxFlAAM-KStn9Hs783.jpg

创建图像原型(可以忽略):

wKioL1U7SPuBQPJ3AANwLuuJ1hc883.jpg

 6、查看自动发现结果

wKioL1U7SSyz0LlpAAcBg2otwiw126.jpg

  查看自动发现图像:

wKiom1U7SBTCEw7yAAPKxIIh5tY724.jpg

结论:自动发现可以很好的监控服务器端口,当有新端口开启时会自己扫描到,不用人为的去关心,建议将不重要的触发器禁用,否则会频繁收到报警通知,有的端口是一会上一会下的。




zabbix自动监控windows端口


说明:Zabbix本身自带两个自动发现模板,分别是磁盘发现Mounted filesystem discovery和网卡发现Network interface discovery;本人参考这两个模板制做了自动端口发现模板和自动服务发现模板。


1、关于自定义KEY

(1)参考官方文档:

https://www.zabbix.com/documentation/2.4/manual/config/items/userparameters

(2)Key自定义的语法格式

        UserParameter=<key>,<command>

(3)例子:查看linux系统版本

#vi zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=get.os.type,head -1 /etc/issue
#service zabbix_agentd restart
#zabbix_get -s 127.0.0.1 -k get.os.type

(4)例子:传递参数的用法

#vi zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=wc[*],grep -c"$2"$1
#这里表示把$2,$1的传递给key,测试如下
#service zabbix_agentd restart
#zabbix_get -s 127.0.0.1-k wc[/etc/passwd,root]

说明:/etc/passwd为$1,root为$2,则key最终运行的命令为grep-c root /etc/passwd

(5)例子:查看passwd文件的行数

#vi zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=count.line.passwd,wc -l /etc/passwd|awk'{print $1}'
#service zabbix_agentd restart
#zabbix_get -s 127.0.0.1 -k count.line.passwd

2、创建脚本文件

    在客户端新建discovertcpport.bat文件,放在c:\zabbix\目录中,内容如下:

@echo off
echo {
echo         "data":[
for /F "tokens=2 delims= " %%i IN ('netstat -anp tcp^|find /i "LISTENING"') DO for /F "tokens=2 delims=:" %%j IN ("%%i") DO echo                 {"{#TCP_PORT}":"%%j"},
echo                 {"{#TCP_PORT}":"10050"}
echo         ]
echo }

脚本说明:

      命令netstat -anp tcp ^|find /i "LISTENING" 用来查看监听状态的TCP端口;

      for /F "tokens=2 delims= "表示循环输出的截取值,即每行以空格(delims= )分隔的第2段(token=2)值,以变量%%i输出;

      之后以同样的循环截取出端口号并格式化输出结果;

      这里的输出格式必须按JSON对象格式输出,否则报错“Value should be a JSON object”;

      特别要注意最后一行没有逗号,因此单独添加一行echo {"{#TCP_PORT}":"10050"}来结束,以满足JSON对象格式。


3、修改客户端配置

在客户端的zabbix_agentd.conf中添加以下内容:

UnsafeUserParameters=1
UserParameter=tcpportlisten,c:\zabbix\discovertcpport.bat

说明:第一条表示允许使用用户自定义参数,第二条设置用户参数,名称tcpportlisten是自定义的KEY名,后接KEY要执行的命令或脚本文件。

    重新启动zabbix agentd服务


提示:客户端的脚本和配置可在安装时就提前做好,参考我的安装文档:

http://ywzhou.blog.51cto.com/2785388/1579165 

4、客户端测试

    以管理员身份运行CMD,cd到c:\zabbix目录,输入脚本文件名,回车:

wKiom1VisD3SpI_pAAF5yiktqL0025.jpg 

说明:上图是在我笔记上测试的,扫描出的端口并非监控主机10.188.1.44的。

    JSON格式说明:#TCP_PORT是变量名称,后面的数值是变量的值。


5、服务端测试

[root@zabbix ~]# /usr/local/zabbix/bin/zabbix_get -s 10.188.1.44 -k tcpportlisten

wKioL1VisgXCFARFAAHSRyzsRzw183.jpg

说明:可以看到监控主机扫描出的端口中已有10050,而我在后面添加了一个10050,不要紧,接着往下看。


6、创建端口自动发现规则

    可以单独创建一个模板,也可以直接在windows模板中创建:

wKiom1VisJyCSC_wAAIQhxb2OS0807.jpg

7、设置端口自动发现规则

    使用的KEY就是在客户端配置文件中自定义的tcpportlisten

wKioL1VislGToFXGAAFyc3Kzapk858.jpg

8、给自动发现模板创建Item原型

    使用ntp.tcp.listen[]来监控端口状态,[]内的值取自变量#TCP_PORT的值,标题中的$1同样取自变量#TCP_PORT的值。

wKioL1Visojwh0JrAAFDZbIpSPA054.jpg

9、给自动发现模板创建触发器原型

wKiom1VisRnhxerUAAFxsD-gd1w152.jpg

点击Select prototype为触发器选择Item原型:

wKioL1VisuTCMavcAAEQgBVxoXU194.jpg

10、给自动发现模板创建图像原型

    图像原型也可以不创建,意义不大,返回的值不是0就是1,看不看图无所谓;但是要监控性能这样有曲线的还是有必要的.

wKioL1Visw7QFdxVAAFXGF2V-eU438.jpg

11、重复监控问题

    如果已经使用net.tcp.listen手动创建了端口监控,会报如下错误,但不要紧。

wKiom1VisazxVQvUAAIKT-5Qm-8299.jpg

12、查看端口自动监控结果

    由于我是在windows模块中添加的自动发现规则,因此监控主机做好前面说的配置就会自己添加端口监控了;如果是在单独创建的模板中创建的,就要Link到监控主机上了.

wKiom1VisdeB_aVSAAOTaxw0u2o282.jpg

13、查看最近返回的值

wKioL1Vis7jjZpy6AALMgsniayE067.jpg

结论:自动监控端口虽然省事,但很多监听端口都不了解,不知是什么程序启用了,可以和前面的端口模板配合使用;先创建端口模板用来监听重要的服务端口,再使用自动监控端口来监控其他监听端口。

    修改下脚本可以用来监控其他的内容,比如监控已启动的服务net start,监控已连接的客户端netstat ESTABLISHED状态等;还可以在端口监控脚本基础上多添加几个和端口有关的ITEMS,如是否可连接,连接性能如何等。

    将一些不重要的端口的触发器禁用,否则会频烦收到邮件报警。

http://ywzhou.blog.51cto.com/2785388/1579936





zabbix手动监控windows端口


1、监控端口的几个主要Keys:


net.tcp.listen[port]

Checks if this port is in LISTEN state. 0 - it is not, 1 - it is in LISTEN state.

监控TCP端口是否监听

net.tcp.port[<ip>,port]

Check, if it is possible to make TCP connection to the port number. 0 - cannot connect, 

1 - can connect. IP address is optional. If ip is missing, 127.0.0.1 is used. 

Example: net.tcp.port[,80]

检查TCP端口是否可以正常连接。

net.tcp.service[service,<ip>,<port>]

Check if service is available. 0 - service is down, 1 - service is running. 

If ip is missing 127.0.0.1 is used. If port number is missing, default service port is used. 

Example: net.tcp.service[ftp,,45].

检查服务是否可用,FTP服务可直接使用FTP模板

net.tcp.service.perf[service,<ip>,<port>]

Check performance of service "service". 0 - service is down, sec - number of seconds spent on connection to the service. 

If ip is missing 127.0.0.1 is used. If port number is missing, default service port is used.

监控服务(端口)连接性能

net.udp.listen[port]

Checks if this port is in LISTEN state. 0 - it is not, 1 - it is in LISTEN state.

监控UDP端口是否监听(不支持windows

   说明:Zabbix自带单独服务检测模板,如Template App FTP Service,就是使用的ket.tcp.service[ftp]这个KEY来监控的。


2、创建一组专门用于端口监控的模板

    监控80端口的模板,新建一个组Tcp Port

wKioL1ViuurjnIfeAAGEVquyAqM074.jpg

3、在模板中添加Item

    添加一个监控80端口是否在Listen状态的Item,使用的KEY是net.tcp.listen[]

wKiom1ViuYbyakolAADnq4RWTQM141.jpg

4、添加第二个Item

    这个Item使用的KEY是net.tcp.port[],用来检查TCP端口是否可以正常连接

wKioL1Viu3azUYJEAADaqg1XYPQ709.jpg

5、添加第三个Item

    这个Item使用的KEY是net.tcp.service[],用来监控服务是否可用,不指定端口将检查该服务的默认端口

wKiom1ViuhyikOMvAAEV5oN-hOM238.jpg

6、添加第四个Item

    这个Item使用的KEY是net.tcp.service[],用来监控服务(端口)的连接性能,注意下面的数据类型选择float

wKiom1ViukqhXSeeAAD-VXm-xiA390.jpg

7、给第一个Item创建一个触发器

     第一个Item是监控80端口是否在listen状态,返回0表示不在,返回1表示在

wKioL1VivAWTRAg7AAEBLcGCEk4001.jpg

8、在模板中创建一个图像,将4个Items显示在图像中

wKiom1ViupWh2MpzAAGhzj_epzI274.jpg

9、将模板Link到监控主机上

wKioL1VivEvxykfOAAFS5PJj1XY678.jpg

10、主机HV01显示的监控结果

wKiom1ViutzSOfzIAAICj0vL7tw515.jpg

11、主机HV03显示的监控结果

wKiom1Viux6w3xtTAAHPn5pz5Cc007.jpg

说明:通过以上两图可以看到四个Items的区别与作用


12、主机HV03的监控图像

wKiom1ViuzzgHvJAAAJ7F7ZTAMw427.jpg

说明:上图反映了四个端口监控Items的状态与数值,performance反映了HV03服务器的80端口连接性能,越小越好。

http://ywzhou.blog.51cto.com/2785388/1579917 




zabbix自动监控windows服务


一、监控服务状态的Key:

service_state[service]

State of service. 0 - running, 1 - paused, 2 - start pending, 3 - pause pending, 

4 - continue pending, 5 - stop pending, 6 - stopped, 7 - unknown, 255 - no such service

返回0表示运行,返回6表示关闭,返回7表示未知,返回255表示没有。


二、手动监控客户端Agent服务

1、查看客户端服务名称

wKioL1VivXnRlZJDAAJHqwaqERg452.jpg

2、给监控主机添加Items

    监控客户端agent服务状态,这里故意多输了个2

wKioL1VivgHS8XSLAACFRG5ZWro116.jpg

3、创建触发器

    由于返回0表示运行,因此设置不为0时报警

wKiom1VivGTRyXXBAADNnktyubc929.jpg

4、查看监控图像(在Last Data中找)

    可以看到因为没有Zabbix Agent2这个服务,返回255,将2去掉后再观察可以看到返回值为0

wKioL1ViviaSSum7AAFGFxm0Fso800.jpg

三、自动监控windows服务状态

1、创建脚本

    在客户端新建discoverservice.bat文件,放在c:\zabbix\目录中,内容如下:

@echo off
echo {
echo         "data":[
for /F "skip=1 eol=命 tokens=*" %%i IN ('net start') DO echo                 {"{#SERVICE_NAME}":"%%i"},
echo                 {"{#SERVICE_NAME}":"Zabbix Agent"}
echo         ]
echo }

脚本说明:

      net start命令输出所有已启动的服务,但是有第一行"已经启动以下 Windows 服务: "和最后一行"命令成功完成。",需要去掉,因此 skip=1 eol=命 tokens=*就好理解了,跳过第一行和命字开头的行;最后再插入一条{" {#SERVICE_NAME}":"Zabbix Agent"}来确保最后没后行没有逗号,满足JSON格式。


2、修改客户端配置

    在zabbix_agentd.conf中添加以下内容

UnsafeUserParameters=1
UserParameter=servicestate,c:\zabbix\discoverservice.bat

重新启动zabbix agentd服务


提示:客户端的脚本和配置可在安装时就提前做好,参考我的安装文档:

http://ywzhou.blog.51cto.com/2785388/1579165


3、客户端测试

    以管理员身份运行CMD,cd到c:\zabbix目录,输入脚本文件名,回车:

wKioL1VivrCj4YxrAAKiDa4TNtM027.jpg

4、服务端测试

[root@zabbix ~]# /usr/local/zabbix/bin/zabbix_get -s 10.188.1.46 -k servicestate

wKiom1VivU2zk2e2AAO1wjyL1Dc604.jpg

 注意:图中Visual Studio Team Foundation后的中文会显示乱码,后面会说明。


5、在Windows模板中创建自动监控规则

wKiom1VivXaRJG8NAAEKuic1yXo646.jpg

6、创建Items原型

wKioL1VivzeT-5zKAAEmHupMecA953.jpg

7、创建触发器原型

wKiom1VivcPQqQo3AAE64BMi9_w803.jpg

8、查看监控主机的自动发现规则

wKiom1VivfGif4mEAAE_eHYkZL8947.jpg

说明:Agent服务重复了一次,不用管,zabbix不添加重复的ITEM。


9、查看服务自动监控结果

wKioL1Viv7fiysu3AAa-hqbePG0429.jpg


10、查看最近返回的值

wKioL1Viv9vyL4pyAAK7oj1kxss316.jpg

结论:自动发现端口和服务会添加大量的ITEMS,因此不建议在模板中添加GRAPH,并且最好创建模板时新建端口组和服务组,方便查看时过滤;将一些不重要的服务的触发器禁用,否则会频烦收到邮件报警。

    另外中文乱码问题参考:

http://ywzhou.blog.51cto.com/2785388/1580144