前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zabbix 随笔:主机自动化注册(Windows 篇)

Zabbix 随笔:主机自动化注册(Windows 篇)

作者头像
IT小白Kasar
发布2022-02-16 18:41:54
9170
发布2022-02-16 18:41:54
举报
文章被收录于专栏:个人技术随笔个人技术随笔

在之前的 Linux 篇提到了自动化安装的原理其实也是脚本安装,只不过安装部分省去了部分人力重复工作,但是 Windows 比较特殊,需要用到 powershell 这款自带的软件,这款软件在 Windows 2008 版本引入后,开启了 Windows 自动化的旅程,由此拉开了 Windows 命令行的序幕,题外话就不提了,如果感兴趣可以参考官方文档,最新的 7.0 还是比较强大的。

正文

思路

整体思路是通过通过 ansible 远程到 Windows 主机,推送 powershell 脚本,Windows 执行 powershell 脚本自动拉取 agent 文件、替换配置、启动一系列操作。

准备工作

由于 Ansible 到 Windows 需要主机 powershell 版本为3.0以上,如果不是 3.0 的 powershell 需要进行升级,需要注意的是 Windows 2008 R2 后的版本(不包含 Windows 2008 R2 以前的版本)起步是 4.0,所以都是满足的。

Windows 2008 R2
Windows 2008 R2

1.下载 framework 4.5.2 版本及以上这里我选择的是 4.6.1,自行互联网下载。(下面相关软件我会打包放在一起)

2.升级 Powershell目前官方提供的是 WMF 5.1 版本。安装完成后需要重启才行。

3.查看版本信息

开启远程功能

1.查看 powershell 执行策略(需要管理员权限运行)默认应该是 Restricted,需要改为 remotesigned,这么做有什么意义?如果不改为该值会出现 PS 脚本无法执行。

2.启动远程管理功能启动远程管理服务(winrm),输入 y 即可

3.启用认证

Ansible 连接测试

1.安装 pywinrm,此处出问题的朋友估计是 pip 工具没有或者其他原因,自行互联网搜索

2.编写 ansible hosts 文件

3.ansible ping 测试

PS 脚本

下面的脚本粘贴到 .ps1 后缀的文件里(文件自行创建)

这里需要注意的是在获取文件的时候注意版本,这里我采用的是 Zabbix 5.4 的 agent v2 版本,如果你的版本非次版本,则需要去官网查看,如下面的图二和图三,另外 agent2 和 agent 也有所区别,如果懒癌的朋友可以找我要不同版本对应的脚本,否则执行会报错,我相信大家都会一点 powershell 的语法,毕竟我们都是站在巨人的肩膀上。

代码语言:javascript
复制
mkdir C:\zabbix
invoke-webrequest -uri https://cdn.zabbix.com/zabbix/binaries/stable/5.4/5.4.2/zabbix_agent2-5.4.2-windows-amd64-openssl-static.zip -outfile C:\zabbix\zabbix-win.zip
$file = "C:\zabbix\zabbix-win.zip"
$shell = New-Object -ComObject shell.application
$zip = $shell.NameSpace($file)
$dest =  $shell.NameSpace((Split-Path $file -Parent))
$dest.CopyHere($zip.Items())


Copy-Item C:\zabbix\bin\*.exe C:\zabbix\
Copy-Item C:\zabbix\conf\*.conf C:\zabbix\
Rename-Item C:\zabbix\zabbix_agent2.conf  zabbix_agentd.conf 
Rename-Item C:\zabbix\zabbix_agent2.exe  zabbix_agentd.exe 
Remove-Item C:\zabbix\zabbix-win.zip


$conf= Get-Content C:\zabbix\zabbix_agentd.conf -Encoding UTF8
$conf= $conf.Replace("LogFile=c:\zabbix_agentd.log", "LogFile=c:\zabbix\zabbix_agentd.log")
$conf= $conf.Replace("Server=127.0.0.1", "Server=192.168.31.137")
$conf= $conf.Replace("ServerActive=127.0.0.1", "ServerActive=192.168.31.137:10051")
$conf= $conf.Replace("Hostname=Windows host", "Hostname=${Env:COMPUTERNAME}")
#$conf= $conf.Replace("# HostnameItem=system.hostname", "HostnameItem=system.hostname")
$conf= $conf.Replace("# HostMetadata=", "HostMetadata=")


[IO.File]::WriteAllLines("C:\zabbix\zabbix_agentd.conf", $conf)


cd  C:\zabbix\
.\zabbix_agentd.exe -i -c C:\zabbix\zabbix_agentd.conf
.\zabbix_agentd.exe -s -c zabbix_agentd.conf
选择Windows agent2 ZIP包
选择Windows agent2 ZIP包
下载地址
下载地址

推送脚本安装

1.编写 playbook,一定要注意格式

2.执行 playbook

Zabbix 前端操作

由于此前在 Linux 篇已经讲过了,此处不再细讲,下图代表条件为主机名包含 K 进行自动注册,动作为添加主机、添加到主机组、链接到模板。

遇到的问题

如果在测试过程中遇到下列问题,大概率是防火墙的问题,需要放开入方向10050端口或者采用主动模式即可,另外在 2008 以后的版本可以通过 powershell 关闭,这里不再演示,我会在附件里提供。

最终效果

Windows 2008 R2
Windows 2008 R2
ansible推送剩下的Windows机器
ansible推送剩下的Windows机器

写在最后

其实整体来讲,Windows 的操作相对较复杂,因为需要手动开启远程的一些功能,所以与其说是自动化倒不如说是脚本安装更为合适,只不过可以批量,也许是我才疏学浅,还有更好的方式去实现,但思想应该是没错的,只不过是换种更简便的方式,那么自动化注册部分到这里该结束了,如果您有想了解的内容欢迎留言,我会尽量出全

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
    • 思路
      • 准备工作
        • 开启远程功能
          • Ansible 连接测试
            • PS 脚本
              • 推送脚本安装
                • Zabbix 前端操作
                  • 遇到的问题
                    • 最终效果
                    • 写在最后
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档