之前一直使用的是VC自动发现监控虚拟机,后来发现VC自动发现的虚拟机监控在OS内部性能方面存在数据差异,举例vmware.vm.memory.usage这个参数获取的数值和实际系统内部使用的完全不一致,还要会出现数据混乱的情况,就不一一叙述了,本次使用批量部署脚本,实现zabbix更精准细化的OS内部监控。
在使用该脚本前,请先准备好安装包及配置好安装包的资源下载点,由于我这边是纯内网,所以我就找了一个NAS做了共享目录,用于安装脚本去下载zabbix-agent安装包
至于怎么做共享目录就不多说,这里是我的目录截图:
Linux批量安装zabbix-agent
安装包下载地址(根据自己的版本下载):
agent:https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/
pcre:网上找或者通过有网的linux yum后选择d下载到本地拷贝
我上传的整合好的资源包:适合centos7版本
测试参数,请酌情修改:
zabbix服务器:192.168.1.1
资源下载点:192.168.1.2
访问资源的账号:nasuser/123456
注:如果遇到无法批量安装问题请删掉安装软件包代码块的&> /dev/null,可以看到报错信息
批量部署脚本如下:
#!/bin/bash
# 检查是否已安装Zabbix相关软件包(通过rpm方式)
is_installed_rpm() {
if rpm -qa | grep -q zabbix; then
return 0
else
return 1
fi
}
# 获取已安装的Zabbix相关软件包列表(通过rpm方式)
get_installed_packages_rpm() {
installed_packages=$(rpm -qa | grep zabbix)
echo "$installed_packages"
}
# 获取主机的IP地址(以192.168开头)
get_ip_address() {
ip_address=$(ip addr | awk '/inet / && /168\.192\./ {gsub(/\/[0-9]+/, "", $2); print $2; exit}')
echo "$ip_address"
}
# 下载安装包
download_packages() {
mkdir -p /zbxtmp
wget -nc --ftp-user=nasuser --ftp-password=1234567 ftp://192.168.1.2/Temp/yum/* -P /zbxtmp/
}
# 安装软件包
install_packages() {
cd /zbxtmp
# 安装 pcre2
if ! yum localinstall -y pcre2-10.23-2.el7.x86_64.rpm --disablerepo=* &> /dev/null; then
echo "pcre2 安装失败"
return 1
fi
# 安装 zabbix-agent
if ! yum localinstall -y zabbix-agent-6.4.1-release1.el7.x86_64.rpm --disablerepo=* &> /dev/null; then
echo "Zabbix Agent 安装失败"
return 1
fi
}
# 替换配置文件
replace_config() {
# 备份原配置文件
cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.bak
# 清空配置文件内容
echo -n > /etc/zabbix/zabbix_agentd.conf
# 获取主机的IP地址
ip_address=$(get_ip_address)
# 添加新的配置内容
echo "PidFile=/var/run/zabbix/zabbix_agentd.pid" >> /etc/zabbix/zabbix_agentd.conf
echo "LogFile=/var/log/zabbix/zabbix_agentd.log" >> /etc/zabbix/zabbix_agentd.conf
echo "LogFileSize=0" >> /etc/zabbix/zabbix_agentd.conf
echo "Server=192.168.1.1" >> /etc/zabbix/zabbix_agentd.conf
echo "ServerActive=192.168.1.1" >> /etc/zabbix/zabbix_agentd.conf
echo "Hostname=$ip_address" >> /etc/zabbix/zabbix_agentd.conf
echo "Include=/etc/zabbix/zabbix_agentd.d/*.conf" >> /etc/zabbix/zabbix_agentd.conf
echo "配置文件已替换完成"
}
# 设置服务启动及开机启动
set_service() {
# 启动服务
systemctl restart zabbix-agent
# 设置开机启动
systemctl enable zabbix-agent &> /dev/null
}
# 主程序
main() {
ip_address=$(get_ip_address)
if [ -n "$ip_address" ]; then
echo "IP地址:$ip_address"
if is_installed_rpm; then
echo "安装结果:跳过"
echo "已安装的Zabbix安装包列表:"
get_installed_packages_rpm
replace_config
set_service
else
echo "正在安装"
download_packages
if ! install_packages; then
echo "安装结果:失败"
exit 1
fi
echo "已安装的Zabbix安装包列表:"
get_installed_packages_rpm
replace_config
set_service
fi
# 获取服务状态
service_status=$(systemctl is-active zabbix-agent --quiet && echo "active" || echo "inactive")
echo "服务状态:$service_status"
else
echo "没有找到符合条件的IP地址"
exit 1
fi
}
main
Windows批量安装zabbix-agent
安装包下载地址(根据自己的版本下载):
agent:https://www.zabbix.com/cn/download_agents
测试参数,请酌情修改:
zabbix服务器:192.168.1.1
资源下载点:192.168.1.2
访问资源的账号:nasuser/123456
这里解释一下这个脚本,我先把zabbix的安装文件放到资源下载点,因为你放在资源点的安装文件是只读不变的,那么我确认我需要修改的server地址及hostname地址是在哪一行,然后脚本中就直接指定行数,修改指定行数就可以了
批量部署脚本如下:
@echo off
setlocal enabledelayedexpansion
:: 获取主机的IP地址
:get_ip_address
for /f "tokens=2 delims=:" %%f in ('ipconfig ^| findstr "IPv4 Address" ^| findstr "10.115."') do (
for /f "tokens=1" %%g in ("%%f") do (
set "ip=%%g"
)
)
echo IP:
echo %ip%
:: 检查是否已安装Zabbix Agent
sc queryex type= service state= all | findstr "Zabbix" >nul
if %errorlevel%==0 (
echo Zabbix Agent install
goto :is_debug
) else (
echo Zabbix Agent notinstall
goto :is_installed
)
:is_installed
echo being installed
call :download_packages
call :install_packages
call :replace_config
call :vi_service1
call :vi_service2
call :set_service
goto :status_service
:is_debug
echo Installation result: Skip
call :replace_config2
call :vi_service1
call :vi_service2
call :set_service
goto :status_service
:: 下载安装包
:download_packages
net use \\192.168.1.2\Temp\pkg /user:testuser 123456 >nul
robocopy \\192.168.1.2\Temp\pkg\ C:\ /E >nul
net use \\192.168.1.2\Temp\pkg /delete >nul
:: 安装软件包
:install_packages
C:\zabbix\bin\zabbix_agentd.exe -c C:\zabbix\conf\zabbix_agentd.conf -i >nul
C:\zabbix\bin\zabbix_agentd.exe -c C:\zabbix\conf\zabbix_agentd.conf -s >nul
:replace_config
:: 备份原配置文件
copy "C:\zabbix\conf\zabbix_agentd.conf" "C:\zabbix\conf\zabbix_agentd.conf.bak"
:replace_config2
:: 备份原配置文件
copy "C:\zabbix\conf\zabbix_agentd.conf" "C:\zabbix\conf\zabbix_agentd.conf.bak2"
REM 替换配置文件内容-1
:vi_service1
set "file_path1=C:\zabbix\conf\zabbix_agentd.conf"
set "line_number1=91" REM 指定需要修改的行数
set "new_content1=Server=192.168.1.1 " REM 指定要替换的新内容
REM 使用批处理命令修改指定行数的内容
setlocal enabledelayedexpansion
set "temp_file1=temp1.txt"
set "count=0"
for /f "usebackq delims=" %%a in ("%file_path1%") do (
set /a "count+=1"
if !count! equ %line_number1% (
echo %new_content1%>>!temp_file1!
) else (
echo %%a>>!temp_file1!
)
)
move /y "%temp_file1%" "%file_path1%"
REM 替换配置文件内容-2
:vi_service2
set "file_path=C:\zabbix\conf\zabbix_agentd.conf"
set "line_number=148" REM 指定需要修改的行数
set "new_content=Hostname=!ip!" REM 指定要替换的新内容
REM 使用批处理命令修改指定行数的内容
setlocal enabledelayedexpansion
set "temp_file=temp.txt"
set "count=0"
for /f "usebackq delims=" %%a in ("%file_path%") do (
set /a "count+=1"
if !count! equ %line_number% (
echo %new_content%>>!temp_file!
) else (
echo %%a>>!temp_file!
)
)
move /y "%temp_file%" "%file_path%" >nul
:: 设置服务启动及开机启动
:set_service
:: 重启服务
sc stop "Zabbix Agent" >nul
sc start "Zabbix Agent" >nul
if %ERRORLEVEL% neq 0 (
echo Service startup failure
exit /b 1
)
:: 设置开机启动
sc config "Zabbix Agent" start= auto >nul
if %ERRORLEVEL% neq 0 (
echo Failed to set the startup on the device
exit /b 1
)
exit /b 0
:status_service
:: 获取服务状态
sc query "Zabbix Agent" | findstr "STATE" | findstr /i "RUNNING"
if %ERRORLEVEL% neq 0 (
echo server-stop
) else (
echo server-start
)
:: 等待一段时间
timeout /t 3 /nobreak
exit