Zabbix-da DFS replikatsiyasining oddiy monitoringi

kirish

DFS dan ma'lumotlarga yagona kirish nuqtasi sifatida va ma'lumotlar markazlari va filial serverlari o'rtasida ma'lumotlarni replikatsiya qilish uchun DFSR dan foydalanadigan juda katta va taqsimlangan infratuzilma bilan ushbu replikatsiya holatini kuzatish haqida savol tug'iladi.
Tasodifan, biz DFSR-dan foydalanishni boshlaganimizdan so'ng, biz mavjud turli xil vositalarning hayvonot bog'ini almashtirish va infratuzilma monitoringini yanada ma'lumotli, to'liq va mantiqiy shaklga keltirish maqsadida Zabbix-ni amalga oshirishni boshladik. DFS replikatsiyasini kuzatish uchun Zabbix-dan foydalanish haqida gaplashamiz.

Avvalo, uning holatini kuzatish uchun DFS replikatsiyasi haqida qanday ma'lumotlarni olish kerakligini hal qilishimiz kerak. Eng muhim ko'rsatkich - bu orqada qolish. U replikatsiya guruhining boshqa a'zolari bilan sinxronlashtirilmagan fayllarni o'z ichiga oladi. Yordamchi dastur yordamida uning hajmini ko'rishingiz mumkin dfsrdiag, DFSR roli bilan o'rnatilgan. Oddiy replikatsiya holatida kechikish hajmi nolga yaqinlashishi kerak. Shunga ko'ra, orqada qolgan fayllarning ko'pligi replikatsiya bilan bog'liq muammolarni ko'rsatadi.

Endi masalaning amaliy tomoni haqida.

Zabbix Agent orqali orqada qoladigan ish hajmini kuzatish uchun bizga kerak bo'ladi:

  • Chiqishni tahlil qiladigan skript dfsrdiag Zabbix-ga yakuniy zaxira hajmi qiymatlarini taqdim etish,
  • Serverda nechta replikatsiya guruhlari mavjudligini, ular qanday papkalarni ko'paytirishini va ularga qanday boshqa serverlar kiritilganligini aniqlaydigan skript (biz bularning barchasini har bir server uchun Zabbix-ga qo'lda kiritishni xohlamaymiz, to'g'rimi?),
  • Monitoring serveridan keyingi qo'ng'iroq qilish uchun ushbu skriptlarni Zabbix agenti konfiguratsiyasiga UserParameter sifatida qo'shish,
  • Zabbix agent xizmatini orqada qolgan ma'lumotlarni o'qish huquqiga ega foydalanuvchi sifatida ishga tushirish,
  • Zabbix uchun shablon, unda guruhlarni aniqlash, olingan ma'lumotlarni qayta ishlash va ular bo'yicha ogohlantirishlarni berish sozlanadi.

Skript tahlilchisi

Tahlil qiluvchini yozish uchun men Windows Serverning barcha versiyalarida mavjud bo'lgan eng universal til sifatida VBS ni tanladim. Skriptning mantig'i oddiy: u replikatsiya guruhi nomini, replikatsiya qilingan papkani, jo'natuvchi va qabul qiluvchi serverlar nomlarini buyruq qatori orqali oladi. Keyinchalik bu parametrlar o'tkaziladi dfsrdiag, va uning chiqishiga qarab u ishlab chiqaradi:
Fayllar soni - agar zaxira ro'yxatida fayllar mavjudligi haqida xabar olingan bo'lsa,
0 - agar orqada qoldirilgan fayllar yo'qligi to'g'risida xabar olingan bo'lsa ("Boshlash yo'q"),
-1 - xato xabari olingan bo'lsa dfsrdiag so'rovni bajarishda ("[XATO]").

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

Kashfiyot skripti

Zabbix serverda mavjud bo'lgan barcha replikatsiya guruhlarini aniqlashi va so'rov uchun zarur bo'lgan barcha parametrlarni (papka nomi, qo'shni serverlarning nomlari) bilib olish uchun biz, birinchi navbatda, ushbu ma'lumotni olishimiz, ikkinchidan, uni taqdim etishimiz kerak. Zabbix uchun tushunarli formatda. Kashfiyot vositasi tushunadigan format quyidagicha ko'rinadi:

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

...

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

Bizni qiziqtirgan ma'lumotni olishning eng oson yo'li WMI orqali uni DfsrReplicationGroupConfig ning tegishli bo'limlaridan tortib olishdir. Natijada, WMI ga so'rov yaratadigan va guruhlar, ularning papkalari va serverlari ro'yxatini kerakli formatda chiqaradigan skript tug'ildi.

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

Qabul qilaman, skript kodning nafisligi bilan porlamasligi mumkin va undagi ba'zi narsalarni soddalashtirish mumkin, lekin u o'zining asosiy vazifasini bajaradi - Zabbix tomonidan tushunarli formatda replikatsiya guruhlari parametrlari haqida ma'lumot beradi.

Zabbix agenti konfiguratsiyasiga skriptlar qo'shish

Bu erda hamma narsa juda oddiy. Agent konfiguratsiya faylining oxiriga quyidagi qatorlarni qo'shing:

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"

Albatta, biz skriptlar mavjud bo'lgan joylarga yo'llarni moslashtiramiz. Men ularni agent o'rnatilgan papkaga joylashtirdim.

O'zgartirishlar kiritilgandan so'ng, Zabbix agent xizmatini qayta ishga tushiring.

Zabbix Agent xizmati ishlaydigan foydalanuvchini o'zgartirish

orqali ma'lumot olish uchun dfsrdiag, yordamchi dastur replikatsiya guruhi a'zolarini yuborish va qabul qilish uchun ma'muriy huquqlarga ega bo'lgan hisob ostida ishlashi kerak. Tizim hisobi ostida sukut bo'yicha ishlaydigan Zabbix agent xizmati bunday so'rovni bajara olmaydi. Men domenda alohida hisob yaratdim, unga kerakli serverlarda ma'muriy huquqlarni berdim va ushbu serverlarda uning ostida ishlash uchun xizmatni sozladim.

Siz boshqa yo'l bilan borishingiz mumkin: chunki dfsrdiag, aslida, bir xil WMI orqali ishlaydi, keyin siz foydalanishingiz mumkin tavsifi, domen hisobiga ma'muriy huquqlarni bermasdan foydalanish huquqini qanday berish kerak, lekin agar bizda ko'p replikatsiya guruhlari bo'lsa, unda har bir guruhga huquqlarni berish qiyin bo'ladi. Ammo, agar biz domen kontrollerlarida Domen tizimi hajmi replikatsiyasini kuzatmoqchi bo'lsak, bu yagona maqbul variant bo'lishi mumkin, chunki monitoring xizmati hisobiga domen administratori huquqlarini berish yaxshi fikr emas.

Monitoring shabloni

Olingan ma'lumotlarga asoslanib, men quyidagi shablonni yaratdim:

  • Replikatsiya guruhlarini soatiga bir marta avtomatik aniqlashni ishga tushiradi,
  • Har 5 daqiqada bir marta har bir guruh uchun to'lov hajmini tekshiradi,
  • 100 daqiqa davomida har qanday guruh uchun kechikish hajmi 30 dan ortiq bo'lsa, ogohlantirish chiqaradigan triggerni o'z ichiga oladi. Trigger aniqlangan guruhlarga avtomatik ravishda qo'shiladigan prototip sifatida tavsiflanadi,
  • Har bir replikatsiya guruhi uchun kechikish hajmining grafiklarini tuzadi.

Zabbix 2.2 uchun shablonni yuklab olishingiz mumkin shu yerda.

Xulosa

Shablonni Zabbix-ga import qilgandan va kerakli huquqlarga ega hisob qaydnomasini yaratgandan so'ng, biz faqat skriptlarni DFSR uchun kuzatmoqchi bo'lgan fayl serverlariga nusxalashimiz, ulardagi agent konfiguratsiyasiga ikkita qator qo'shishimiz va Zabbix agent xizmatini qayta ishga tushirishimiz kerak. , uni kerakli hisob sifatida ishlatish uchun sozlash. DFSR monitoringi uchun boshqa qo'lda sozlashlar talab qilinmaydi.

Manba: www.habr.com

a Izoh qo'shish