Zabbix'te DFS Çoğaltmasının basit izlenmesi

Giriş

Verilere tek erişim noktası olarak DFS'yi ve veri merkezleri ile şube sunucuları arasında veri çoğaltma için DFSR'yi kullanan oldukça büyük ve dağıtılmış bir altyapıyla, bu çoğaltmanın durumunun izlenmesi sorunu ortaya çıkıyor.
Tesadüfen, DFSR'yi kullanmaya başladıktan hemen sonra, çeşitli araçlardan oluşan mevcut hayvanat bahçesini değiştirmek ve altyapı izlemeyi daha bilgilendirici, eksiksiz ve mantıklı bir forma getirmek amacıyla Zabbix'i uygulamaya başladık. DFS replikasyonunu izlemek için Zabbix kullanımından bahsedeceğiz.

Öncelikle DFS replikasyonunun durumunu takip etmek için hangi verilerin alınması gerektiğine karar vermemiz gerekiyor. En alakalı gösterge birikimdir. Çoğaltma grubunun diğer üyeleriyle eşitlenmemiş dosyaları içerir. Yardımcı programı kullanarak boyutunu görüntüleyebilirsiniz dfsrdiagDFSR rolüyle yüklendi. Normal bir çoğaltma durumunda biriktirme listesi boyutu sıfıra yaklaşmalıdır. Buna göre, biriktirme dosyasındaki çok sayıda dosya, çoğaltmayla ilgili sorunlara işaret eder.

Şimdi konunun pratik tarafı hakkında.

Zabbix Agent aracılığıyla biriktirilen işlerin boyutunu izlemek için şunlara ihtiyacımız olacak:

  • Çıktıyı ayrıştıracak komut dosyası dfsrdiag Zabbix'e nihai birikim boyutu değerlerini sağlamak,
  • Sunucuda kaç adet replikasyon grubu bulunduğunu, bunların hangi klasörleri replika ettiğini ve bunlara başka hangi sunucuların dahil olduğunu belirleyecek bir script (tüm bunları Zabbix'e her sunucu için elle girmek istemiyoruz değil mi?),
  • İzleme sunucusundan daha sonra çağrılmak üzere bu komut dosyalarının Zabbix aracı yapılandırmasına UserParameter olarak eklenmesi,
  • Backlog okuma haklarına sahip bir kullanıcı olarak Zabbix aracı hizmetini başlatmak,
  • Zabbix için grupların tespit edilmesinin, alınan verilerin işlenmesinin ve bunlara ilişkin uyarıların verilmesinin yapılandırılacağı bir şablon.

Komut dosyası ayrıştırıcı

Ayrıştırıcıyı yazmak için Windows Server'ın tüm sürümlerinde bulunan en evrensel dil olarak VBS'yi seçtim. Komut dosyasının mantığı basittir: Çoğaltma grubunun adını, çoğaltılan klasörü ve gönderen ve alan sunucuların adlarını komut satırı aracılığıyla alır. Bu parametreler daha sonra aktarılır. dfsrdiagve çıktısına bağlı olarak şunu üretir:
Dosya sayısı - biriktirme listesinde dosyaların varlığına ilişkin bir mesaj alınırsa,
0 - biriktirme listesinde dosyaların bulunmadığına dair bir mesaj alınırsa (“Biriktirme Listesi Yok”),
-1 - bir hata mesajı alınırsa dfsrdiag bir isteği yürütürken ("[ERROR]").

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

Keşif komut dosyası

Zabbix'in sunucuda bulunan tüm replikasyon gruplarını belirlemesi ve istek için gerekli tüm parametreleri (klasör adı, komşu sunucuların adları) bulması için öncelikle bu bilgiyi almamız, ikinci olarak sunmamız gerekiyor. Zabbix'in anlayabileceği bir formatta. Keşif aracının anladığı biçim şuna benzer:

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

...

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

İlgilendiğimiz bilgiyi almanın en kolay yolu WMI aracılığıyla bu bilgiyi DfsrReplicationGroupConfig'in ilgili bölümlerinden çıkarmaktır. Sonuç olarak, WMI'ya bir istek oluşturan ve grupların, klasörlerinin ve sunucularının bir listesini gerekli formatta çıkaran bir komut dosyası doğdu.

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

Komut dosyasının kodun zarafetiyle parlamayabileceğini ve içindeki bazı şeylerin kesinlikle basitleştirilebileceğini kabul ediyorum, ancak ana işlevini yerine getiriyor - çoğaltma gruplarının parametreleri hakkında Zabbix tarafından anlaşılabilecek bir formatta bilgi sağlıyor.

Zabbix aracısı yapılandırmasına komut dosyaları ekleme

Burada her şey son derece basit. Aracı yapılandırma dosyasının sonuna aşağıdaki satırları ekleyin:

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"

Tabii ki, senaryolarımızın olduğu yerlere göre yolları ayarlıyoruz. Bunları aracının kurulu olduğu klasöre koydum.

Değişiklikleri yaptıktan sonra Zabbix aracı hizmetini yeniden başlatın.

Zabbix Agent hizmetinin altında çalıştığı kullanıcıyı değiştirme

Aracılığıyla bilgi almak için dfsrdiagyardımcı programı, çoğaltma grubunun hem gönderen hem de alan üyelerine yönelik yönetim haklarına sahip bir hesap altında çalıştırılmalıdır. Varsayılan olarak sistem hesabı altında çalışan Zabbix aracı hizmeti böyle bir isteği yerine getiremeyecektir. Domainde ayrı bir hesap oluşturdum, ona gerekli sunucularda yönetici hakları verdim ve hizmeti bu sunucularda onun altında çalışacak şekilde yapılandırdım.

Başka bir yoldan gidebilirsiniz: çünkü dfsrdiagaslında aynı WMI üzerinden çalışır, o zaman kullanabilirsiniz tanım, bir etki alanı hesabına, yönetici hakları vermeden onu kullanma haklarını nasıl veririz, ancak çok sayıda çoğaltma grubumuz varsa, o zaman her gruba hak vermek zor olacaktır. Ancak, etki alanı denetleyicilerinde Etki Alanı Sistem Birimi çoğaltmasını izlemek istediğimiz takdirde, izleme hizmeti hesabına etki alanı yöneticisi hakları vermek iyi bir fikir olmadığından kabul edilebilir tek seçenek bu olabilir.

İzleme şablonu

Aldığım verilere dayanarak şöyle bir şablon oluşturdum:

  • Çoğaltma gruplarının otomatik keşfini saatte bir kez çalıştırır,
  • Her grubun biriktirilen iş boyutunu her 5 dakikada bir kontrol eder,
  • Herhangi bir grubun biriktirme listesi boyutu 100 dakika boyunca 30'den fazla olduğunda uyarı veren bir tetikleyici içerir. Tetikleyici, tespit edilen gruplara otomatik olarak eklenen bir prototip olarak tanımlanır,
  • Her çoğaltma grubu için biriktirme listesi boyutu grafikleri oluşturur.

Zabbix 2.2 şablonunu indirebilirsiniz burada.

sonuç

Şablonu Zabbix'e aktardıktan ve gerekli haklara sahip bir hesap oluşturduktan sonra, yalnızca komut dosyalarını DFSR için izlemek istediğimiz dosya sunucularına kopyalamamız, üzerlerindeki aracı yapılandırmasına iki satır eklememiz ve Zabbix aracı hizmetini yeniden başlatmamız gerekecek. , istenen hesap olarak çalışacak şekilde ayarlayın. DFSR izleme için başka manuel ayar gerekmez.

Kaynak: habr.com

Yorum ekle