Jak PowerShell sprawdzi UpTime serwera?

Jak PowerShell sprawdzi UpTime serwera

Firmy pracujące 24 godziny na dobę, oczekują, że ich systemy są zawsze dostępne, a użytkownicy, niezależnie od lokalizacji posiadają dostęp do danych. W całej tej układance najważniejszym elementem jest serwer. Jego niezawodna i niezakłócona praca jest kluczem do osiągnięcia wymaganej niezawodności. Dlatego zespoły administratorów dwoją się i troją, aby skutecznie monitorować wydajność serwerów. Jedną z istotnych metryk, na które warto zwrócić uwagę jest Uptime. Ale dlaczego to jest aż takie ważne i jak można ją monitorować?

Czym jest Uptime?

Uptime – czas nieprzerwanej pracy komputera, a mówiąc dokładniej czas od ostatniego uruchomienia systemu. Czasami nazywany również czasem dostępności usług, które oferuje dana maszyna. Pojęcie używane głównie w przypadku serwerów pracujących nieprzerwanie (24h/7), dostępnych w sieci lokalnej lub Internecie. Uptime jest często wykorzystywany jako miara stabilności i niezawodności systemu operacyjnego. W tym wypadku czas nieprzerwanej pracy jest traktowany jako ilość czasu, jaki system komputerowy może pracować bez nadzoru i opieki, a mimo to nie dojdzie do awarii czy potrzeby ponownego uruchomienia. Terminem odwrotnym jest downtime, czyli czas, w którym system komputerowy nie pracuje, zwykle w wyniku awarii sprzętowej, lub mimo pracy nie oferuje usług – awaria programowa.

Czy trzeba się tym przejmować?

Czas to pieniądz, zatem patrząc od strony biznesowej, im czas nieprzerwanej pracy serwerów jest dłuższy tym większy jest wskaźnik niezawodności. Im niezawodność większa tym Twoja firma mniej traci na przestojach. A jak wynika z raportu ITIC są to całkiem pokaźne sumy.

In 2021 a price tag of $100,000 (USD) for one hour of downtime for a single server is extremely conservative for all but the smallest micro SMBs with one to 25 employees. It equates to $1,670 per minute/per server. Hourly cost of downtime calculated at $300,000 equals about $5,000 per server/per minute. The cost of a more severe or protracted hourly outage that a business estimated at $1 million (USD) is the equivalent of $16,700 per server/per minute.

Patrząc z kolei od strony administratora im dłuższy czas nieprzerwanej pracy tym serwer staje się potencjalnie bardziej zawodny, chociażby w wyniku braku aktualizacji systemu. Dlatego warto trzymać rękę na pulsie i monitorować ten wskaźnik w poszczególnych serwerach, a także dbać o odpowiednią obsługę i konserwację maszyn.

Jak to sprawdzić?

Chociaż dostępnych jest cała masa rozwiązań do monitorowania i raportowania wszystkich możliwych wskaźników serwera to warto wiedzieć jak to zrobić samemu. Z pomocą przychodzi oczywiście konsola PowerShell, a skoro jest PowerShell to musi być kilka wariantów. Poniżej 5 najpopularniejszych metod.

1. Get-Uptime

Jeżeli jesteś szczęśliwym posiadaczem PowerShell Core to w zasadzie wystarczy jeden cmdlet – Get-UpTime. Polecenie wprowadzone zostało w wersji 6.0 i wyświetla czas od ostatniego uruchomienia systemu. Dodając parametr – Since, będziesz w stanie określić dokładny czas uruchomienia systemu.

Get-UpTime

2. Get-ComputerInfo

Nie martw się jeżeli nie posiadasz PowerShell Core. W Twoim przypadku możesz skorzystać z cmdletu Get-ComputerInfo, który dołączył w wersji 5.1 i zwraca całą masę różnych informacji o komputerze. Wliczając w to min. dane o systemie operacyjnym czy sprzęcie. Całość prezentuje się następująco:

Get-ComputerInfo - Uptime

3. Zapytanie Common Information Model (CIM)

CIM to to standard opisujący strukturę i zachowanie zarządzanych zasobów, takich jak pamięć masowa, sieć lub komponenty oprogramowania. W zapytaniu wykorzystam klasę o nazwie Win32_OperatingSystem. Sama klasa posiada wiele właściwości, jednak w tym wypadku interesuje nas tylko LastBootUpTime. Wartość tej właściwości informuje, kiedy nastąpiło ostatnie uruchomienie komputera. Aby całość miała ręce i nogi warto dołożyć aktualną datę i odjąć datę uruchomienia:

Get-CimInstance Uptime

4. Dziennik zdarzeń

Ciekawym rozwiązaniem jest wykorzystanie dziennika zdarzeń systemu Windows. W PowerShellu dostęp do niego uzyskasz za pomocą cmdletu Get-EventLog lub Get-WinEvent. Oba polecenia zbierają informacje z dzienników zdarzeń i plików dziennika śledzenia zdarzeń znajdujących się na komputerach lokalnych i zdalnych. Oczywiście nie musisz przeglądać całego dziennika, wystarczy, że ograniczysz się do konkretnych zdarzeń. Przykładowo zdarzenie o numerze identyfikacyjnym 6005 generowane jest przy starcie usługi dziennika zdarzeń. Korzystając z tego faktu wystarczy odszukać wpis, który posiada wartość 6005 dla odpowiedniej właściwości. Następnie odfiltrować jedynie ostatni i wyświetlić czas wygenerowania. Aby wyświetlony został Uptime, uzyskany czas należy odjąć od aktualnej daty.

Poniżej przykład z zastosowaniem Get-EventLog:

Get-EventLog

Bardzo podobnie prezentuje się wykorzystanie cmdletu Get-WinEvent:

Get-WinEvent

5. Gotowe skrypty

Ostatnim rozwiązaniem jest skorzystanie z gotowego rozwiązania. Mam tutaj na myśli istniejącą funkcję, skrypt lub moduł. Aby znaleźć możesz skorzystać ze strony PowerShell Gallery albo cmdletów Find-Command Find-Module. Przykładowo instaluję moduł GetUptime, a następnie wykorzystuję jedną z funkcji Get-UpTime, dzięki które otrzymuję czas nieprzerwanej pracy dla lokalnej maszyny. Z pomocą parametru -ComputerName możesz uzyskać dostęp do zdalnego komputera. Natomiast funkcja Get-LastStartTime wskazuje datę ostatniego uruchomienia.

Get-Uptime module

Podsumowanie

W świecie gdzie wszystko i wszyscy są online, czas nieprzerwanej pracy komputera jest jednym z kluczowych parametrów wartych monitorowania. Dzięki konsoli PowerShell jesteś w stanie szybko sprawdzić i porównać jak UpTime wygląda w twoim środowisku.

Źródła:

https://pl.wikipedia.org/wiki/Uptime

https://www.ibm.com/downloads/cas/DV0XZV6R

https://www.kaseya.com/blog/2020/10/08/server-uptime-monitoring/

https://www.powershellgallery.com/packages/GetUptime/1.7

Podziel się

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *