NetBSD

    Jak długo serwer był niedostępny?

    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:

    1. Wywołujemy downtimes produkując kolumnę z odnotowanymi przerwami
    2. Wynik przekazujemy do awk, które pokazuje nam tylko 10 pole (pola liczymy co spację) – czyli liczbę sekund ile trwało wyłącznie serwera
    3. 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
    4. 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 -)
    5. Gotowy string który ma postać ciągu sekund oddzielonego plusami przekazujemy do kalkulatora bc, który wykona dodawani.
    6. Otrzymaną sumę liczby sekund dzielimy przy pomocy awk przez 60 otrzymując minuty
    7. Otrzymane minuty ponownie dzielimy przez 60 otrzymując godziny.
    8. 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!

    Family / Rodzina

    9 miesięcy debugowania !

    W 2007 roku zacząłem pisać pewien skrypt:

    #!/bin/sh
    kid1=Antonina
    echo Moje dziecie to $kid1

    Już wlistopadzie działał całkiem nieźle :)

    # sh kid0.sh
    Moje dziecie to Antonina

    W 2010 jednak czegoś zaczęło mi w nim brakować i postanowiłem coś do niego dodać, żeby był bardziej rozbudowany.

    Zacząłem od prostej zmiany nie wiedząc jeszcze co mi z tego wyjdzie:

    #!/bin/sh
    kid1=Antonina
    kid2=""
    echo Pierwsze dziecie to $kid1
    echo Drugie dziecie to $kid2

    Jak łatwo było przewidzieć wynik nie był zadowalający:

    # sh kid.sh
    Pierwsze dziecie to Antonina
    Drugie dziecie to

    ale obrany kierunek mi się spodobał więc brnąłem dalej. Kolejna wersja też nie była zachęcająca, wręcz bezsensu:

    #!/bin/sh
    kid1=Antonina
    kid2=$kid1
    echo Pierwsze dziecie to $kid1
    echo Drugie dziecie to $kid2

    co dawało nic nie wnoszące:

    # sh kid2.sh
    Pierwsze dziecie to Antonina
    Drugie dziecie to Antonina

    Aż w końcu po 9 miesiącach debugowania co jest nie tak

    #!/bin/sh
    kid1=Antonina
    kid2=$kid1
    echo $kid1 > /tmp/tmp1
    cat /tmp/tmp1 | sed "s/Anton/Michal/g" > /tmp/tmp2
    kid2=`cat /tmp/tmp2`
    echo Pierwsze dziecie to $kid1
    echo Drugie dziecie to $kid2

    dokładnie 2 kwietnia o 13:49 – skrypt zadziałał z prędkością 3800g, zajmował też przyzwoicie bo 58 cm, ale najważniejsze, że był w 100% sprawny :)

    # sh kid3.sh
    Pierwsze dziecie to Antonina
    Drugie dziecie to Michalina

    (Tak, wiem, że jest tam brzydki hack z sedem i przekierowaniem wyników do pliku, ale coś nie chciał mi sed na zmiennych działać a pomysł na posta szybko chciałem wcielić w słowo pisane :)

    A dla wszystkich, którzy nie lubią lub nie rozumieją konsolowych krzaczków – GUI w HD !

    To jest właśnie $kid2 czyli Michalina po 9 miesiącach debugowania :)

    To jest właśnie $kid2 czyli Michalina po 9 miesiącach debugowania :)

    Troskliwy $kid1 opiekuje się $kid2

    Troskliwy $kid1 opiekuje się $kid2

    Siostry $kid[1-2] w komplecie ! :)

    A teraz już trochę poważniej, jeśli ktoś nadal myśli co autor palił ;) Dnia 2.4.2011 na świat przyszła nasza druga córka, której nadaliśmy imię Michalina (ładnie koresponduje z Antonina :). Poród odbył się w tym samym lecz wyremontowanym szpitalu św. Rodziny przy ul. Jarochowskiego w Poznaniu i o dziwno trwał około 15 minut (w przeciwieństwie do Tosi, która rodziła się 10 godzin). Tata oczywiście był obecny przy porodzie, mama zresztą też ;) Wszystko odbyło się tak błyskawicznie, że położna ledwo zdążyła z zestawem do rodzenia. Zarówno mama jak i dziecko spisały się wyśmienicie, co potwierdza dziesiątka Apgara dla małej i szybki powrót obojga do domu :) Tosia z kolei pomijając dzień odbioru ze szpitala, w której była bardzo niepewna co się właściwie dzieje, od razu polubiła swoją siostrę (nie mówi o niej inaczej jak Michalinka :) i aktywnie uczestniczy w jej życiu pomagając przy pielęgnacji oraz śpiewając jej piosenki i kołysanki :)

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    In English

    Tips & Tricks

    Note to myself.
    I found that my /var/amavis/tmp has thousends of files.

    du -sg tmp/
    26 tmp/

    Actually 26Gb of crap. Now, how to delete all files excluding these with current date and one day before?

    Here is one line magic spell:

    find /var/amavis/tmp -type f -mtime +1 -exec rm -f {} \;

    Results?

    du -sm tmp/
    9 tmp/

    Bingo! ;)
    Thx to aniou #netbsd.pl



    Related Posts with Thumbnails
    Add your widget here