zabbix5.2和ansible 配置自动发现规则
适合被监控对象:Windows主机或者Linux主机
如果在主机数量特别多的情况下,zabbix可以采用自动发现规则来自动配置主机
第一步·:先在被监控对象上安装zabbix agent,如果主机数量太多,建议采用自动化工具ansible,写个playbook,把主机群的地址范围写到/etc/ansible/hosts里
centos8 安装ansible
yum install ansible -y
然后进入hosts文件里
cd /etc/ansible/hosts
假设被发现的主机群IP范围是【10.3.8.0/24】
接着建议配置ansible和上述被监控主机群之间的ssh免密登录,关于如何配置ssh免密登录,请查看我之前的博客,这里就不多说了
写剧本playbook
先进入roles
cd roles
mkdir zabbix_agent
mkdir zabbix_agent/{file,tasks,templates,handlers,default,vars,meta}
然后先在一台被监控主机上安装好zabbix,并且配置好zabbix agent配置文件,与zabbix_server连通,最后把这个zabbix_agent的配置文件作为模板,以下是Linux系统上的agent配置文件
修改zabbix_agentd.conf配置文件:
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log #错误日志
LogFileSize=0ListenPort=10050 #启动监听端口
StartAgents=3 #被动模式下选择,主动模式则为0
ListenIP=0.0.0.0 #监听所有IP
Server=X.X.X.X#被动模式下必填,将zabbix-server端的ip填入
#ServerActive=X.X.X.X #主动模式下填写
Hostname=10.3.8.121 #本机的hostname,此值必须与zabbix的网页上创建的主机名一致即可
Include=/etc/zabbix/zabbix_agentd.d/
把这个zabbix_agentd.conf配置文件重新命名为 zabbix_agentd.conf
即
mv zabbix_agentd.conf zabbix_agentd.conf.j2
把这个zabbix_agentd.conf.j2 放到templates目录下
先写templa.yml
- name : copy the zabbix_agentd.conf.j2 to the files of agent system
template:
src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
notify: restart the service of zabbix_agent
tags: cp the zabbix_agentd.conf
接着写 service.yml
- name: start the service of zabbix_agent
service: name=zabbix-agent state=stared enabled=yes
tags: start zabbix-agent_service
- name: restart the service of zabbix_agent
service: name=zabbix-agent state=restart enabled=yes
tags: restart the service of zabbix_agent
还有一点:必须开启被监控主机群的10050端口,这里用port.yml开启即可
- name: open the 10050 port of firewall
command: filewall-cmd --add-port=10050/tcp --permanent
- name: restart the firewall
command: firewall-cmd --reload
- name: check the opend-port of firewall
command: firewall-cmd --list-ports
yum.yml
- name: in order to install the zabbix_agent
yum: name=zabbix-agent
最后写 main.yml
---
- hosts: discovery_hosts
remote_user: root
tasks:
- import_tasks: yum.yml
- import_tasks: port.yml
- import_tasks: service.yml
- import_tasks: templa.yml
先看看有没有语法错误
ansible-playbook --syntax-check main.yml
ok,语法没有问题
接着先预执行一下
ansible-playbook -C main.yml
如果没有问题,接着把-C 即check这个选项去掉
ansible-playbook main.yml
如果没有提示错误,那么这次就完成一半了,不好意思,本篇博客还很长~~~~~~
最终的目录树结构是这样的
(请忽视变量文件夹vars和触发器文件夹handlers,这里没有用到)
或者,你如果只想给某些版本的操作系统安装zabbix_agent,比如centos8,其它的centos7,6都不安装,可以写一个其它的剧本
比如,你只要把以下变量替换成你想要的内置变量就行了
接着进入zabbix的web管理
创建发现规则
然后配置如下,discovery check的键值不一定要写system.uptime,也可以写其它的键值,
比如agent.ping等等
接着创建action
我这里配置了两个条件
1:发现规则等于刚才创建的规则
2:主机地址范围是10.3.8.0/24网段
接着触发以下操作
1发送邮件给管理员用户
2发送邮件给管理员组的用户
3 添加主机
4添加到对应的主机组
5链接到对应的模板
触发邮件发送的详细配置如下
subject :
已经发现Windows主机-发现规则:{DISCOVERY.RULE.NAME} 装置IP:{DISCOVERY.DEVICE.IPADDRESS}
message:
发现规则:{DISCOVERY.RULE.NAME}
装置IP:{DISCOVERY.DEVICE.IPADDRESS}
装置DNS:{DISCOVERY.DEVICE.DNS}
设备状态:{DISCOVERY.DEVICE.STATUS}
设备正常运行时间:{DISCOVERY.DEVICE.UPTIME}
设备服务名称:{DISCOVERY.SERVICE.NAME}
设备服务端口:{DISCOVERY.SERVICE.PORT}
设备服务状态:{DISCOVERY.SERVICE.STATUS}
设备服务正常运行时间:{DISCOVERY.SERVICE.UPTIME}
结果如下,现在已经有一台主机被发现,然后自动添加进来了
邮件也成功发送给管理员用户了
目前已经发现两台了,另一台因为我关闭了,所以显示红色
给点赞赏,谢谢!!!!!!!!!!!!!!!!!!!!!!!