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
İ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
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