Po dzisiejszej wichurze, która spowodowała wyłączenie prądu w nocy, chciałem się dowiedzieć jak długo go nie było. Nie jest to takie trudne jeżeli w domu ma się serwer chodzący 24h na dobę i oprócz mierzenia uptime’u monitorujemy także downtime. O paczce downtime przy okazji dodania jej do pkgsr-wip pisałem jakiś czas temu.
Pierwsze co nam będzie potrzebne to zainstalowanie paczki downtimed – http://dist.epipe.com/downtimed/. Używając pkgsrc paczka jest w wip/downtimed.
Po wydaniu polecenia downtimes
dostajemy listę przerw w działaniu serwera:
crash 2015-04-01 00:48:28 -> up 2015-04-01 02:22:27 = 01:33:59 (5639 s)
Do tego czasu w moim przypadku należy dodać 27 minut ponieważ tyle mi UPS podtrzymuje całą szafkę teletechniczną ze switchem serwerem i innymi urządzeniami.
A teraz pobawmy się bardziej danymi z downtimed. Za pomocą jednego zgrabnego „one-line’ra” możemy przeliczyć jak długo nasz serwer „leżał”.
downtimes | awk {'print $10'} | sed 's/^.//' | paste -sd+ - | bc | awk '{print $1/60}' | awk '{print $1/60}' | awk '{print $1/24}'
Robimy co następuje powyższym poleceniem:
- Wywołujemy downtimes produkując kolumnę z odnotowanymi przerwami
- Wynik przekazujemy do awk, które pokazuje nam tylko 10 pole (pola liczymy co spację) – czyli liczbę sekund ile trwało wyłącznie serwera
- Kolumnę z sekundami (i początkowym nawiasem) przekazujemy do sed’a przy pomocy, którego kasujemy nawiaz z pierwszego znaku. Ściślej rzecz ujmują zamieniamy pierwszy znak w każdej linijce na nic, ostatecznie dostajemy kolumnę sekund
- Kolumnę z sekundami przekazujemy do polecenia paste z parametrem -sd+ co powoduje sklejenie kolumny w jeden string oddzielony znakami + (znak „-” za -sd+ jest wymagany przy używaniu BSD paste, przy GNU paste można bez -)
- Gotowy string który ma postać ciągu sekund oddzielonego plusami przekazujemy do kalkulatora bc, który wykona dodawani.
- Otrzymaną sumę liczby sekund dzielimy przy pomocy awk przez 60 otrzymując minuty
- Otrzymane minuty ponownie dzielimy przez 60 otrzymując godziny.
- Na koniec wynik w minutach dzielimy przez 24 otrzymując ilość dni , kiedy serwer był niedostępny.
Powyższe polecenie na moim domowym serwerze daje wynik 7.74633 dnia, czyli ponad 7,5 dnia.
Włóżmy ten wynik w jakiś kontekst, aby się przekonać czy to dobry wynik czy nie. Akurat przeciwieństwem downtimed jest uptimed (surprise, surpise!) , który mierzy czas działania serwera i kilka innych ciekawych rzeczy jak rekordowe uptime’y oraz jaki był w tym momencie zainstalowany system, a także sumaryczną ilość dni ile działał serwer. Przy okazji możemy sprawdzić czy nasze obliczenia przy pomocy downtimed sprawdzą się.
Na dzień dzisiejszy uprecords (komenda do wywołania statystyk) u mnie wygląda tak:
dom# uprecords
# Uptime | System Boot up
----------------------------+---------------------------------------------------
1 102 days, 14:03:21 | NetBSD 6.1.4_PATCH Tue Jul 8 16:37:50 2014
2 81 days, 05:59:55 | NetBSD 6.1.4_PATCH Fri Apr 18 10:33:21 2014
3 80 days, 01:40:20 | NetBSD 6.1.5_PATCH Sat Jan 10 22:07:27 2015
4 68 days, 12:05:30 | NetBSD 6.1.0_PATCH Mon Sep 9 21:51:38 2013
5 44 days, 23:30:13 | NetBSD 6.1.5_PATCH Wed Nov 26 19:51:24 2014
6 44 days, 07:09:29 | NetBSD 6.1.0_PATCH Sat Dec 7 11:02:04 2013
7 41 days, 14:10:24 | NetBSD 6.1.0_PATCH Fri Jan 31 22:46:29 2014
8 38 days, 16:54:02 | NetBSD 6.0.0_PATCH Sun Nov 25 23:59:36 2012
9 37 days, 20:55:24 | NetBSD 6.0.0_PATCH Sat Jan 12 12:13:53 2013
10 37 days, 14:33:08 | NetBSD 6.1.0_PATCH Fri Jun 21 23:19:00 2013
----------------------------+---------------------------------------------------
-> 23 6 days, 11:12:42 | NetBSD 6.1.5_PATCH Wed Apr 1 02:27:59 2015
----------------------------+---------------------------------------------------
1up in 2 days, 21:08:28 | at Fri Apr 10 10:49:08 2015
t10 in 31 days, 03:20:27 | at Fri May 8 17:01:07 2015
no1 in 96 days, 02:50:40 | at Sun Jul 12 16:31:20 2015
up 876 days, 17:53:56 | since Sun Nov 4 00:02:44 2012
down 7 days, 18:44:01 | since Sun Nov 4 00:02:44 2012
%up 99.120 | since Sun Nov 4 00:02:44 2012
Wg uptimed serwer na ponad 876 dni był nieosiągalny przez 7 dni i prawie 19 godzin, co stanowi SLA na poziomie 99.12% :) Całkiem nieźle jak na domowy serwer!
Sprawdźmy jeszcze czy wyniki downtimed i uptimed nie róźnią się zbytnio, czyli czy 7 dni 18 godzin i 44 minuty to mniej więcej 7.74633. Ponownie przy pomocy bc konwertujemy tym razem godziny do systemu dzisiętnego.
dom# echo "scale=5; 44/60" | bc
.73333
dom# echo .73333+7 | bc
7.73333
Całkiem blisko, ale jak blisko? :) Poraz trzeci użyjmy bc aby policzyć procentową różnicę między tymi wartościami:
dom# bc
scale=5
7.74633-7.73333
.01300
7.74633+7.73333/2
11.61299
.01300/11.61299*100
.11100
Różnica 0.11% czyli w zasadzie pomijalna. Za to zabawa w konsoli przednia :)
© odwiedź stronę http://maciejewski.org po więcej fajnych postów!