![d52134c0bfcd05197b91fcea3aeb255b.png](https://i-blog.csdnimg.cn/blog_migrate/458ca6fad24e80db8cdb610037e26762.jpeg)
背景
端口监控是很普遍的一个需求,当一台机器上跑了几十个服务,就想着能不能自动发现并监控所有的端口呢?
毕竟我们的宗旨是能自动绝不手动,摸鱼才是工作的真谛。
![561c4465c5fcee46fd904016c81979d4.png](https://i-blog.csdnimg.cn/blog_migrate/ac767b78a49467b96e631beea838566a.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)
![b40aea8c69c14d13deb3e356c7685d63.png](https://i-blog.csdnimg.cn/blog_migrate/f7a035415f262d4bc98c5c084dd2e732.jpeg)
如果你使用 UserParameter,则是这样
![ade78fab0692a1b10457fd3e7597e3c5.png](https://i-blog.csdnimg.cn/blog_migrate/bf3c3b53b6aada580977d9eb160bbf71.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);
创建监控项
![6d9be6dbc39781ca4865b7b109f313da.png](https://i-blog.csdnimg.cn/blog_migrate/63573715b54864e7f439a060ba346dbb.jpeg)
创建触发器
![7d048afa6ea9c6ebca0cbccccee2b9eb.png](https://i-blog.csdnimg.cn/blog_migrate/c6a54fbc0ae2b85d0d2135a984775180.jpeg)
最后导入模板即可
https://share.zabbix.com/operating-systems/linux/listening-tcp-port-discovery-and-monitoring
![256ac8a9ed52bb72c77f59dc9a051155.png](https://i-blog.csdnimg.cn/blog_migrate/274bb5e1925747ba247b448ae89d944f.jpeg)