继上一篇主机自动发现

得,还有服务的端口要监控
一个个去添加listen监控tcp的话不现实啊,还是也搞自动发现吧

分割下来也是2步啊
第一步脚本丢zabbix-agent下产生自定义键值
第二步不就是zabbix-server添加自动发现绑定这个键值咯

一、创建监控脚本

端口port自动发现
客户端新建查询端口脚本discoverport.sh

[root@new-jenkins scripts]# pwd
/etc/zabbix/scripts
[root@new-jenkins scripts]# vim discoverport.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
  do
     printf '\n\t\t{'
     printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
     if [ $i -lt $[$length-1] ];then
                printf ','
     fi
  done
printf  "\n\t]\n"
printf "}\n"

脚本不复杂哈,就是用Netstat过滤出来在监听的端口,然后循环输出
丢了,安装netstat命令为

yum install net-tools -y

增加执行权限

[root@new-jenkins scripts]# chmod +x discoverport.sh 
[root@new-jenkins scripts]# ll
total 4
-rwxr-xr-x. 1 root root 407 Mar 10 16:50 discoverport.sh
[root@new-jenkins scripts]#

zabbix 网络接口 zabbix如何监控接口服务_运维

客户端增加discovery的key键值,最后一行啊

[root@new-jenkins zabbix]# pwd
/etc/zabbix
[root@new-jenkins zabbix]# vim zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.3.111
ServerActive=192.168.3.111
Hostname=system.hostname
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1
UserParameter=tcpportlisten,/etc/zabbix/scripts/discoverport.sh "$1"

重启zabbix_agentd服务,

[root@new-jenkins zabbix]# systemctl restart zabbix-agent

然后去server端测试获取key

有点尴尬啊,报错了:

zabbix 网络接口 zabbix如何监控接口服务_运维_02


别慌大兄弟,这个是执行上面那个自动发现脚本没权限,需要sudo输入密码,是我们在操作过程中并没有输入,简单就去3.158给zabbix用户添加sudo权限即可。

vim /etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL

zabbix 网络接口 zabbix如何监控接口服务_键值_03


再次zabbix-server获取键值:

下面这个{#TCP_PORT} 很重要呀,待会zabbix-server上用的到

zabbix 网络接口 zabbix如何监控接口服务_vim_04

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

创建发现规则

有2钟方法啊,一个是在已有的模板上创建规则,还有一种是新建模板。我是选择了新建模板

下面是我新建的模板

zabbix 网络接口 zabbix如何监控接口服务_TCP_05


然后点击自动发现规则新建,

以下是我创建的自动发现规则

zabbix 网络接口 zabbix如何监控接口服务_vim_06


这张图下的更新间隔,你们生产最好设置为2h,我设置的30s是为了方便快速检测出来效果,如果生产也配置30s会后悔的,比如你ssh上去的临时端口也会被检测出来,你退出ssh就会端口down去了。切记!!

zabbix 网络接口 zabbix如何监控接口服务_键值_07

然后创建监控项

创建新的监控项原型,是在自动发现规则里配置哦

名称:tcp port $1

键值:net.tcp.listen[{#TCP_PORT}]

zabbix 网络接口 zabbix如何监控接口服务_键值_08

创建触发器类型

名称:***{} {#TCP_PORT} down***

表达式:***{Linux_Server_Status:net.tcp.listen[{#TCP_PORT}].last(0)}<>1***

zabbix 网络接口 zabbix如何监控接口服务_运维_09

创建图形原型

名称:tcp port {#TCP_PORT}

然后绑定监控项

zabbix 网络接口 zabbix如何监控接口服务_键值_10

查看最新数据

查询过滤tcp port,因为我将这个模板绑定在3.158主机上了。

能看到端口出来了, 数据都是1的

zabbix 网络接口 zabbix如何监控接口服务_vim_11


测试8080端口down

在3.158主机上关闭8080服务,然后恢复。查看告警问题

zabbix 网络接口 zabbix如何监控接口服务_vim_12


查看图:

能看到恢复时间等。

zabbix 网络接口 zabbix如何监控接口服务_TCP_13