Ай Лайн
Связаться
Отдел продаж +7 (812) 385-74-84
Время работы пн-пт с 9:00 до 18:00

Установка агентов Zabbix на Windows и Linux

Со стороны сервера Zabbix настроена авторегистрация устройств (если на сервер приходит активная проверка), устройства добавляются в группу Discovered hosts, автоматически назначаются шаблоны на Windows или Linux, после установки устройству нужно добавить необходимые шаблоны и добавить в группу компании, после чего удалить членство в группе Discovered hosts

Windows хосты

Установка Windows автоматизирована через RMM, требуется только поставить RMM и убедиться, что хост расположен в разделе servers (в RMM)

После автодобавления хоста в Zabbix необходимо в настройках нового хоста в Zabbix Web заполнить поле Visible name аналогично Host name, но в нижнем регистре

Если всё-таки потребуется ручная установка, ниже приведён скрипт.

Логин и пароль к FTP-хранилищу дистрибутива в скрипт не вписываются — подставьте их из менеджера паролей или передайте через переменные окружения. Не сохраняйте учётные данные в файле скрипта на рабочих станциях.

скрипт powershell

#Set variable
$uri = "ftp://files.example.com/zabbix/zabbix-agent.zip"
$DownloadZipFile = "c:\iline\zabbix-agent.zip"
$ExtractPath = "c:\iline\"
$ZabbixAgentExe = "c:\iline\zabbix-agent\zabbix_agent2.exe"
$ZabbixAgentConf = "c:\iline\zabbix-agent\zabbix_agent2.conf"
$Hostname ="Hostname="+$env:COMPUTERNAME
$ftpuser = "<логин_ftp>"
$ftppass = "<пароль_ftp>"

if(Test-Path -Path 'c:\iline\zabbix-agent') {
    write 'Zabbix folder exist'
    if((Get-Item 'C:\iline\zabbix-agent\zabbix_agent2.exe').VersionInfo.ProductVersion -eq '6.2.0') {
        write 'Zabbix alredy latest version'
        exit 0
    }
else {
    write 'Zabbix will be installed'
}
}

if (Get-Service "Zabbix Agent 2" -ErrorAction SilentlyContinue) {
    write "Service 'Zabbix Agent 2' alredy exist, will be stopped"
    sc.exe stop "zabbix agent 2" | Out-Null
    write "Service 'Zabbix Agent 2' stopped"
    sleep 2
    }

if ($(Test-Path -Path 'c:\iline\zabbix-agent\' -ErrorAction SilentlyContinue)) {
    write "Folder 'c:\iline\zabbix-agent\' alredy exist, will be removed"
    Remove-Item -Recurse -Force C:\iline\zabbix-agent | Out-Null
    sleep 2
    }

if (Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application\Zabbix Agent 2" -ErrorAction SilentlyContinue) {
    write "Reg key 'Zabbix Agent 2' alredy exist, removing..."
    Get-Item "HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application\Zabbix Agent 2" | Remove-Item -Force -Verbose
}

#Check exist dir "c:\iline\" and create
if ($(Test-Path -Path 'c:\iline\' -ErrorAction SilentlyContinue)) {
    write "Folder 'c:\iline\' already exist, creating skiped"
    }
    
else {
    write "Folder 'c:\iline\' not exist, will be created"
    New-Item -Path "c:\" -Name "iline" -ItemType "directory" | Out-Null
    sleep 2
    }

#Download zip with zabbix agent and unzip
$WebClient = New-Object System.Net.WebClient 
$WebClient.Credentials = New-Object System.Net.NetworkCredential($ftpuser,$ftppass)
$WebClient.DownloadFile($uri,$DownloadZipFile)

$ExtractShell = New-Object -ComObject Shell.Application

$ExtractFiles = $ExtractShell.Namespace($DownloadZipFile).Items()
+
$ExtractShell.NameSpace($ExtractPath).CopyHere($ExtractFiles)

Remove-Item $DownloadZipFile
write 'Downloading and unziping of zabbix-agent package complited'

#Check exist Zabbix Agent firewall rules
if ($( Get-NetFirewallPortFilter -erroraction 'silentlycontinue' | Where { $_.LocalPort -eq "10050-10051" })) {
    write 'Firewall rule for Zabbix with 10050-10051 Ports already exists, not creating new rule'
    }
    
else {
    write 'Firewall rule for Zabbix with 10050-10051 Ports not exists, creating new rule'
    New-NetFirewallRule -DisplayName "zabbix-allow-inbound-10050" -Direction Inbound -Protocol TCP -Action Allow -LocalPort 10050-10051 -Profile Any | Out-Null
    New-NetFirewallRule -DisplayName "zabbix-allow-outbound-10050" -Direction Outbound -Protocol TCP -Action Allow -LocalPort 10050-10051 -Profile Any | Out-Null
    }

#Check exist SQL firewall rules for Zabbix
if ($( Get-NetFirewallRule -erroraction 'silentlycontinue' -DisplayName sql-allow-inbound-1433-zabbix | Get-NetFirewallPortFilter | Where { $_.LocalPort -eq "1433" })) {
    write-host 'Firewall rule with name sql-allow-inbound-1433-zabbix already exists, not creating new rule'
    }
    
else {
    write-host 'Firewall rule with name sql-allow-inbound-1433-zabbix not exists, creating new rule'
    New-NetFirewallRule -DisplayName "sql-allow-inbound-1433-zabbix" -Direction Inbound -Protocol TCP -Action Allow -LocalPort 1433 -RemoteAddress 10.20.0.0/16 -Profile Any | Out-Null
    }

#Change hostname and convert conf file to UTF8
(Get-Content $ZabbixAgentConf) -replace 'Hostname=Windows host', $Hostname | Out-File $ZabbixAgentConf
Get-Content -Encoding UTF8 $ZabbixAgentConf | Out-File -Encoding UTF8 -FilePath "$($ZabbixAgentConf)temp"
Remove-Item -Force $ZabbixAgentConf
Rename-Item "$($ZabbixAgentConf)temp" $ZabbixAgentConf
[System.IO.FileInfo] $file = Get-Item -Path $ZabbixAgentConf 
  $sequenceBOM = New-Object System.Byte[] 3 
  $reader = $file.OpenRead() 
  $bytesRead = $reader.Read($sequenceBOM, 0, 3) 
  $reader.Dispose() 
  #A UTF-8+BOM string will start with the three following bytes. Hex: 0xEF0xBB0xBF, Decimal: 239 187 191 
  if ($bytesRead -eq 3 -and $sequenceBOM[0] -eq 239 -and $sequenceBOM[1] -eq 187 -and $sequenceBOM[2] -eq 191) { 
    $utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False) 
    [System.IO.File]::WriteAllLines($ZabbixAgentConf, (Get-Content $ZabbixAgentConf), $utf8NoBomEncoding) 
    } 
write "Hostname in config file changed to '$Hostname'"
    
#Instal Zabbix Agent service and configuration
if (Get-Service "Zabbix Agent 2" -ErrorAction SilentlyContinue) {
    write "Service 'Zabbix Agent 2' alredy exist, service will be configured"
    sleep 2
    sc.exe failure "zabbix agent 2" reset= 86400 actions= restart/60000/restart/60000/restart/60000 | Out-Null
    write "Service 'Zabbix Agent 2' configuration complited"
    sc.exe start "zabbix agent 2" | Out-Null
    write "Service 'Zabbix Agent 2' started"
    sleep 2
    }
    
else {
    write "Service 'Zabbix Agent 2' not exist, installing"
    cmd.exe /c $ZabbixAgentExe --config $ZabbixAgentConf --install | Out-Null
    write "Service 'Zabbix Agent 2' installation completed"
    sc.exe failure "zabbix agent 2" reset= 86400 actions= restart/60000/restart/60000/restart/60000 | Out-Null
    write "Service 'Zabbix Agent 2' configuration complited"
    sleep 2
    sc.exe start "zabbix agent 2" | Out-Null
    write "Service 'Zabbix Agent 2' started"
    sleep 2
    }

Этапы:

  • проверка существования папки 'c:\iline\zabbix-agent', если не существует, создается
  • проверка существования zabbix-agent2.exe и его версии, сравнение с текущей
  • если требуется установка или обновление:
    • проверка, запущена ли служба, остановка
    • проверка существования папки 'c:\iline\zabbix-agent\', удаление
    • проверка ключа реестра отвечающего за логирование, если существует, удаляется
    • проверка существования папки 'c:\iline\', если не существует, создается
    • скачивание актуального архива с агентом с нашего ftp, распаковка
    • проверка правил firewall, если не существуют, создаются
    • заменяется hostname в конфиг файле на имя текущего хоста
    • выполняется установка и настройка параметров службы

Linux хосты

В процессе установки происходит запрос необходимости сменить имя хоста для zabbix, если необходимо, чтобы оно отличалось от системного имени

Команда установки (скачиваем, делаем исполняемым, запускаем, после выполнения удаляем):

wget https://files.example.com/files/scripts/zabbix-linux.sh && sudo chmod +x zabbix-linux.sh && ./zabbix-linux.sh && rm zabbix-linux.sh

скрипт bash

#!/bin/bash
sudo apt install -y lsb-release
lsb_strin=$(lsb_release -d)
debian_repo=$(lsb_release -d | sed -e 's/Description://g' -e 's/ //g' -e 's/GNU\/Linux//g' -e 's/(.*//' | tr [:upper:] [:lower:])
ubuntu_repo=$(lsb_release -d | sed -e 's/Description://g' -e 's/ //g' -e 's/\./%/2' -e 's/%.*//' | tr [:upper:] [:lower:])
zbx_hostname=$(hostname)
if [[ $lsb_strin == *"Debian"* ]]; then
  repo=$(lsb_release -d | sed -e 's/Description://g' -e 's/ //g' -e 's/GNU\/Linux//g' -e 's/(.*//' | tr [:upper:] [:lower:])
  distrib="debian"
elif [[ $lsb_strin == *"Ubuntu"* ]]; then
  repo=$(lsb_release -d | sed -e 's/Description://g' -e 's/ //g' -e 's/\./%/2' -e 's/%.*//' | tr [:upper:] [:lower:])
  distrib="ubuntu"
fi

if [[ $(dpkg -l | grep zabbix-agent2) ]]; then
  echo "Zabbix alredy installed, aborting"
  echo "------"
  echo "$(dpkg -l | grep zabbix-agent2)"
  exit
fi

repo_uri=https://repo.zabbix.com/zabbix/6.4/$(echo ${distrib})/pool/main/z/zabbix-release/zabbix-release_6.4-1+$(echo ${repo})_all.deb
repo_file=zabbix-release_6.4-1+$(echo ${repo})_all.deb
wget $repo_uri

sudo dpkg -i $repo_file
rm -f $repo_file
sudo apt update && sudo apt-get install -y zabbix-agent2

mark=0
while [[ $mark -eq 0 ]]
do
  echo "------"
  read -p "'$zbx_hostname' - current hostname, want to change hostname for zabbix? [Y/n] " -n 1 -r
  echo
  if [[ $REPLY =~ ^[Yy]$ ]]; then
    read -p "Enter new hostname:" -r zbx_hostname
    echo "'$zbx_hostname' - hostname set"
    mark=1
  elif [[ $REPLY =~ ^[Nn]$ ]]; then
    echo "'$zbx_hostname' - hostname set"
    mark=1
  elif [[ $REPLY =~ ^[A-MO-Za-mo-z]$ ]]; then
    echo "------"
    echo "wrong key"
    mark=0
  fi
done

echo $zbx_hostname

sudo sed -i 's/Server=127.0.0.1/Server=10.20.0.0\/16/' /etc/zabbix/zabbix_agent2.conf
sudo sed -i 's/ServerActive=127.0.0.1/ServerActive=10.20.2.4/' /etc/zabbix/zabbix_agent2.conf
sudo sed -i "s/Hostname=Zabbix server/Hostname=${zbx_hostname}/" /etc/zabbix/zabbix_agent2.conf
sudo sed -i 's/# HostMetadataItem=/ \nHostMetadataItem=system.uname/' /etc/zabbix/zabbix_agent2.conf

sudo systemctl restart zabbix-agent2 && sudo systemctl enable zabbix-agent2

Этапы:

  • проверяется установлен ли zabbix-agent2
  • если zabbix-agent2 не установлен:
    • определяется дистрибутив, Debian или Ubuntu
    • скачивается необходимый пакет с репозиторием, устанавливается
    • обновляется список пакетов, устанавливается zabbix-agent2
    • запрос замены имени хоста, при необходимости (требуется ручное подтверждение)
    • замена параметров в конфигурационном файле
    • активация автозапуска и запуск службы
Оставить заявку