19
paź.
2007
palikowski

Monitorowanie obciążenia (load) serwera linux, raportowanie na mail

h2. 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:

bq. 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

Wpisał gość (niezweryfikowany) 29 May 2008 - 10:15pm.

"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,

Wpisał palikowski 30 May 2008 - 11:51am.

dzięki za zwrócenie uwagi, już poprawiłem w treści artykułu

Witam. Dzięki za art. Mój

Wpisał Piotr (niezweryfikowany) 29 October 2008 - 5:23pm.

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.

Ugh duzo po czasie - ale

Wpisał mastif (niezweryfikowany) 28 July 2009 - 8:00pm.

Ugh duzo po czasie - ale moze sie przyda innym. Proponuje :
1. Wylacznie zbednych usług,
2. Rekompilacja apache + php (dostosowanie do wlasnych potrzeb - ja osobiscie zrezygnowałem z apache na rzecz nginx-a),
3. Optymalizacja zapytań do bazy (u mnie w firmie okazalo sie ze mozna procedury w Sybase-ie zoptymalizowac z !!9 minut!! do okolo 30 sek ;))
4. Keszowac php,
Dla bardziej rozbudowanych serwisów reverse proxy - ja uzywam do tego (40K na dobe) 2x squida oraz nginx-a
dodatkowo mam wydzielony serwer obrazków :)

Znam inny, może lepszy sposób

Wpisał Dav4 (niezweryfikowany) 2 August 2010 - 12:11pm.

Znam inny, może lepszy sposób - Lstat -> http://stary.dug.net.pl/...