3月 242015
 

最近研究zabbix,发现默认的模版不能检测到Linux的服务以及端口,这样就不能基于端口对服务进行监控。通过查找,找到了办法。

1.调用服务

在github上有一个库,用go语言写的,功能类似于系统的netstat 命令,可查看端口和服务

github.com/drael/GOnetstat

当然你也可以自己用别的语言去实现,恰巧最近在学go语言,所以就用它的了,贴一个简单的获取tcp端口服务的程序
TCP/UDP

GOnetstat.Tcp()
GOnetstat.Udp()

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里导入模版,导入之后,添加模版到主机

1

等一会,就会发现已经识别了端口,并且设置了警报触发

2
触发器
3

4.Debug

A.检查是否关闭SElinux
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

打赏

  2 Responses to “Zabbix监控Linux服务的自动发现”

  1. 你好,这个模板好像下载不了

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)