ZABBIX全栈级监控实践——(三)Windows自动化部署


《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我的邮箱caixianghua@gmail.com,我会抽空进行解答。

推荐阅读更多精彩内容