Monitorowanie obciążenia (load) serwera linux, raportowanie na mail
Pamiętnik znaleziony w Logu – część 1
W tym odcinku poznamy sposób aby dostawać na swój mail codzienny raport z uptime i wartościa load serwera z poprzedniego dnia.
Czym jest load? To uśredniona ilość korzystających z lub oczekujących na zasoby procesów z ostatnich 1, 5 i 15 minut. Wartość ta w idealnym świecie nie powinna przekraczać 1 (jak podaje życzliwy komentator dopuszcza się load 2 per rdzeń procesora), co oczywiście jest trudne przy dużych stronach i słabszych serwerach. Z moich obserwacji wynika, że jeśli nasz serwer w momencie szczytowego obciążenia będzie mieścił się w wartości 3 per rdzeń to raczej nie ma co panikować, choć przy takim load nasi użytkownicy prawdopodobnie odczują jakiś dyskomfort podczas korzystania z serwisu.
WARUNKI
- Debian etch,
- lighttpd,
- mysql,
- postfix,
- php5 po fastCGI.
WSTĘP
Przyznam, że kupując dedykowany serwer pod stronę, zagrałem bardzo ryzykownie. Z linuxem miałem dotąd wspólnego tyle, że dwa razy zainstalowałem sobie Ubuntu jako desktop. Nie znałem więcej niż 3 polecenia konsoli – ls, cd i exit.
No ale serwer kupiony, na admina mnie i basoofkę nie stać, co poradzić, trzeba się tego Debiana nauczyć bo kasa leci a amerykanie się zbroją!
Najpierw postanowiłem dowiedzieć się czy serwer jaki kupiłem jest wystarczający do obsłużenia mojej strony.
PO CO NAM TO?
Musimy jakoś mierzyć, czy zakupiona maszyna radzi sobie z ruchem na stronie. Jeśli zrobimy to szybko, być może unikniemy kosztów opłacania zbyt słabego serwera i zamówimy mocniejszy. Poza tym codzienne sprawdzenie tej wartości pozwoli nam w przyszłości odkryć czy nasza strona nie zaczyna zbliżać sie do jakiejś wartości krytycznej i z wyprzedzeniem zabezpieczyć środki i czas na odpowiednie kroki – czy to wymianę sprzętu czy optymalizację strony.
Ja postanowiłem zrobić to na początku za pomocą dostępnych w każdym Debianie, bardzo prymitywnych metod. Jest to sposób nie wymagający zewnętrznych narzędzi, ale też mało wyrafinowany. Pamiętajmy jednak, że wymyśliłem go po kilku dniach zabawy z linuxem, a mam naleciałości windowsowe, gdzie wyrafinowanie jest rzadziej spotykane. Dlatego proszę wszystkich linuksowych mastahów o komentarze krytyczne a nie prześmiewcze.
DO ROBOTY
Po pierwsze musimy przekierować pocztę przychodzącą na konto root tak, aby trafiała do naszej skrzynki zewnętrznej. W moim wypadku wyedytowałem plik aliases:
- nano /etc/aliases
i wpisałem tam linijkę
root:mojadres@mail.com
a wszystkie inne usługi przekierowałem na root’a, a więc
admin:root
www-data:root
ftp:root
i tak dalej…
Następnie na moim koncie mailowym stworzyłem filtr kierujący pocztę z serwera do osobnego folderu, gdzie zaglądam co rano i sprawdzam pocztę.
Ale aby coś tam trafiło należy na serwerze to skonfigurować. Ja użyłem crontab’a aby raportował mi obciążenie serwera do pliku a raz na dobę wysłał mi ostatnie kilkadziesiąt linijek.
Najpierw stwórzmy plik uptime komendą:
- touch /var/log/uptime
Następnie wejdźmy w w edycję crontab’a
- crontab -e
Teraz dopiszmy dwie linijki odpowiadającą za dopisanie do pliku informacji o obecnym obciążeniu serwera
50 * * * * uptime >> /var/log/uptime
1,10,20,30,40 16-23 * * * uptime >> /var/log/uptime
co oznaczają linie? Pierwsza wywołuje polecenie uptime co godzinę, w 50-tej minucie. Dane wyjściowe są dopisywane (znak >> oznacza dopisanie a > nadpisanie) na końcu pliku /var/log/uptime. Druga linia robi to samo, ale co 10 minut między godzina 16 a 23. W tym czasie jest największy ruch, stąd chcemy mieć bardziej szczegółową informację.
Ostatni krok to dodanie linijki wywołującej polecenie tail:
55 5 * * * tail -n 64 /var/log/uptime
Spowoduje ona wysłanie o godzinie 5:55 rano ostatnich 64 linijek z pliku /var/log/uptime na skrzynkę root, a co za tym idzie na moją prywatną skrzynke pocztową.
Co za informację dostajemy? Bardzo podstawową, składającą się z uptime serwera, ilości zalogowanych użytkowników i wartości load serwera.
Przykładowy wycinek z codziennego maila:
14:50:01 up 14 days, 2:00, 0 users, load average: 2.44, 1.25, 0.86 15:50:01 up 14 days, 3:00, 0 users, load average: 0.36, 0.35, 0.40 16:01:01 up 14 days, 3:11, 0 users, load average: 0.74, 0.54, 0.47 16:10:01 up 14 days, 3:20, 0 users, load average: 0.74, 0.67, 0.55 16:20:01 up 14 days, 3:30, 0 users, load average: 0.69, 1.06, 0.81 16:30:01 up 14 days, 3:40, 0 users, load average: 0.94, 0.92, 0.81
Oczywiście przedstawiona metoda jest bardzo prostacka, ale na razie działa. Jeśli znacie dobry i lekki system monitorujący, to polećcie.
Wkrótce kolejny wpis do dzienniczka, tym razem o kopiach zapasowych.

"Wartość ta w idealnym
"Wartość ta w idealnym świecie nie powinna przekraczać 1" na kazdy rdzen w serwerze.
Jezeli serwer ma dwa rdzenie to load ponizej 2 jest ok, powyzej znaczy, ze procesy stoja w kolejce (ale to nadal nic zlego - generalnie load ponizej 2 * ilosc rdzeni jest ok i nie ma sie niczym przejmowac).
dzięki za zwrócenie uwagi,
dzięki za zwrócenie uwagi, już poprawiłem w treści artykułu
Witam. Dzięki za art. Mój
Witam.
Dzięki za art. Mój serwis posiada w godz. szczytowych ponad 20 load i strasznie się wolno ląduje... Nie wiem dokładnie od czego to zależy, mam zainst. OpenSuse, statystyki to 7 tys. uq dziennie przy serwerze Celeron D/215/220 1.20+ GHz 1 GB RAM. Czy to jest za słaby serwer na taki serwis? Czy może tak wysoki load jest wynikiem działania niepotrzebnego programu?
Pozdrawiam i z góry thx za odp.