zabbix应用之discovery批量添加主机并实现自定义主机名推荐

利用zabbix的discovery功能可以实现自动批量添加主机的功能。

下面以自动监控172.16.4.240-250网段的Linux主机为例,步骤如下:

一、客户端安装agent

为网段内的Linux主机安装好zabbix agent,zabbix_agentd.conf正确配置server的IP和端口,启动agent服务。

如果你的操作系统为RHEL或者CentOS推荐使用yum安装方式。

参考官方资料:https://www.zabbix.com/documentation/2.2/manual/installation/install_from_packages

以CentOS6系统安装2.2版本的zabbix-agent为例:

shell#rpm-ivhhttp://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpmshell#yuminstallzabbix-agent-yshell#server=xx.xx.xx.xxshell#sed-i"/^Server=/c\Server=$server"/etc/zabbix/zabbix_agentd.confshell#sed-i"/^ServerActive=/c\ServerActive=$server:10051"/etc/zabbix/zabbix_agentd.confshell#sed-i"/^Hostname=/c\#Hostname=Zabbixserver"/etc/zabbix/zabbix_agentd.confshell#iptables-IINPUT-s$server-ptcp--dport10050-jACCEPTshell#serviceiptablessaveshell#chkconfigzabbix-agenton

二、创建Discovery规则

选择【Configuration】- 【Discovery】,创建发现规则。

Name:为发现规则起个名字

IP range:客户端所属的IP网段

Delay: 发现周期,单位秒

Checks: 选择“Zabbix agent”检测类型、端口10050、Key填写“system.uname”

查看自动发现结果,下图结果显示了有三台主机正确安装了zabbix agent。

三、创建Action规则

选择【Configuration】- 【Actions】,在右边“Event source”选择“Discovery”,然后创建Action规则如下图所示:

Conditions

过滤条件

Discovery rule=discovery agent

选择创建好的Discovery规则

Received valuelikeLinux

限制客户端类型为Linux系统

Discovery status=Up

客户端状态为UP

Operations

为符合条件的结果执行操作,

包括创建主机、分配主机组、

链接模板、激活主机

Add hostAdd to host groups: Linux serversLink to templates: Template OS LinuxEnable host

四、查看最后的结果

稍等一段时间,到主机列表里可以看到三个客户端已经自动创建好了,监控状态也是正常的。

五、实现自定义主机名

添加的客户端主机的Host name是以IP地址命名的,不够人性化。我们从底层C代码探究一下为什么是这样,该怎么解决:

/*forhostuniquenesspurposes*/host=zbx_strdup(host,'\0'!=*row[3]?row[3]:row[2]);

在zabbix-2.2.5\src\zabbix_server\operations.c源文件的add_discovered_host函数里,发现主机名host是从数据库dservices表的dns字段和ip字段取得的,如果dns不为空的话,host就是dns,否则就是ip。上面row[3]是dservices.dns,row[2]是dservices.ip。

我们再找找dservices.dns是从哪里来的,怎么让它有值呢,最后找到了zbx_gethost_by_ip函数,在zabbix-2.2.5\src\libs\zbxcomms\comms.c源文件里。

voidzbx_gethost_by_ip(constchar*ip,char*host,size_thostlen)structin_addraddr;structhostent*hst;assert(ip);if(0==inet_aton(ip, addr)){host[0]='\0';return;}if(NULL==(hst=gethostbyaddr((char*) addr,sizeof(addr),AF_INET))){host[0]='\0';return;}zbx_strlcpy(host,hst- h_name,hostlen);}

我们发现host的值(dservices.dns)是通过gethostbyaddr获取的。gethostbyaddr是通过IP地址来获取主机的名称(域名),所以我们要为客户端主机的主机名解析到IP地址。可以搭建DNS服务器,也可以直接在zabbix server端的/etc/hosts文件里添加客户端主机名和IP。

继续以上面的实验为例,在/etc/hosts添加客户端的主机名和IP:

然后删除刚才发现的三个主机,让zabbix server再重新创建一遍,结果如下:

我们发现主机名不再是单纯的IP地址了。

最大的成功在于最大的付出。

zabbix应用之discovery批量添加主机并实现自定义主机名推荐

相关文章:

你感兴趣的文章:

标签云: