Zabbix-agent批量部署脚本Linux and Windows(部署300+可用)

之前一直使用的是VC自动发现监控虚拟机,后来发现VC自动发现的虚拟机监控在OS内部性能方面存在数据差异,举例vmware.vm.memory.usage这个参数获取的数值和实际系统内部使用的完全不一致,还要会出现数据混乱的情况,就不一一叙述了,本次使用批量部署脚本,实现zabbix更精准细化的OS内部监控。

在使用该脚本前,请先准备好安装包及配置好安装包的资源下载点,由于我这边是纯内网,所以我就找了一个NAS做了共享目录,用于安装脚本去下载zabbix-agent安装包
至于怎么做共享目录就不多说,这里是我的目录截图:
Zabbix-agent批量部署脚本Linux and Windows(部署300+可用)_第1张图片

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-agent批量部署脚本Linux and Windows(部署300+可用)_第2张图片
测试参数,请酌情修改:
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

你可能感兴趣的:(zabbix,linux,windows)