URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

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"を開いて、必要な設定を記述。
 最低でも以下のパラメータは設定しておく。

ServerZabbix ServerのIPアドレス
ServerActiveZabbix ServerのIPアドレス
HostnameAgent導入サーバのホスト名
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

 まっさらな環境ではうまくいったので、あとはエラーハンドリングを追加すればいいかなと。