Windows用Icinga2エージェントの最新バージョンでは、構成ファイルの場所が変更されましたが、現在はC:\ ProgramData \ icinga2 \ etc \ icinga2ディレクトリに配置されています。 クライアントで、zones.confファイルにグローバルゾーンを追加します(エージェントの新しいバージョンでは、そのようなゾーンはすでに登録されていますがコメントアウトされています)。
object Zone "global-templates" { global = true }
サーバー上で、ディレクトリ/etc/icinga2/zones.d/global-templatesを作成し、powershellスクリプトを実行するコマンドを定義する次のコンテンツを含むcommands.confファイルを作成します。
object CheckCommand "powershell" { import "plugin-check-command" timeout = 5m command = [ "powershell.exe" ] arguments = { "-command" = { skip_key = true value = "$ps_command$" order = 0 } "-args" = { skip_key = true value = "$ps_args$" order = 1 } } }
追加のオプションコマンド
// 64 powershell object CheckCommand "powershell64" { import "plugin-check-command" timeout = 3m command = [ "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe" ] arguments = { "-command" = { value = "$ps_command$" order = 0 } "-args" = { skip_key = true value = "$ps_args$" order = 1 } } } // powershell . object CheckCommand "powershell-bypass" { import "plugin-check-command" timeout = 3m command = [ "powershell.exe" ] arguments = { "-ExecutionPolicy" = { value = "ByPass" order = 0 } "-File" = { value = "$ps_command$" order = 1 } "-args" = { skip_key = true value = "$ps_args$" order = 2 } } }
同じディレクトリ内のサーバーで、エージェントのサービスが記述されるservices.confファイルを作成します。 最初に、サーバーからスクリプト更新サービスを追加します。
apply Service "upd-powershell-scripts" { max_check_attempts = 2 // 60 check_interval = 60m retry_interval = 30m // Windows assign where host.vars.os == "Windows" && host.name == NodeName // Linux ignore where host.vars.os == "Linux" check_command = "powershell" vars.ps_command = "C:\\Scripts\\Icinga2\\update_icinga2_scripts.ps1" }
Windowsエージェントをインストールすると、変数vars.os =“ Windows”がデフォルトでetc / conf.d / hosts.confファイルに書き込まれ、Linuxエージェントではこのサービスが使用され無視されます。
クライアントのディレクトリc:\ Scripts \ Icinga2に、スクリプトを更新するPowerShellスクリプトを配置する必要があります。
リモートサーバーからPowerShellスクリプトを読み込むスクリプト
<# icinga2scripts Version 0.2 Description: Update powershell from remote host. Pavel Satin (c) 2016 pslater.ru@gmail.com #> $returnStateOK = 0 $returnStateWarning = 1 $returnStateCritical = 2 $returnStateUnknown = 3 $localDir = "c:\Scripts\icinga2\" $ScriptHost = "http://--" $ScriptHostPath = $ScriptHost + "/icinga2scripts/" Try { $HttpContent = Invoke-WebRequest -URI $ScriptHostPath -UseBasicParsing $ArrLinks = $HttpContent.Links | Foreach {$_.href } Foreach ($ArrStr in $ArrLinks) { if ( $ArrStr.endsWith(".ps1") ) { ## Apache2 $NewScriptHostPath = $ScriptHostPath + $ArrStr ## IIS, #$NewScriptHostPath = $ScriptHost + $ArrStr $localFile = $localDir + $ArrStr Invoke-WebRequest -URI $NewScriptHostPath -UseBasicParsing -OutFile $localFile $script_count = $script_count + 1 } } $icinga2_status = "Update OK: Downloads " + $script_count + " scripts." Write-Host $icinga2_status [System.Environment]::Exit($returnStateOK) } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Write-Host $ErrorMessage [System.Environment]::Exit($returnStateCritical) }
しばらくすると、エージェントは新しいバージョンの大域ゾーンをダウンロードします。
サーバー上のノード構成の更新を開始し、サービスをオーバーロードします。
icinga2 node update-config service icinga2 reload
私たちのサービスはエージェントに追加され、機能します。
たとえば、再起動機能を追加します。 リクエストに応じてOSを再起動するサービスをservices.confファイルにもう1つ追加します。 そのようなサービスのアクティブなチェックを必ず無効にしてください(私たちが制御するサーバーがn分ごとに再起動するのは望ましくありません)。
apply Service "reboot-system" { // enable_active_checks = false max_check_attempts = 2 // Windows assign where host.vars.os == "Windows" && host.name == NodeName // Linux ignore where host.vars.os == "Linux" check_command = "powershell" vars.ps_command = "C:\\Scripts\\Icinga2\\Reboot_System.ps1" }
再び、サーバー上で、ノードの構成の更新を開始し、構成の変更が有効になるようにサービスをオーバーロードします。
icinga2 node update-config service icinga2 reload
再起動スクリプト
<# icinga2scripts Version 0.2 Description: Reboot system. Pavel Satin (c) 2016 pslater.ru@gmail.com #> $returnStateOK = 0 $returnStateWarning = 1 $returnStateCritical = 2 $returnStateUnknown = 3 # if ( $args[0] -ne $Null) { $ComputerName = $args[0] } else { $ComputerName = "localhost" } $result = Test-Connection -ComputerName $ComputerName -Count 2 -Quiet if ($result) { Restart-Computer -computername $ComputerName -force Write-Host "OK - Command send." [System.Environment]::Exit($returnStateOK) } #End if test-connection result else { Write-Host " $ComputerName ." [System.Environment]::Exit($returnStateUnknown) }
このスクリプトをWebサーバー(ダウンロードスクリプトに登録されている)に配置し、エージェントが一定時間後にダウンロードします。 サーバーで次のコマンドを実行すると、サービスの保守性を確認できます。
/bin/echo "[`date +%s`] SCHEDULE_FORCED_SVC_CHECK;;reboot-system;`date +%s`" >> /var/run/icinga2/cmd/icinga2.cmd
その後、Windowsエージェントがインストールされたマシンが再起動します。
PowerShellスクリプトがエージェントで動作するためには、それらに署名するか(署名方法 )、実行ポリシーを正しく構成する必要があります(Set-ExecutionPolicy)。 Icinga2が検証後にサービスのステータス(正常/警告/クリティカル)を正しく判断するには、スクリプトは必ず正しいリターンコードを返す必要があります。
定義したスクリプトの主なリターンコードは次のとおりです。
$returnStateOK = 0 $returnStateWarning = 1 $returnStateCritical = 2 $returnStateUnknown = 3
たとえば、サービスがクリティカルな状態にある場合、次を返します。
Write-Host " $ComputerName ." [System.Environment]::Exit($returnStateCritical)
スクリプトからの追加のパフォーマンスデータは、次のように返されます。
Write-Host "OK - :" "<table><thead><tr><th>_</th><th>Value</th></tr></thead><tbody>" "<tr><td> :</td><td>" + $catridge_usage_prc + " %</td></tr>" "<tr><td> :</td><td>" + $page_count + "</td></tr></tbody></table>" "|catridge_usage_prc=$catridge_usage_prc;10;3;100;0" "|page_count=$page_count;;;;" [System.Environment]::Exit($returnStateOK)
ここでは、パイプの後に、パフォーマンスデータを次の形式で送信します。
'label'=value[UOM];[warn];[crit];[min];[max]
icingaweb2では、次のようになります。
キリル文字で表示されるメッセージを含むスクリプトがある場合、ファイルはBOMエンコードを使用してUTF-8で保存する必要があります。そうしないと、Webインターフェースまたはicingaweb2でこれらのメッセージを表示するときに問題が発生する可能性があります
icinga / nagios用の膨大な数のプラグインがすでに作成されていますが、ほとんどの場合、Linuxシステムで動作するように設計されています。 もちろん、Windowsの場合、標準のicinga2コマンドを補完する既製のソリューションがあります。たとえば、 nsclient ++ですが、これらは追加のエンティティ、追加の構成です。 このソリューションでは、すべてが標準のWindowsツールを使用して行われ、同時にIcinga2構成に追加のサービスとWebサーバーに追加のPowerShellスクリプトを追加するだけで、追加情報をその場で取得できます。
参照資料
最小限の費用でicinga2のマイクロモニタリングを引き上げます
スクリプトを含むリポジトリ
プラグインを監視するためのガイドライン