| Works
WindowsにZabbix Agentをインストール
タイトル以上の意味はありませんが、いつも細かい部分を忘れてしまってなんとなく不安になってくるのでメモ。
ついでにPowerShellの練習も兼ねて、インストール作業を自動化してみる。
まずはWindows用のバイナリをダウンロードサイトから入手。
インストールフォルダ(例えば"C:\Program Files\Zabbix")を作成し、ダウンロードしたZIPファイルから以下のファイルをコピーする(EXEファイルは32bit版と64bit版があるので環境に合わせて選択)。
- zabbix_agentd.exe
- zabbix_get.exe
- zabbix_sender.exe
- zabbix_agentd.conf
エディタで"zabbix_agentd.conf"を開いて、必要な設定を記述。
最低でも以下のパラメータは設定しておく。
Server | Zabbix ServerのIPアドレス |
ServerActive | Zabbix ServerのIPアドレス |
Hostname | Agent導入サーバのホスト名 |
LogFile | ログファイルをフルパスで指定 |
設定ファイルの準備ができたら、コマンドプロンプトから以下のようにオプションを付けて"zabbix_agentd.exe"を実行する。
正しく実行されれば、Windowsサービスに"Zabbix Agent"が登録されてサービスが起動する。
> zabbix_agentd.conf -i -c ["zabbix_agentd.conf"をフルパスで指定] |
あとはファイアウォールの設定で"10050/TCP"を開放する。
これでZabbix Serverから動作確認できれば完了です。
一連の作業をザックリとスクリプトにするとこんな感じでしょうか(最近のサーバをターゲットにしているのでOSは64bitで決め打ち、"zabbix_agentd.conf"には適当に設定を追加)。
<#
Zabbin Agent インストールスクリプト
* 管理者権限が必要です。
* 必要に応じて事前に"Set-ExecutionPolicy RemoteSigned"を実行して下さい。
#>
# ZIPファイル
$SourceURL = "http://www.zabbix.com/downloads/2.4.4/zabbix_agents_2.4.4.win.zip"
$TempDir = [Environment]::GetEnvironmentVariable("Temp")
$DestFile = $TempDir + "\zabbix_agent.zip"
# Zabbix Server
$ZabbixSrv = "172.16.11.14"
# インストールパス
$ZabbixDir = "C:\Program Files\Zabbix"
$ZabbixCfg = $ZabbixDir + "\zabbix_agentd.conf"
# ダウンロード
Invoke-WebRequest -Uri $SourceURL -OutFile $DestFile
# ファイル配置
New-Item $ZabbixDir -ItemType Directory
$ShellApp = New-Object -com Shell.Application
$ZipFile = $ShellApp.NameSpace($DestFile)
foreach($Item in $ZipFile.Items())
{
$ShellApp.NameSpace($TempDir).Copyhere($Item)
}
Move-Item ($TempDir + "\bin\win64\zabbix_agentd.exe") $ZabbixDir
Move-Item ($TempDir + "\bin\win64\zabbix_get.exe") $ZabbixDir
Move-Item ($TempDir + "\bin\win64\zabbix_sender.exe") $ZabbixDir
Move-Item ($TempDir + "\conf\zabbix_agentd.win.conf") $ZabbixCfg
# 初期設定
$HostName = Get-WmiObject Win32_ComputerSystem | Select -First 1 | foreach({"{0}.{1}" -F $_.Name,$_.Domain})
$Config = Get-Content $ZabbixCfg
$Config = $Config -replace "^Server=127\.0\.0\.1$",("Server=" + $ZabbixSrv)
$Config = $Config -replace "^ServerActive=127\.0\.0\.1$",("ServerActive=" + $ZabbixSrv)
$Config = $Config -replace "^Hostname=.*$",("Hostname=" + $HostName)
$Config = $Config -replace "^# HostMetadata=.*$",("# HostMetadata=`r`nHostMetadata=Windows")
$Config = $Config -replace "^# EnableRemoteCommands=.*$",("# EnableRemoteCommands=`r`nEnableRemoteCommands=1")
$Config = $Config -replace "^LogFile=.*$",("LogFile=" + $ZabbixDir + "\zabbix_agentd.log")
$Config | Set-Content $ZabbixCfg -Encoding ASCII
# Agent インストール
Start-Process -FilePath ($ZabbixDir + "\zabbix_agentd.exe") -ArgumentList "-i","-c",('"' + $ZabbixCfg + '"') -Wait
# Firewall ポート開放
New-NetFirewallRule `
-Name "Zabbix Agent" `
-DisplayName "Zabbix Agent" `
-Description "for Zabbix Agent" `
-Group "Zabbix" `
-Enabled True `
-Profile Any `
-Direction Inbound `
-Action Allow `
-EdgeTraversalPolicy Block `
-LooseSourceMapping $False `
-LocalOnlyMapping $False `
-OverrideBlockRules $False `
-Program Any `
-LocalAddress Any `
-RemoteAddress Any `
-Protocol TCP `
-LocalPort 10050 `
-RemotePort Any `
-LocalUser Any `
-RemoteUser Any
exit
まっさらな環境ではうまくいったので、あとはエラーハンドリングを追加すればいいかなと。