Недавно передо мной встала задача — быстро установить большое количество Zabbix-агентов на Windows-сервера.
Я решил, что это можно и нужно решать с помощью скриптов. В качестве «языка» я выбрал любимый мной (и не только мной!) Powershell.
Небольшой мануал Вы найдете под катом!
Powershell v2.0+ предлагает очень удобные средства удаленного запуска (Powershell Remoting) и я бы с удовольствием использовал бы их, но в моем случае имелась одна проблема — на «пути» могли попадаться сервера с Windows Server 2003 (без необходимых апдейтов), поэтому я принял решение использовать psexec.exe
Мне нужно было максимально автоматизированное решение, поэтому я писал такой скрипт, в который я загружаю список DNS-имен серверов из файла, а на выходе получаю XML-файл для импорта в Zabbix.
Первое, что нам надо сделать, это положить на общий ресурс папку (\\server\share\DeployZabbix), в которой будут:
1) Файл агента для x86-систем (zabbix_agentd86.exe)
2) Файл агента для x64-систем (zabbix_agentd64.exe)
3) Файл конфигурации zabbix_agentd.conf (в котором нужно указать хотя бы адрес/DNS-имя Zabbix-сервера)
4) 2 батника, Install86.bat и Install64.bat со следующим содержанием:
Install86.bat:
"C:\Program Files\Zabbix\zabbix_agentd86.exe" --config "C:\Program Files\Zabbix\zabbix_agentd.conf" --install net start "Zabbix Agent"
Install64.bat:
"C:\Program Files\Zabbix\zabbix_agentd64.exe" --config "C:\Program Files\Zabbix\zabbix_agentd.conf" --install net start "Zabbix Agent"
Второе, что нам потребуется, это папка, в которой будет лежать скрипт для разворачивания агентов, и все необходимое для его работы:
1) Собственно, сам скрипт DeployZabbix.ps1 (о нем ниже)
2) Три .txt-файла (Source1.txt, Source2.txt, Source3.txt) — это «куски» .xml файла, который получится на выходе. Не забудьте заменить группу «Default» на нужную Вам в тексте!
<?xml version="1.0" encoding="UTF-8"?> <zabbix_export> <version>2.0</version> <date>2012-11-21T09:18:17Z</date> <groups> <group> <name>Default</name> </group> </groups> <hosts>
<proxy/> <status>0</status> <ipmi_authtype>-1</ipmi_authtype> <ipmi_privilege>2</ipmi_privilege> <ipmi_username/> <ipmi_password/> <templates> <template> <name>Template OS Windows</name> </template> </templates> <groups> <group> <name>Default</name> </group> </groups> <interfaces> <interface> <default>1</default> <type>1</type> <useip>0</useip> <ip/>
<port>10050</port> <interface_ref>if1</interface_ref> </interface> </interfaces> <applications/> <items/> <discovery_rules/> <macros/> <inventory/> </host>
3) Собственно, сам psexec.exe (взять его можно отсюда)
4) Файл computers.csv, в котором FQDN-имена серверов идут каждый с новой строчки.
Ну и третье, самое важное, это сам скрипт. При написании скрипта следует добавить проверку на битность. Также я предпочитаю логгировать действия в текстовый файл, чтобы потом, в случае чего, можно было посмотреть что произошло не так.
Remove-Item .\out.txt #уберем старые файлы Remove-Item .\out.xml #уберем старые файлы copy .\Source1.txt .\out.txt #скопируем первую часть xml в новый файл #импортируем список компьютеров Import-CSV ".\computers.csv" -header("ComputerName") | ForEach { $ComputerName = $_.ComputerName #чуть-чуть упростим, мне так удобнее :) New-Item "\\$ComputerName\c$\Program Files\Zabbix" -Type Directory $path = "\\$ComputerName\c$\Program Files\Zabbix" Copy-Item \\server\share\DeployZabbix\* $path $bit = Get-WmiObject Win32_Processor -computername $ComputerName | where {$_.DeviceID -eq "CPU0"} | Select AddressWidth if ($bit -like '*64*') { .\psexec.exe \\$ComputerName "C:\\Program Files\Zabbix\Install64.bat" -h } else { .\psexec.exe \\$ComputerName "C:\\Program Files\Zabbix\Install86.bat" -h } Add-Content .\out.txt ('<host>') Add-Content .\out.txt ('<host>' + $_.ComputerName + '</host>') Add-Content .\out.txt ('<name>' + $_.ComputerName + '</name>') gc Source2.txt | Out-File .\out.txt -Append -Encoding default Add-Content .\out.txt ('<dns>' + $_.ComputerName + '</dns>') gc Source3.txt | Out-File .\out.txt -Append -Encoding default } Add-Content .\out.txt ('</hosts>') Add-Content .\out.txt ('</zabbix_export>') Rename-Item .\out.txt "out.xml"
Можно еще добавить строчки, чтобы скрипт убирал ненужные файлы, но т.к. они весят меньше 1Мб, я заморачиваться не стал.
Затем, получившийся .xml-файл (который будет лежать в каталоге со скриптом) импортируем в список хостов в Zabbix.
Вот, собственно, и все. Надеюсь данный туториал будет хоть кому-нибудь полезен.
ссылка на оригинал статьи http://habrahabr.ru/post/168185/
Добавить комментарий