Linux järjestelmän tilan seuraaminen ja kuormitus

Haaga-Helia Linux palvelimena kurssin toteutus 17, ict4tn003-17, kotitehtävä 2

Tehtävänanto:

– Kerää kuormitustietoja munin – ohjelmalla
– Kuormita konetta stress:llä
– Käytä tunnilla käytyjä työkaluja arvioidaksesi kuormitusta: cpu, mem, io…
– Lopuksi analysoi munin keräämiä käyriä
– Aiheuta valitsemaasi lokiin muutamia rivejä ja analysoi niistä 2-3 riviä perusteellisesti

Vapaaehtoisia lisätehtävä:
– Valvo Nagioksella ja aiheuta hälytys
– Kokeile jotain yli ajan tilatietoja tallentavaa ohjelmaa (muuta kuin munin)

Vapaaehtoisia lisätehtäviä jatkuu:
– Kirjoita oma ohjelma, joka näyttää tilatietoja Linuxissa (esim vapaa muisti, prosessorien lukumäärä…). Tehtävää helpottavat /proc/ ja /sys/, joten riittänee, kun osaat lukea tekstitiedostoja.

Toteutus

Harjoitus tehdään työasemalla, jolle on asennettu Xubuntu 14.04 LTS Desktop aikaisemmin. Olen jo aikaisemmin ajanut komentoja kuten sudo apt-get update, joten paketit ovat ajantasalla. Tietokoneen rauta on seuraavanlaista:
Emolevy: Asus M3N78 PRO
Prosessori: AMD Phenom 9859 Quad Core
Ram: 4GB DDR2 800MHz
Näytönohjain: Nvidia GeForce 8200
Kovalevy: WD 320GB

Munin -ohjelman asennus

Etsitään mitä eri paketteja löytyy sanalla Munin ajamalla apt-cache search munin ja asennetaan peruspaketti komennolla sudo apt-get install muninOhjelman asennuttua katsoin ohjelman manuaalia man munin. Ohjelman saa näkyviin Firefox selaimeen kirjoittamalla osoiteriville /var/cache/munin/www/index.html. Ohjelmasta löytyy kategorioita eri valvontakohteille.

Stress

Asennetaan stress -ohjelma, jotta saadaan järjestelmää kuormitettua sudo apt-get install stress htop. Samalla asennetaan myös htop, joka on versio top-ohjelmasta. Top -ohjelma on tarkoitettu prosessien resurssien kulutuksen seuraamiseen.  Käynnistetään stress komennolla stress –cpu 8 –io 4 –stress –cpu 8 –io 4 –vm 2 –vm-bytes 512M –timeout 1m. ”-cpu 8” parametri käynnistää 8 prosessia kuormittamaan cpu:ta, ”-io 4” kuormittaa io-väylää, ”-vm 2 –vm-bytes 512M” kuormittaa muistia 2 prosessilla, joista kukin on 512M ja ”timeout 1m” asettaa aikakatkaisun minuuttiin.

Screenshot - htop

htop näkymä stress-ajon aikana

Analyysiä

htop

Testissä stress kuormitti CPU:ta noin 24-30% ja muistia 3-13% vaihdellen yllättävän paljon. Vaihdoin htop listan järjestystä prosessorin ja muistin kuormituksen mukaan komennoilla shift+m ja shift+p.

ps

Laitoin stress -ajon pyörimään taustalle ja tarkastelin tilannetta komennolla ps waux | grep meri, joka näyttää käyttäjän meri prosessit. Opiskelin ps:n eri parametrejä ja laadin itselleni tällaisen komennon: ps -U meri -o pid,euser,stat,cmd,%mem,%cpu. Se näyttää käyttäjän meri prosessit, cpu ja ram käytön ynnä muuta.
Screenshot - ps

free -m

Sitten tarkastelin muistin tilannetta free -m komennolla. Tulokset on taulukossa luettavuuden takia:

meri@p01:~$free -m
total used free shared buffers cached
Mem: 3699 2195 1504 21 89 694
-/+ buffers/cache: 1411 2288
Swap: 3836 0 3836

Tähän komentoon kun lisätään -h, niin saadaan tiedot paremmassa muodossa eli ns. ”human readable form”

meri@p01:~$ free -m -h
total used free shared buffers cached
Mem: 3,6G 1,4G 2,2G 21M 91M 695M
-/+ buffers/cache: 670M 3,0G
Swap: 3,7G 0B 3,7G
iotop

Seuraavaksi tarkastellaan iotop ohjelmaa. Ajoin komennon iotop -o, mutta järjestelmä kertoi, että se ei ole asennettuna ajoin siis komennon sudo apt-get install iotop ja sitten uudelleen iotop -o, jolloin järjestelmä huomautti, että tämä tulee ajaa sudona. Viimein onnisti: sudo iotop -o. Aiheutin vähän liikettä aikaisemmin mainitulla stress komennolla. Tältä se näytti:

Screenshot - iotop

Tämä auttanee selvittämään, mikäli jossain järjestelmässä on pullonkauloja. Lopetin iotopin komennolla ”q”.

iftop

Sitten ajetaan iftop, joka tutkii verkkoliikennettä. Jälleen asennetaan ohjelma ensin sudo apt-get install iftop. Ohjelmaan täytyy antaa parametriksi oikea verkkokortti, joten tarkastetaan oikea ip addr -komennolla. Verkkokorttini on eth0 joten komennoksi tulee sudo iftop -i eth0. Aiheutin liikennettä pingaamalla google.comia samalla. Kiinnitin huomiota siihen, että windows 7 työasemani ottaa jatkuvasti yhteyttä tähän linux koneeseen. Molemmat ovat siis samassa lähiverkossa.

Munin

Menin katsomaan Muninin tuotoksia.

Munin kuvaajia

Munin kuvaajia

Se oli toiminut hyvin ja piirtänyt kuvaajaa, mutta en saa Dynazoomia toimimaan eli yksittäisen kuvaajan kun yrittää avata suuremmaksi, niin kuvaa ei ole. Googletin mahdollista ratkaisua ja sellaista ei ole toistaiseksi löytynyt.

Munin Dynazoom ei toimi

Munin Dynazoom ei toimi

Kokeilin täältä löytynyttä ohjetta, mutta se ei auttanut:

But enabling the apache2 cgi (or cgid) makes the dynazoom work.
sudo a2enmod cgi; sudo /etc/init.d/apache2 restart

Sitten löysin toisen ohjeen, kokeillaan sitä. Siirrytään cd:llä seuraavaan hakemistoon ja ajetaan seuraava komento (oli pakko sudottaa). meri@p01:/etc/munin$ sudo nano apache.conf. Muokataan tiedostoa ohjeen mukaan ja tallennetaan Ctrl+z, sitten Y ja enter.

Please edit this file:

/etc/munin/apache2.conf

# Enables fastcgi for munin-cgi-graph if present
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph

Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1
Allow from all
# AuthUserFile /etc/munin/munin-htpasswd
# AuthName "Munin"
# AuthType Basic
# require valid-user

SetHandler fastcgi-script
ScriptAlias /munin-cgi/munin-cgi-html /usr/lib/munin/cgi/munin-cgi-html

Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1
Allow from all
# AuthUserFile /etc/munin/munin-htpasswd
# AuthName "Munin"
# AuthType Basic
# require valid-user

SetHandler fastcgi-script
You will see "Allow from localhost 127.0.0.0/8 ::1" for both munin-cgi-graph and munin-cgi-html. Please comment these lines out and add "Allow from all" (change this depending on your security settings of course) and restart apache2. Now you should be able to zoom to your graphs.

Eipä auttanut tämäkään. Tällä erää ei ole enempää aikaa käyttää tuon ihmettelyyn. Analysointia on vaikea suorittaa ilman tarkempaa kuvaa.

Lokit

Linuxissa lokit löytyvät paikasta /var/log/ kurkistetaan siis mitä täältä löytyy.

Screenshot - logs

/var/log/ sisältö

Katselin muutamia lokeja ensin esim. munin kansiosta, sitten menin kansioon apache2 (cd apache2) ja avasin sieltä access.log tiedoston nanolla: nano access.log. Huomasin, että sinne oli tullut muun muassa Muninin auheuttamia rivejä. Loin tälle koneelle webpalvelimen jo aikaisemmassa tehtävässä, joten menin firefoxilla osoitteeseen localhost. Sen jälkeen menin uudelleen katsomaan apache2:n access.logia ja siellä oli uusia rivejä.

Screenshot - accesslog

Apache2:n access.log viimeiset rivit

Tarkastellaan lähemmin näitä rivejä:

127.0.0.1 - - [06/Sep/2015:13:38:18 +0300] "GET / HTTP/1.1" 200 3594 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0"
127.0.0.1 - - [06/Sep/2015:13:38:18 +0300] "GET /icons/ubuntu-logo.png HTTP/1.1" 304 179 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firef$
127.0.0.1 - - [06/Sep/2015:13:38:18 +0300] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0"
127.0.0.1 - - [06/Sep/2015:13:40:04 +0300] "GET /server-status?auto HTTP/1.1" 200 497 "-" "munin/2.0.19-3 (libwww-perl/6.05)"

Apachen dokumentaatiosta löytyy selitteet, käydään läpi yllä olevan lokin ensimmäinen rivi:

  • 127.0.0.1 on lähde ip osoite, josta yhteyttä on otettu. Tässä tapauksessa localhost.
  • on tietoa, jota ei ole saatavilla. Tässä kohtaa se tarkoittaa RFC 1413 Ident protokollaa. Apachen mukaan tämä tieto ei ole luotettavaa vaikka olisikin saatavilla, joten sillä ei juuri ole väliä. Lisätietoja wikipediasta.
  • jälleen viiva eli tietoa ei ole saatavilla. Tässä pitäisi olla käyttäjän userid eli käyttäjätunnus. Tunnus näkyy vain mikäli autentikointi on vaadittua. Apachen perus sivulle ei tarvitse kirjautua, joten tässä on viiva.
  • [06/Sep/2015:13:38:18 +0300] on aikaleima hetkestä, jolloin pyyntö on otettu vastaan. Muoto on päivä/kuukausi/vuosi:tunnit:minuutit:sekunnit aikavyöhyke.
  • ”GET / HTTP/1.1” eli request line. Apachen mukaan tässä on tärkeää tietoa. Ensin kerrotaan yhteydenottajan metodi eli GET. Sitten kerrotaan mitä on pyydetty eli tässä tapauksessa se puuttuu kokonaan (voisi olla esimerkiksi kuvan nimi). Sitten tulee protokolla eli HTTP 1.1.
  • 200 on statuskoodi, jonka palvelin lähettää asiakkaalle. Numerolla 2 alkavat koodit tarkoittavat onnistunutta vastausta. 3 alkavat = uudelleen ohjaus, 4 alkavat = asiakkaan aiheuttama virhe ja 5 alkavat palvelimen virhe. Lista koodeista täältä.
  • 3594 tarkoittaa palautetun objektin kokoa.
  • ”-” paikalla olisi osoite, josta asiakas on siirtynyt. Tässä on kirjoitettu osoite tyhjään välilehteen, joten sellaista osoitetta ei tässä tapauksessa ole.
  • ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0” sisältää tiedon, jonka asiakas-selain lähettää itsestään. Tässä näyttäisi olevan selaimen ja käyttäjärjestelmän tietoja.

Apache kutsuu tätä lokitus-formaattia combined log format -nimellä. Katsotaan vielä mitä eroavaisuuksia muilla riveillä on.

  • Lokirivissä 2 näkyy kohta ”GET /icons/ubuntu-logo.png HTTP/1.1” ja tässä on siis pyydetty kohde, joka on ubuntu-logo.png. Nyt näkyy myös tuo osoite, josta asiakas on tullut eli http://localhost/.
  • Lokirivissä 3 on paluukoodiksi tullut 404 eli siis varmasti yksi tunnetuimmista koodeista, joka tarkoittaa ettei pyydettyä resurssia löytynyt –  ”not found”
  • Lokirivi 4 on puolestaan Muninin aiheuttama.  Tämä pisti silmään: ”GET /server-status?auto HTTP/1.1” eli tuo server-status?auto kohta onkin vain Muninin pyytämä tuon niminen resurssi. ”munin/2.0.19-3 (libwww-perl/6.05)” puolestaan on tieto, jonka munin lähettää itsestään palvelimelle.

Nagios valvonta

Asennus

Asennetaan siis Nagios, lähtötietoja ei oikeastaan ollut. Etsin oikean paketin komennolla apt-cache nagios. Nagios3 näyttää olevan täysi paketti joten asentamaan: sudo apt-get install nagios3. Asennus pyytää valitsemaan sähköpostipalvelimen asetukset, valitsen internet site. Sitten pyydetään domainia. Annan oman ostetun domainini, esim. ”example.com”. Sen jälkeen pyydetään admin salasanaa nagiosadminille ja annan vahvan sellaisen.

Nagiokseen pääsee selaimella kiinni osoitteessa http://localhost/nagios3 (tai localhostin tilalle ip osoite). Sivu pyysi asennuksen aikana annettuja tunnuksia ja päästi sisään:

Screenshot - nagios

Täältä näkyy yksi hälytys.

Screenshot - nagios2

Katsotaan ongelmaa tarkemmin:

Screenshot - problem

Googletan virheen ja selviää, että tämä virhe tulee aina oletuskonfiguraatiolla, koska edes rootilla ei ole oikeutta tuohon hakemistoon.

Aika ei riitä Nagioksen konfigurointiin sen paremmin tällä erää.

 

Lähteet

http://www.terokarvinen.com
https://lehtonenkari.wordpress.com/tag/munin/

About
This document can be copied and edited according to the GNU General Public License (version 3 or newer). http://www.gnu.org/licenses/gpl.html
Based on a course by Tero Karvinen, http://www.terokarvinen.com