设为首页 收藏本站
查看: 917|回复: 0

[经验分享] zabbix应用之discovery批量添加主机并实现自定义主机名

[复制链接]

尚未签到

发表于 2019-1-19 13:54:29 | 显示全部楼层 |阅读模式
  利用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 -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm
shell# yum install zabbix-agent -y
shell# server=xx.xx.xx.xx
shell# sed -i "/^Server=/c\Server=$server" /etc/zabbix/zabbix_agentd.conf
shell# sed -i "/^ServerActive=/c\ServerActive=$server:10051" /etc/zabbix/zabbix_agentd.conf
shell# sed -i "/^Hostname=/c\#Hostname=Zabbix server" /etc/zabbix/zabbix_agentd.conf
shell# iptables -I INPUT -s $server -p tcp --dport 10050 -j ACCEPT
shell# service iptables save
shell# chkconfig zabbix-agent on  二、创建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 value like Linux
  限制客户端类型为Linux系统

  Discovery status = Up  

  客户端状态为UP

  Operations
  为符合条件的结果执行操作,
  包括创建主机、分配主机组、
  链接模板、激活主机

Add host
Add to host groups: Linux servers
Link to templates: Template OS Linux
Enable host
  四、查看最后的结果
  稍等一段时间,到主机列表里可以看到三个客户端已经自动创建好了,监控状态也是正常的。


  五、实现自定义主机名
  添加的客户端主机的Host name是以IP地址命名的,不够人性化。我们从底层C代码探究一下为什么是这样,该怎么解决:
                /* for host uniqueness purposes */
                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源文件里。
void    zbx_gethost_by_ip(const char *ip, char *host, size_t hostlen)
{
    struct in_addr    addr;
    struct hostent  *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地址了。

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-665249-1-1.html 上篇帖子: (1)Zabbix2.4.5 安装配置 下篇帖子: centos6.2 lnmp环境下安装 zabbix(中文环境)并且监控客户端
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表