《ZABBIX全栈级监控实践》系列将由浅入深探讨如何实现ZABBIX全栈级别的监控。
本文是《ZABBIX全栈级监控实践》的第三篇:主要讨论使用Windows组策略部署Zabbix Agent。
一、概述
如果您的环境中已经有成熟的配置管理工具,可以基于这些工具去实现。本文中所使用的通过组策略的部署方案更适合于没有Windows平台批量配置管理工具的场景。
正如第一篇中所说,越来越多的公司和企业的IT基础架构使用了多平台。最普遍的一种情况就是一个企业内部会同时使用Windows和Linux操作系统。
对于Linux而言,一般通过Puppet,SaltStack等配置管理工具实现Zabbix Agent的批量部署。
对于Windows而言,也可以使用此类配置管理工具,但存在一定的局限性,主要有下列几个问题:
1、对于Windows平台,Linux的配置管理工具的兼容性或功能不够完善。如Puppet之类的配置管理工具,虽然官方支持Windows平台,但调用Windows平台接口较少,实现Windows配置管理难度较大。
2、部署配置管理工具的Agent也是一个问题。为了部署Zabbix Agent,需要先部署配置管理的Agent。就好比你饿了,想吃点啥,结果得先让你造个厨房,雇个厨师给你做饭。为何不直接点个外卖呢:-)
事实上,Windows平台自带了一个非常强大的配置管理工具——组策略。通过组策略,即可完成Zabbix Agent在Windows平台上的批量部署。
二、实现思路
我们如何将大象放进冰箱?
第一步:开冰箱门。
第二步:把大象放进去。
第三步:把冰箱门关上。
我们如何部署Zabbix Agent?
第一步:将部署文件copy到客户端。
第二步:通过脚本生成配置文件,安装Zabbix Agent。
第三步:启动Zabbix Agent。
三、通过组策略部署Zabbix Agent
在此,将以Windows Server 2016域控为测试环境,通过组策略部署Zabbix Agent。特别说明的一点,Windows 2008、2012等服务器的操作方式也相同。对于部署Zabbix Agent的客户端,要求为Windows 2008及以后的服务器版本,Windows 7 及以后的客户端版本。
首先我们需要准备好Zabbix安装文件,对应的Windows安装文件可以从这个下载页面下载。选择对应版本的Zabbix pre-compiled agents(Windows All)。解压缩预编译Agent文件包后,应该可以看到这些文件
这里我们要用到的是zabbix_agentd.exe这个文件(注意区分32位和64位的版本),配置文件zabbix_agentd.win.conf后续通过脚本自动生成。
以下是具体的实现步骤:
1)在域控制器上,访问域的SYS VOL下的scripts文件夹,在本环境中,域名为sc.local,对应的文件夹为
2)新建一个Zabbix目录,并将对应版本的zabbix_agentd.exe文件复制到Zabbix目录下
3)在域控制器的运行中,输入gpmc.msc,上打开“组策略管理”。
4)新建一条叫做“Deploy Zabbix Agent”的组策略对象
5)编辑这个对象,浏览到“Computer Configuration"->"Preferences"->"Windows Settings"->“Files"中。
6)在右侧单击右键,选择”New" -> “File”,“Source file”选择刚才放入的Zabbix_agentd.exe文件,“Destination File"选择C:\Zabbix\zabbix_agentd.exe。域控制器将会将zabbix_agentd.exe下发到挂载该策略的计算机的该路径下。
7)另外,我们在这个路径下,新建一个叫install.bat的文件,采用同样方式进行下发,最终的配置结果如下:
8)在此,我们要编辑这个install.bat,用它来生成配置文件及启动Zabbix Agent服务,以下是这个文件的代码示例,可根据实际情况进行更改:
echo #create_by_shawncai_20170701 > C:\Zabbix\Zabbix_agentd.win.conf
echo #Zabbix Agent Auto-Install Script V1.0 >>C:\Zabbix\Zabbix_agentd.win.conf
echo #start_writing_conf >>C:\Zabbix\Zabbix_agentd.win.conf
::NETWORK1/PROXY1
ipconfig /all | findstr /i "ipv4" | findstr /i "192\.168\.1\." >nul 2>nul && set SERVER=192.168.1.1
::NETWORK2/PROXY2
ipconfig /all | findstr /i "ipv4" | findstr /i "172\.168\.6[4-9]\." >nul 2>nul && set SERVER=172.168.1.1
ipconfig /all | findstr /i "ipv4" | findstr /i "172\.168\.7[0-9]\." >nul 2>nul && set SERVER=172.168.1.1
ipconfig /all | findstr /i "ipv4" | findstr /i "172\.168\.8[0-5]\." >nul 2>nul && set SERVER=172.168.1.1
echo SERVER=%SERVER% >>C:\zabbix\zabbix_agentd.win.conf
echo SERVERActive=%SERVER%:10051 >>C:\zabbix\zabbix_agentd.win.conf
echo LogFile=C:\zabbix\zabbix_agent.log >>C:\zabbix\zabbix_agentd.win.conf
echo #end_writing_conf >>C:\zabbix\zabbix_agentd.win.conf
C:\zabbix\zabbix_agentd.exe -c C:\Zabbix\Zabbix_agent.win.conf --install
net.exe start "Zabbix Agent"
这个脚本的好处在于针对于不同的网络地址,可以使用同一个脚本,根据主机的IP,指向对应的Zabbix Proxy或者Server。代码中客户端的IP如果在192.168.1.0/24中,那么Agent指向了192.168.1.1这个Proxy;如果在172.168.64.0/24 - 172.168.85.0/24中,则Agent指向了172.168.1.1这个Proxy。
这个脚本非常适合于跨多个网段,存在多个Proxy的Agent的统一部署!
9)文件都准备好了,这个策略也会将相关文件下发给客户端。那么下一步就是要启动这个安装脚本。
在同一个域策略(也可以单独再新建一个,但记得要挂载该策略),浏览到“Computer Configuration"->"Preferences"->"Control Panel Settings"->“Scheduled Tasks”,如下图:
10)在右侧单击右键,选择"New" ->Immediate Task(At least Windows 7),按示例配置,并根据实际情况进行调整。
这里有几个细节需要注意:
首先,建议使用Windows内建的SYSTEW账户进行安装,且无论用户登录与否都执行该计划任务。
其次,在Configure for中选择合适的操作系统版本。
最后,为了避免计划任务失败导致的一些问题,务必勾选停止任务的选项。
如此一来,域策略配置操作完成。将这个GPO挂在到对应的OU下,即可生效。
四、验证Zabbix Agent部署
等待一段时间(取决于成员服务器和域控制器的通信时间),或者直接在Windows的cmd中运行
gpupdate /force
以便立即同步组策略。可以在需要监控的计算机上发现C:\下生成了一些文件:
同时,在Windows服务(services.msc)中,发现一个名为“Zabbix Agent"的服务处于启动状态。
至此,Zabbix Agent在Windows上的部署完毕。
五、常见问题FAQ
由于系统网络等各方面的差异,上述部署过程在某些环境下可能会失败,以下是一些常见的问题。
Q1:发现无法下发Zabbix的安装文件或者安装脚本?
A1:请确保要下发的计算机可以访问上文中提到的Source File源文件路径。一般这个问题可能是网络不通(防火墙),或者用户访问权限不够导致的。建议放在域控制器的SYS VOL的SCRIPTS下,因为这个文件夹默认可以被所有的成员服务器访问。
Q2:发现无法下发计划任务?
A2:请确认计划任务中选择的对应的操作系统。比较老的操作系统(如windows 2000)不支持这种方式。
Q3:计划任务下发了,但未执行?
A3:确认执行计划任务得用户有足够权限。建议使用SYSTEM用户,因为Windows中的SYSTEM用户有高权限去安装和部署Zabbix Agent。如果处于安全目的考虑,使用其他账户,请确认执行账户拥有相应权限,同时账户没有锁定或者过期。
Q4:生成的配置文件为什么只有几行?源代码中不是有好几页吗?
A4:是的,自动生成的配置文件,仅仅保留了必要的参数(如Server,ServerActive等)。其他的参数(如debug level等)保持Zabbix默认设置,如需要个性化配置,可以根据需要自行使用下列方式添加到配置文件中。
echo XXXX=XXXX >>C:\Zabbix\Zabbix_agentd.win.conf
注意:一定是两个右尖括号">>",两个为续写,一个”>"为覆盖。
Q5:部署完后,还是无法在Zabbix Web端配置Agent?
A5:1,检查配置文件,查看指向的Proxy或者Server是否正确;2,检查网络,使用telnet方式检测客户端和服务器的链路是否已经打通。
六、总结
本文介绍了如何通过Windows组策略进行Zabbix Agent的部署。
这个方法的优势在于可以对客户端全自动化无感知的安装部署Zabbix Agent。但是,需要对Windows活动目录和组策略技术有深入了解。
题外话,Windows的组策略是Windows平台上非常好的配置管理工具,从文件下发、参数配置修改,无所不能。在没有微软SCCM的环境下,可以多了解组策略技术以实现快速部署和交付。
文中罗列了一些常见问题,如有其他问题,可以在本文后留言或者Email我的邮箱[email protected],我会抽空进行解答。