![907fc855b4e7bf24d69b2704a7ba6919.png](https://i-blog.csdnimg.cn/blog_migrate/e91dc0b0113346394f6d8c826dbb1ee9.jpeg)
背景
端口监控是很普遍的一个需求,当一台机器上跑了几十个服务,就想着能不能自动发现并监控所有的端口呢?
毕竟我们的宗旨是能自动绝不手动,摸鱼才是工作的真谛。
![f8bdd70122106f788065e018c6a85ea5.png](https://i-blog.csdnimg.cn/blog_migrate/fc4ddef804c99710a02261ccb2bac6ba.jpeg)
实施
解决方案基于 Linux 命令 ss,下面看下输出:
AllowKey=system.run["ss --tcp --listening --numeric"]
如果希望在模板中整合命令而不是使用 UserParameter ,则需要将此 items keys 写入 zabbix_agentd.conf或zabbix_agent2.conf :
AllowKey=system.run["ss --tcp --listening --numeric"]
如果是 zabbix 5.0 之前的版本,则需要修改该参数
EnableRemoteCommands=1
如果服务器上没有远程执行命令的条件,则使用 UserParameter:
UserParameter=ss.tcp.listening,ss --tcp --listening --numeric
接下来配置 zabbix 自动发现(lld)
![73d0534c7e34d203c29f562bddc016d1.png](https://i-blog.csdnimg.cn/blog_migrate/b39927269d63ced9a34d78ba3111bcfc.jpeg)
如果你使用 UserParameter,则是这样
![167e7c5f3c4e176b334f7b77680366e1.png](https://i-blog.csdnimg.cn/blog_migrate/09e6e42449c7980c7d1121e6ee7b2566.png)
接下来看下输出:
ss --tcp --listening --numeric
输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:17500 0.0.0.0:*
LISTEN 0 50 0.0.0.0:445 .0.0.0:*
LISTEN 0 128 [::]:17500 [::]:*
LISTEN 0 50 [::]:445 [::]:*
LISTEN 0 128 *:3306 *:*
LISTEN 0 50 [::]:139 [::]:*
我们只需要获取第四列的数据,这里使用 JavaScript 正则表达式预处理
- 获取所有端口号
return value.match(/:[0-9]+ /gm);
- 删除重复项
return value.reduce(function(a,b){if(a.indexOf(b) < 0)a.push(b);return a;},[]);
- 删除所有冒号和空格
return value.join("n").replace(/:/g,"").replace(/ /g,"").split("n");
完整代码如下:
var lld = [];
var lines = value.match(/:[0-9]+ /gm).reduce(function(a,b){if(a.indexOf(b) < 0)a.push(b);return a;},[]).join("n").replace(/:/g,"").replace(/ /g,"").split("n");
var lines_num = lines.length;
for (i = 0; i < lines_num; i++)
{
var row = {};
row["{#PORT}"] = lines[i]
lld.push(row);
}
return JSON.stringify(lld);
创建监控项
![96db4fb3d8d85d2a80a69c771854d0a0.png](https://i-blog.csdnimg.cn/blog_migrate/c7366063480748faf44784771f08aeaa.jpeg)
创建触发器
![8227283be559e002ed745532388ea9c1.png](https://i-blog.csdnimg.cn/blog_migrate/47ce167f825d3cd0e685657ec760580f.jpeg)
最后导入模板即可
https://share.zabbix.com/operating-systems/linux/listening-tcp-port-discovery-and-monitoring
![264f8af548da2eeb4f113884cb17f3eb.png](https://i-blog.csdnimg.cn/blog_migrate/83a2c331151fa71dbb973b53aef8dc78.jpeg)