Početna » kako da » Dijagnosticiranje Linux poslužitelja Učitavanje problema s jednostavnim skriptom

    Dijagnosticiranje Linux poslužitelja Učitavanje problema s jednostavnim skriptom

    Ako ste bili admin u bilo kojem vremenskom razdoblju, sigurno ste otkrili situacije u kojima poslužitelj naglo povećava korištenje CPU-a ili iskorištenje memorije i / ili razine učitavanja. Trčanje 'top' ne daje vam uvijek odgovor. Pa kako ćete pronaći one tajne procese koji žvaču vaše sistemske resurse da bi ih mogli ubiti?

    Sljedeća skripta može vam pomoći. Napisano je za web poslužitelj, tako da ima i neke dijelove koji su posebno u potrazi za httpd procesima i nekim dijelovima koji se bave MySQL-om. Ovisno o implementaciji poslužitelja, jednostavno komentirajte / izbrišite te odjeljke i dodajte druge. Trebao bi se koristiti za početnu točku.

    Preduvjeti za ovu verziju skripte su neki besplatni programi objavljeni pod GNU Općom javnom licencom pod nazivom mytop (dostupno na http://jeremy.zawodny.com/mysql/mytop/), što je fantastičan alat za provjeru kako MySQL izvodi. Postaje stara, ali još uvijek dobro radi za naše potrebe.
    Osim toga, ja koristiti mutt kao mailer - vi svibanj želite promijeniti skriptu jednostavno koristiti linux izgrađen u 'mail' korisnost. Pokrećem ga preko crona svaki sat; prilagodite kako vam odgovara. Oh - i ova skripta se mora pokrenuti kao root jer čita iz nekih zaštićenih područja poslužitelja.

    Počnimo, hoćemo li?

    Prvo postavite varijable skripte:

    #! / Bin / bash
    #
    # Skripta za provjeru prosječnih razina opterećenja sustava kako bi se pokušalo odrediti
    # koji su procesi pretjerano visoki ...
    #
    # 07Jul2010 tjones
    #
    # postavi okruženje
    dt = "datum +% d% b% Y-% X"
    # Očigledno, promijenite sljedeće direktorije na mjesta na kojima se zapravo nalaze log datoteke
    tmpfile = "/ TMP / checkSystemLoad.tmp"
    logfile = "/ TMP / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # prvi mailstop je standardna e-pošta za izvješća. Drugi je za mobitel (s smanjenim izvješćem)
    poštanskog pretinca = "[email protected]"
    mailstop1 = "[email protected]"
    Stroj = „ime računala”
    # Sljedeća tri su za mytop uporabu - koristite db korisnika koji ima pristojna prava
    dbusr = "ime"
    dbpw = "lozinka"
    db = "yourdatabasename"
    # Slijedeća je razina učitavanja za provjeru - 10 je stvarno visoka, tako da je možete smanjiti.
    levelToCheck = 10

    Zatim provjerite razinu opterećenja da biste vidjeli nastavlja li se skripta:

    # Postavi varijable iz sustava:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # ako je razina učitavanja veća nego što želite, pokrenite proces skripte. Inače, izađite iz 0

    if [$ loadLevel -gt $ levelToCheck]; zatim
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Datum: $ dt" >> $ tmpfile
    echo "Provjerite učitavanje i procesiranje sustava" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    I nastavite provjere, zapisujući rezultate u privremenu datoteku. Dodajte ili izbrišite stavke odavde gdje je primjenjivo za vašu situaciju:

    # Dobijte više varijabli iz sustava:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Prikaži trenutnu razinu opterećenja:
    echo "Nivo opterećenja je: $ loadLevel" >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile

    # Prikaži broj HTTPd procesa koji se trenutno izvode (ne uključujući djecu):
    echo "Broj httpd procesa sada: $ httpdProcesses" >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Prikaži popis postupaka:
    echo "Procesi su sada pokrenuti:" >> $ tmpfile
    ps f-ff >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Prikaži trenutne MySQL informacije:
    echo "Rezultati s mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    Primijetite s naredbom vrh, pišemo na dvije privremene datoteke. Jedan je za mnogo manju poruku na mobitel. Ako ne želite hitnost upozorenja na mobilni telefon u tri ujutro, možete to izvesti (i izuzeti drugu poštansku rutinu kasnije u skripti).


    # Prikaži trenutni vrh:
    echo "top now prikazuje:" >> $ tmpfile
    echo "top now prikazuje:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    Više provjera:


    # Prikaži trenutne veze:
    echo "netstat sada pokazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Provjerite prostor na disku
    echo "prostor na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    Zatim zapišite privremeni sadržaj datoteke u trajniju datoteku dnevnika i pošaljite rezultate odgovarajućim stranama. Drugi mailing je smanjen rezultat koji se sastoji samo od standarda iz 'top':

    # Pošalji rezultate u datoteku zapisnika:
    / bin / cat $ tmpfile >> $ logfile

    # I pošaljite rezultate na sysadmin:
    / usr / bin / mutt -s "$ machine ima visoku razinu opterećenja! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    A onda neka kućna služba i izlaz:

    # I zatim uklonite privremenu datoteku:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    izlaz 0

    Nadam se da ovo pomaže nekome vani. Potpuno sklopljena skripta je:

    #! / Bin / bash
    #
    # Skripta za provjeru prosječnih razina opterećenja sustava kako bi se utvrdilo koji su procesi
    # to je pretjerano visoko
    #
    # postavi okruženje
    dt = "datum +% d% b% Y-% X"
    # Očigledno, promijenite sljedeće direktorije na mjesta na kojima se zapravo nalaze log datoteke
    tmpfile = "/ TMP / checkSystemLoad.tmp"
    logfile = "/ TMP / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # prvi mailstop je standardna e-pošta za izvješća. Drugi je za mobitel (s smanjenim izvješćem)
    poštanskog pretinca = "[email protected]"
    mailstop1 = "[email protected]"
    Stroj = „ime računala”
    # Sljedeća tri su za mytop uporabu - koristite db korisnika koji ima pristojna prava
    dbusr = "ime"
    dbpw = "lozinka"
    db = "yourdatabasename"
    # Slijedeća je razina učitavanja za provjeru - 10 je stvarno visoka, tako da je možete smanjiti.
    levelToCheck = 10
    # Postavi varijable iz sustava:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # ako je razina učitavanja veća nego što želite, pokrenite proces skripte. Inače, izađite iz 0

    if [$ loadLevel -gt $ levelToCheck]; zatim
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Datum: $ dt" >> $ tmpfile
    echo "Provjerite učitavanje i procesiranje sustava" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    # Dobijte više varijabli iz sustava:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Prikaži trenutnu razinu opterećenja:
    echo "Nivo opterećenja je: $ loadLevel" >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile

    # Prikaži broj HTTPd procesa koji se trenutno izvode (ne uključujući djecu):
    echo "Broj httpd procesa sada: $ httpdProcesses" >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Prikaži popis postupaka:
    echo "Procesi su sada pokrenuti:" >> $ tmpfile
    ps f-ff >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Prikaži trenutne MySQL informacije:
    echo "Rezultati s mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Prikaži trenutni vrh:
    echo "top now prikazuje:" >> $ tmpfile
    echo "top now prikazuje:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Prikaži trenutne veze:
    echo "netstat sada pokazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Provjerite prostor na disku
    echo "prostor na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    jeka "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Pošalji rezultate u datoteku zapisnika:
    / bin / cat $ tmpfile >> $ logfile

    # I pošaljite rezultate na sysadmin:
    / usr / bin / mutt -s "$ machine ima visoku razinu opterećenja! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # I zatim uklonite privremenu datoteku:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    izlaz 0