概述
在一个有代理的监控解决方案中,最多的工作量就在于部署以及更新代理,如何快速地完成代理程序的部署和更新,是监控解决方案中需要解决的一个难点,zabbix也是如此,官方的zabbix代理支持多种方式进行部署,如rpm、源码编译等,在这个解决方案中,采用的是源码编译后进行打包部署。
原理
实现zabbix代理的远程部署的原理是使用ssh协议,登录到目标服务器,在具备root的权限的前提下,创建zabbix监控用户和代理安装目录,以及必要的sudo的配置。将打包后的代理介质进行解压,使用zabbix监控用户进行运行,最后再通过命令检查,看看代理部署情况。
实操
工具编写
由于openssh的客户端在没有证书的情况下,无法实现免密登录,虽然也有expect语言,实现交互式的密码输入,但总体来说还是有点不太方便,所以这里使用golang自己编写了一个客户端
项目地址:https://gitee.com/xiaojinran/zabbixTools
主要实现了以下两点功能:
-
执行命令
执行命令分为两种,一种是等待结果返回,另一种是不等待结果,直接放置后台执行
-
上传文件
上传的文件均会放在目标服务器的/tmp目录下,文件名称保持一致
有了以上的两个功能之后,我们就可以通过脚本的方式,将代理介质上传后执行部署命令,再运行检查命令,即可完成代理的部署
脚本编写
根据项目的需要,可以灵活的去编写脚本,如果客户现场能够允许有root权限进行ssh登录,那么客户可以啥都不管。不然的话,客户需要帮忙预先配置好用户以及软件部署目录。
这里我假设客户已经配置好了监控用户demo,密码也为demo,以及对应的软件部署目录,即家目录。
部署脚本编写如下:
#!/bin/sh
# Transfer AgentFile
remoteControl=/zabbix/tools/remoteControl
agentFile=/zabbix/agents/zabbixAgt.tar.gz
configFile=/home/demo/zabbix/etc/zabbix_agent2.conf
host=$1