Zabbix监控Linux服务的自动发现
最近研究 zabbix,发现默认的模版不能检测到 Linux 的服务以及端口,这样就不能基于端口对服务进行监控。通过查找,找到了办法。
1.调用服务
在 github 上有一个库,用 go 语言写的,功能类似于系统的 netstat 命令,可查看端口和服务
[github.com/drael/GOnetstat](“github.com/drael/GOnetstat”)
当然你也可以自己用别的语言去实现,恰巧最近在学 go 语言,所以就用它的了,贴一个简单的获取 tcp 端口服务的程序
package main
import (
"encoding/json"
"fmt"
"github.com/drael/GOnetstat"
"log"
)
type Process struct {
Name string `json:"{#PROCNAME}"`
Port int64 `json:"{#PORT}"`
}
type ZabbixData struct {
Data []Process `json:"data"`
}
func main() {
data := GOnetstat.Tcp()
var zd = new(ZabbixData)
for _, p := range data {
if p.State == "LISTEN" {
zd.Data = append(zd.Data, Process{p.Name, p.Port})
}
}
output, err := json.MarshalIndent(zd, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(output))
}
编译为 tcp_services,放到/usr/bin/目录下,并赋予执行权限
cp tcp_services /usr/bin/
chmod +x /usr/bin/tcp_services
测试
[root@proxy bin]# /usr/bin/tcp_services
{
"data": [
{
"{#PROCNAME}": "Master",
"{#PORT}": 25
},
{
"{#PROCNAME}": "Ruby",
"{#PORT}": 24224
},
{
"{#PROCNAME}": "Zabbix_agentd",
"{#PORT}": 10050
},
{
"{#PROCNAME}": "Zabbix_proxy",
"{#PORT}": 10051
},
{
"{#PROCNAME}": "Ruby",
"{#PORT}": 24230
},
{
"{#PROCNAME}": "Snmpd",
"{#PORT}": 199
},
{
"{#PROCNAME}": "Svnserve (Deleted)",
"{#PORT}": 3690
},
{
"{#PROCNAME}": "Nginx",
"{#PORT}": 80
},
{
"{#PROCNAME}": "Sshd",
"{#PORT}": 22
},
{
"{#PROCNAME}": "Ruby",
"{#PORT}": 8888
}
]
}
有以上返回,说明程序工作正常
我已编译好,大家可下载
2.设置 zabbix_agentd
编辑 zabbix_agentd.conf 添加如下
UserParameter=udp_services, sudo /usr/bin/tcp_services
同时编辑,/etc/sudoers.d/zabbix
vi /etc/sudoers.d/zabbix
Defaults:zabbix !requiretty
zabbix ALL=NOPASSWD: /usr/bin/tcp_services
我就添加一个 tcp 的,udp 的可照着添加一个就可以了,添加好之后重启 zabbix_agentd
3.zabbix 设置
zabbix 里导入模版,导入之后,添加模版到主机
等一会,就会发现已经识别了端口,并且设置了警报触发
4.Debug
A.检查是否关闭SElinux<br /> B.在zabbix_server上执行操作(IP_DO_SERVIDOR_MONITORADO为被监控端ip
zabbix_get -s IP_DO_SERVIDOR_MONITORADO -k "tcp_services"
例如
[root@canghai bin]# ./zabbix_get -s 192.168.1.10 -k "tcp_services"
{
"data": [
{
"{#PROCNAME}": "Master",
"{#PORT}": 25
},
{
"{#PROCNAME}": "Ruby",
"{#PORT}": 24224
},
{
"{#PROCNAME}": "Zabbix_agentd",
"{#PORT}": 10050
},
{
"{#PROCNAME}": "Zabbix_proxy",
"{#PORT}": 10051
},
{
"{#PROCNAME}": "Ruby",
"{#PORT}": 24230
},
{
"{#PROCNAME}": "Snmpd",
"{#PORT}": 199
},
{
"{#PROCNAME}": "Svnserve (Deleted)",
"{#PORT}": 3690
},
{
"{#PROCNAME}": "Nginx",
"{#PORT}": 80
},
{
"{#PROCNAME}": "Sshd",
"{#PORT}": 22
},
{
"{#PROCNAME}": "Ruby",
"{#PORT}": 8888
}
]
}
如返回数据说明没有问题,不返回则说明 zabbix_agentd 或者 tcp_service 有问题。
模版&tcp_services(Linux_x32&x64)下载:zabbix_tcp_services.tar.gz
此文为参考老外文章,经测试udp_serivces服务提取为空。老外原文地址:autodiscovery-servicos-linux-zabbix