Disk alert
Często podczas pracy z wieloma serwerami spotykamy się z problemem przepełnienia dysku. Jeden serwer jesteśmy w stanie monitorować ale co jeżeli mamy kilkadziesiąt serwerów.
Monitorowanie wolnego miejsca na dysku można wykonać na kilka sposobów możemy zrobić to przez zbieranie danych do logu i robienie wykresu dzięki SNMP. Jednak na wykresy też trzeba patrzeć i je analizować przeglądanie kilkadziesięciu wykresów i analizowanie ich to nie jest dobre rozwiązanie.
Najlepszym rozwiązaniem jest ustawienie progu po którym system wysyła maila na wskazany adres mailowy. Komunikat na skrzynkę pocztową informuje nas o wyczerpaniu się miejsca na dysku serwera a tym samym daje czas na podjęcie działania.
Oto przykład jak skonfigurować powiadamiaczkę o wyczerpywaniu się miejsca na dysku twardym.
Zalecany poziom wolnego miejsca na dysku twardym to 15% ale poziom ten można ustawić dowolnie.
Otwieramy Monitor wydajności znajdujący się w Narzędziach administracyjnych i tworzymy powiadomienie, Wchodzimy w zestaw modułów zbierających dane -> Zdefiniowane przez użytkownika -> Klik prawym klawiszem myszki wybieramy Nowy -> Zestaw modułów zbierających dane
Wchodzimy do okna utwórz nowy zestaw modułów zbierających dane i wybieramy typ danych w tym przypadku Alert licznika wydajności.
Wpisujemy nazwę pod którą będzie widniał moduł w naszym przypadku DiskAlert i wybieramy opcję Utwórz ręcznie (zaawansowane)
Klikamy Dalej i dostajemy się do okna tworzenia nowego zestawu modułów zbierających dane.
Klikamy Dodaj i otwiera się nam nowe okno wybieramy Alert licznik wydajności
Wybieramy licznik który nas interesuje w tym przypadku Dysk logiczny
Wyszukujemy interesujący nas parametr czyli Wolne megabajty lub Wolne miejsce (%). Wybieramy dysk C; ponieważ jego zasoby będą monitorowane
Utworzony przez nas moduł zbierający dane ma następującą postać
\Dysk logiczny(c:)\Wolne miejsce (%)
Ustawiamy próg ostrzegawczy limit 5% zalecany próg ostrzegawczy to 15%
Zapisujemy moduł i zamykamy
Pojawia się nam teraz nowy moduł pod nazwą DiskAlert - ustawiamy teraz właściwości alertu prawym klikiem na DiskAlert uruchamiamy Właściwości sprawdzamy poprawność ustawień
Wykonujemy ponownie prawy klik na DiskAlert i włączamy uruchom - moduł został włączony.
Konfigurujemy teraz DataCollector01 - prawym klawiszem myszki wybieramy właściwości
Sprawdzamy poprawność wpisów a zakładce alerty - limit alertów oraz interwał próbkowania czyli czas po jakim zostanie wykonane ponowne sprawdzenie zadanego parametru
W zakładce Akcja alertu odznaczamy Rejestruj wpis w dzienniku zdarzeń aplikacji oraz wybieramy Disk Alert jako Uruchomiony zestaw modułów zbierających dane
Wchodzimy teraz ponownie do Narzedzi Administracyjnych i wybieramy Harmonogramu zadań.
Wchodzimy do folderu Biblioteka Harmonogramu zadań -> Microsoft -> Windows -> PLA
Ustawiamy się na DiskAlert i włączamy właściwości
W zakładce ogólne odznaczamy Ukryte
W zakładce Wyzwalacz konfigurujemy opcję wyzwalacza czyli programu wsadowego. Wybieramy nowy element
I tworzymy nowy wyzwalacz
Ustawiamy harmonogram działania - wybieramy by zadanie rozpoczynało się każdego dnia o zadanej godzinie i było powtarzane co 1 dzień.
Odznaczamy box włączono
Konfigurujemy akcje która będzie reagowała na zdarzenie wybieramy Nowa...
I konfigurujemy akcję.
Akcja uruchom program.
Program skrypt C:\Windows\system32\rundll32.exe
Dodajemy argument C:\Windows\system32\pla.dll,PlaHost "DiskAlert" "$(Arg0)"
Wchodzimy teraz w menadżer serwera zakładka Diagnostyka Podgląd Zdarzeń -> Dziennik aplikacji i Usług ->Microsoft ->Windows -> Diagnosis -PLA -> Działa
Podglądamy sobie generowany log.
Log znajduje się właśnie w Diagnosis-PLA i wygląda następująco
Wygenerowało się nam zdarzenie o numerze identyfikacyjnym 2031 teraz możemy już przystąpić do konfigurowania powiadomienia wysyłanego pocztą e-mail
Dołącz zadanie do tego zdarzenia ... :
Klikamy prawym klawiszem myszki na Informację o numerze ID 2031
i wybieramy opcje dołącz zadanie do tego zdarzenia
Opisujemy nasze zadanie jako powiadomienie e-mail
Wpisujemy w Opisie: Powiadomienie e-mail gdy miejsce na dysku spadnie poniżej zadanej wartości.
Dostajemy informacje rejestracyjne
Wybieramy uruchomienie programu którym będzie nasz skrypt
Wskazujemy ścieżkę do skryptu który będzie informował o spadku miejsca na dysku C:
Kończymy proces
Oczywiście potrzebujemy jeszcze skrypt który wyśle za nas maila możemy również użyć opcji wbudowanej w windowsa ale tego nie testowałem.
Podsumowanie - w skrócie.
Pierwsze wchodzimy w monitor wydajności tworzymy nowy moduł zbierający dane. Bardzo ważne należy pamiętać by dodać wpis w dzienniku zdarzeń inaczej dane nie będą wysyłane do loga a tym samym nie będzie podstawy do uruchomienia alarmu.
Drugie wchodzimy w Harmonogram Zadań i ustawiamy tu wyzwalacz - jest to ważne ze względu na to że nawet jeżeli proces się zawiesi lub coś go wyłączy o wskazanej porze zostanie on ponownie włączony ja ustawiłem ten parametr by włączał się każdego dnia o godzinie 6.00 czyli przed rozpoczęciem pracy.
Trzeci krok wchodzimy w logi i przypisujemy do logu z alarmem działanie - w naszym przypadku uruchomienie zewnętrznej aplikacji z napisanym skryptem w VB.
Teraz restartujemy usługę i powiadamiacz dyskowy zaczyna działać. Jeszcze drobne dopasowanie preferencji czyli ustawienie czasu próbkowania oraz poziomu alarmu. Poziom ten ustawiamy w % lub w bajtach.
To jest użyty w tym przypadku skrypt
Set objMail = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
Set objFlds = objConf.Fields
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'port do wysylania
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.b1s.eu" 'SMTP
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587 'e-mail port
'Odkomentowac dla SMTP
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "awaria"
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxx"
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic
objFlds.Update
objMail.Configuration = objConf
'objMail.FromName = "ja"
objMail.From = "This email address is being protected from spambots. You need JavaScript enabled to view it."
objMail.To = This email address is being protected from spambots. You need JavaScript enabled to view it.
objMail.Subject = "Dysk przepelniony na serwerze pocztowym!!!"
objMail.TextBody = "Dysk przepelniony zasoby dysku się wyczerpuja. Ilosc wolnego miejsca na dysku spadla ponizej 15%"
objMail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objMail = Nothing
Dodatkowe uwagi na potrzeby powiadamiania skonfigurowałem serwer pocztowy który wysyła wiadomości.
Testy - jak sprawdzić poprawność działania skryptu i konfiguracji.
Najprościej to przepełnić dysk można zrobić to w prosty sposób generując plik o zadanym rozmiarze.
Przykład polecenia -
fsutil file createnew test.txt 524288000
Po uruchomieniu tego polecenia dostaniemy plik o rozmiarze 500 MB
W harmonogramie zadań zobaczymy utworzona zadanie Powiadomienie e-mail