Zabbix での DFS レプリケーションの簡単な監視

導入

データへの単一アクセス ポイントとして DFS を使用し、データ センターとブランチ サーバー間のデータ レプリケーションに DFSR を使用する、かなり大規模な分散インフラストラクチャでは、このレプリケーションのステータスを監視するという問題が生じます。
偶然にも、DFSR の使用を開始したほぼ直後に、さまざまなツールの既存のツールを置き換え、インフラストラクチャの監視をより有益で完全かつ論理的な形式にすることを目的として、Zabbix の実装を開始しました。 Zabbix を使用して DFS レプリケーションを監視する方法について説明します。

まず最初に、DFS レプリケーションのステータスを監視するために、DFS レプリケーションに関するどのデータを取得する必要があるかを決定する必要があります。 最も関連性の高い指標はバックログです。 これには、レプリケーション グループの他のメンバーと同期されていないファイルが含まれています。 ユーティリティを使用してサイズを確認できます dfsrdiag、DFSR 役割とともにインストールされます。 通常のレプリケーション状態では、バックログ サイズはゼロに近づくはずです。 したがって、バックログ内の多数のファイルは、レプリケーションに問題があることを示しています。

次に、問題の実際的な側面について説明します。

Zabbix エージェントを通じてバックログのサイズを監視するには、以下が必要です。

  • 出力を解析するスクリプト dfsrdiag 最終的なバックログ サイズ値を Zabbix に提供するため、
  • サーバー上にレプリケーション グループがいくつあるか、それらがレプリケートするフォルダー、およびそれらに含まれる他のサーバーを決定するスクリプト (サーバーごとにこれらすべてを手動で Zabbix に入力したくありませんよね?)
  • これらのスクリプトをUserParameterとしてZabbixエージェント設定に追加し、監視サーバーからの後続の呼び出しを実行します。
  • バックログを読み取る権限を持つユーザーとして Zabbix エージェント サービスを開始します。
  • Zabbix のテンプレート。グループの検出、受信データの処理、およびグループに対するアラートの発行が設定されます。

スクリプトパーサー

パーサーを作成するために、Windows Server のすべてのバージョンに存在する最も汎用的な言語として VBS を選択しました。 スクリプトのロジックは単純です。コマンド ラインを介して、レプリケーション グループの名前、レプリケート フォルダー、および送信サーバーと受信サーバーの名前を受け取ります。 これらのパラメータは次に渡されます。 dfsrdiag、その出力に応じて次のように生成されます。
ファイルの数 - バックログ内のファイルの存在に関するメッセージを受信した場合、
0 — バックログにファイルがないことに関するメッセージを受信した場合 (「バックログなし」)、
-1 - エラーメッセージを受信した場合 dfsrdiag リクエストの実行時 (「[エラー]」)。

get-Backlog.vbs

strReplicationGroup=WScript.Arguments.Item(0)
strReplicatedFolder=WScript.Arguments.Item(1)
strSending=WScript.Arguments.Item(2)
strReceiving=WScript.Arguments.Item(3)

Set WshShell = CreateObject ("Wscript.shell")
Set objExec = WSHshell.Exec("dfsrdiag.exe Backlog /RGName:""" & strReplicationGroup & """ /RFName:""" & strReplicatedFolder & """ /SendingMember:" & strSending & " /ReceivingMember:" & strReceiving)
strResult = ""
Do While Not objExec.StdOut.AtEndOfStream
	strResult = strResult & objExec.StdOut.ReadLine() & "\"
Loop

If InStr(strResult, "No Backlog") > 0 then
	intBackLog = 0
ElseIf  InStr(strResult, "[ERROR]") > 0 Then
    intBackLog = -1
Else
	arrLines = Split(strResult, "\")
	arrResult = Split(arrLines(1), ":")
	intBackLog = arrResult(1)
End If

WScript.echo intBackLog

検出スクリプト

Zabbix がサーバー上に存在するすべてのレプリケーション グループを判断し、リクエストに必要なすべてのパラメーター (フォルダー名、隣接するサーバーの名前) を見つけるには、まずこの情報を取得し、次にそれを提示する必要があります。 Zabbix が理解できる形式で。 検出ツールが理解できる形式は次のようになります。

        "data":[
                {
                        "{#GROUP}":"Share1",
                        "{#FOLDER}":"Folder1",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"Server2"}

...

                        "{#GROUP}":"ShareN",
                        "{#FOLDER}":"FolderN",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"ServerN"}]}

関心のある情報を取得する最も簡単な方法は、WMI を使用して、DfsrReplicationGroupConfig の対応するセクションから情報を取得することです。 その結果、WMI へのリクエストを生成し、グループ、そのフォルダー、およびサーバーのリストを必要な形式で出力するスクリプトが誕生しました。

DFSRDiscovery.vbs


dim strComputer, strLine, n, k, i

Set wshNetwork = WScript.CreateObject( "WScript.Network" )
strComputer = wshNetwork.ComputerName

Set oWMIService = GetObject("winmgmts:\" & strComputer & "rootMicrosoftDFS")
Set colRGroups = oWMIService.ExecQuery("SELECT * FROM DfsrReplicationGroupConfig")
wscript.echo "{"
wscript.echo "        ""data"":["
n=0
k=0
i=0
For Each oGroup in colRGroups
  n=n+1
  Set colRGFolders = oWMIService.ExecQuery("SELECT * FROM DfsrReplicatedFolderConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
  For Each oFolder in colRGFolders
    k=k+1
    Set colRGConnections = oWMIService.ExecQuery("SELECT * FROM DfsrConnectionConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
    For Each oConnection in colRGConnections
      i=i+1
      binInbound = oConnection.Inbound
      strPartner = oConnection.PartnerName
      strRGName = oGroup.ReplicationGroupName
      strRFName = oFolder.ReplicatedFolderName
      If oConnection.Enabled = True and binInbound = False Then
        strSendingComputer = strComputer
        strReceivingComputer = strPartner
        strLine1="                {"    
        strLine2="                        ""{#GROUP}"":""" & strRGName & """," 
        strLine3="                        ""{#FOLDER}"":""" & strRFName & """," 
        strLine4="                        ""{#SENDING}"":""" & strSendingComputer & ""","                  
        if (n < colRGroups.Count) or (k < colRGFolders.count) or (i < colRGConnections.Count) then
          strLine5="                        ""{#RECEIVING}"":""" & strReceivingComputer & """},"
        else
          strLine5="                        ""{#RECEIVING}"":""" & strReceivingComputer & """}]}"       
        end if		
        wscript.echo strLine1
        wscript.echo strLine2
        wscript.echo strLine3
        wscript.echo strLine4
        wscript.echo strLine5	   
      End If
    Next
  Next
Next

私も同意します。スクリプトはコードの優雅さで輝けていないかもしれませんし、スクリプト内のいくつかの点は確かに簡略化できるかもしれませんが、主な機能は実行されます。つまり、Zabbix が理解できる形式でレプリケーション グループのパラメータに関する情報を提供するということです。

Zabbix エージェント設定へのスクリプトの追加

ここにあるものはすべて非常にシンプルです。 エージェント構成ファイルの末尾に次の行を追加します。

UserParameter=check_dfsr[*],cscript /nologo "C:Program FilesZabbix Agentget-Backlog.vbs" $1 $2 $3 $4
UserParameter=discovery_dfsr[*],cscript /nologo "C:Program FilesZabbix AgentDFSRDiscovery.vbs"

もちろん、スクリプトがあるパスに合わせてパスを調整します。 それらをエージェントがインストールされているのと同じフォルダーに置きました。

変更を加えた後、Zabbix エージェント サービスを再起動します。

Zabbix Agent サービスを実行するユーザーの変更

を通じて情報を受け取るために dfsrdiagの場合、このユーティリティは、レプリケーション グループの送信メンバーと受信メンバーの両方に対する管理者権限を持つアカウントで実行する必要があります。 Zabbix エージェント サービスは、デフォルトでシステム アカウントで実行されており、そのようなリクエストを実行できません。 ドメイン内に別のアカウントを作成し、必要なサーバー上で管理者権限を付与し、これらのサーバー上でそのアカウントで実行されるようにサービスを構成しました。

別の道に進むこともできます。 dfsrdiag実際、同じ WMI を通じて動作するため、次のように使用できます。 説明、管理者権限を発行せずにドメイン アカウントに使用権限を与える方法ですが、レプリケーション グループが多数ある場合、各グループに権限を発行するのは困難になります。 ただし、ドメイン コントローラー上のドメイン システム ボリュームのレプリケーションを監視する場合は、監視サービス アカウントにドメイン管理者権限を与えるのは得策ではないため、これが唯一許容できるオプションになる可能性があります。

監視テンプレート

受け取ったデータに基づいて、次のようなテンプレートを作成しました。

  • レプリケーション グループの自動検出を XNUMX 時間に XNUMX 回実行します。
  • 各グループのバックログ サイズを 5 分ごとにチェックします。
  • いずれかのグループのバックログ サイズが 100 分間で 30 を超えた場合にアラートを発行するトリガーが含まれています。 トリガーは、検出されたグループに自動的に追加されるプロトタイプとして説明されています。
  • レプリケーション グループごとにバックログ サイズのグラフを作成します。

Zabbix 2.2のテンプレートをダウンロードできます。 ここで.

合計

テンプレートを Zabbix にインポートし、必要な権限を持つアカウントを作成した後、DFSR を監視するファイル サーバーにスクリプトをコピーし、そのサーバーのエージェント構成に XNUMX 行を追加して、Zabbix エージェント サービスを再起動するだけです。 、目的のアカウントとして実行するように設定します。 DFSR 監視には他の手動設定は必要ありません。

出所: habr.com

コメントを追加します