Viidennet tehtävät – SSH ja kuormitushistorian tutkiminen sysstatin avulla

Tämän viikon ensimmäisiin tehtäviin kuului SSH-demonin asentaminen ja SSH-liikenteen salliminen palomuurin läpi. Kummankin näistä toimenpiteistä olen tehnyt jo aikaisemmin omalle palvelinkoneelleni, sillä tunnilla yhdessä tekemämme harjoitukset edellyttivät SSH:n käyttöä. Muistiinpanoistani voin kuitenkin päätellä, että SSH-serverin asensin komennolla

$ sudo apt-get install openssh-server

ja vaikka muistaakseni sallimme SSH-liikenteen jo palvelimemme asennuksen yhteydessä, tämä olisi varmaankin tapahtunut komennolla

$ sudo ufw allow 22/tcp

. UFW on siis Ubuntun mukana tuleva palomuurinhallintatyökalu, jonka avulla edeltävällä komennolla sallitaan portin 22 kautta kulkeva liikenne, eli tässä tapauksessa SSH-yhteydet.

SSH mahdollistaa jo aikaisemminkin käyttämäni scp-komennon hyödyntämisen. Scp:n avulla voi turvallisesti kopioida tiedostoja koneelta toiselle. Oman virtuaalikoneeni työpöydällä on syystä tai toisesta tiedosto nimeltä jaujau.txt, jonka tässä esimerkissä kopioin palvelinkoneelleni.

Ylempi terminaali-ikkunani kuvaa siis antamani scp-komennon ja tiedoston siirtymisen, ja alemmasta ikkunasta on nähtävissä, että jaujau.txt todella ilmestyy palvelinkoneeni kohdehakemistoon.

Kirjautumisen automatisointi

Kävimme tunnilla läpi myös, kuinka SSH-kirjautumisen saa automatisoitua julkisen avaimen menetelmää käyttäen. Teinkin kyseisen operaation koulussa omalla läppärilläni, mutta kotikoneellani olevalle virtuaalikoneelle en ole kirjautumista vielä automatisoinut. Tähän tarvitaan onneksi vain muutama komento.

Aluksi luon virtuaalikoneelleni SSH-avainparin komennolla

$ ssh-keygen

Tämä luo koneelleni kaksi avainta. Toinen avaimista on yksityinen, ja sitä on tarkoitus säilyttää omalla koneella eikä sitä saa paljastaa kenellekään. Toinen avain on puolestaan julkinen, ja nimensä mukaisesti sitä käytetään yksityisen avaimen julkisena vastaparina. Esimerkiksi tässä tapauksessa siirrän oman julkisen avaimeni palvelinkoneelleni seuraavalla komennolla:

$ ssh-copy-id helkera@helkera.com

Tämän jälkeen SSH:n ei enää pitäisi kysyä minulta salasanaa kun kirjaudun palvelinkoneelleni, sillä se pystyy tarkistamaan, onko minulla hallussani oleva yksityinen avain palvelinkoneella olevan julkisen avaimen pari.

En muista, sainko viimeksi ensimmäisen komennon jälkeen näkyviä rivejä, joissa puhutaan jo asennetuista avaimista. Joko tämä on normaalia, tai sitten teksti liittyy aikaisemmin tunnilla luomaani avainpariin, jonka julkinen avain on jo palvelimellani. SSH-kirjautuminen kuitenkin toimii nyt ilman salasanaa, kuten kuvasta näkyy.

Järjestelmän tilan tutkiminen

Sysstatin asentaminen ja käynnistäminen

Seuraavana oli vuorossa sysstat-paketin asennus, konfigurointi ja käynnistäminen. Koska tehtävässä mainittiin, että sysstatin on hyvä antaa juosta ennen historian tutkimista noin päivän tai parin verran, asensin sysstatin itseasiassa jo eilen illalla. Päätin asentaa ohjelman palvelinkonelleni, sillä toisin kuin virtuaalikoneeni, se oli päällä yön yli.

Lähdin liikkeelle sopivan paketin etsimisestä. Annoin komennon

$ apt-cache search sysstat

, joka antoi minulle kuvassa näkyvät pakettien nimet, joista valitsin haluamani ohjelman.


Tiesin, että minun tulisi seuraavaksi konfiguroida sysstattia jollakin tavalla, mutta en ollut aivan varma, miten. Koitinkin kepillä jäätä ja annoin komennon sysstat config, joka ei kuitenkaan ollut tunnistettu komento. Seuraavaksi kokeilin tehtävänannossa mainittua komentoa sar, mutta sain seuraavanlaisen virheilmoituksen:

Cannot open /var/log/sysstat/sa23: No such file or directory
Please check if data collecting is enabled

Heitin kyseisen virheilmoituksen Googleen ja päädyin sivulle, jossa selitettiin, miten sysstatia piti konfiguroida ennen käynnistämistä.

Ohjeista viisastuttuani avasinkin siis nanolla tiedoston /etc/default/sysstat ja muokkasin järjestelmäinformaation keräämiseen liittyvän false-arvon true:ksi seuraavalla tavalla:

Tämän jälkeen annoin vielä komennon

$ sudo service sysstat start

, minkä jälkeen myös sar-komento alkoi tulostaa jotain. Jätin siis sysstatin hyvillä mielin rullaamaan. Mieleeni tuli kuitenkin, että ehkä palvelinkoneen lokit eivät olisi kovinkaan mielenkiintoista katseltavaa, sillä palvelimeni ei oikeastaan tee juuri mitään. Asensinkin sysstatin myös virtuaalikoneelleni varmuuden vuoksi. Ja hyvä niin, koska suurin osa seuraavista analyyseistä tulee liittymään juuri virtuaalikoneeseeni.

Sar (System Activity Reporter) -komennon tulosteiden tulkitseminen

Annettuani sar-komennon huomasin aluksi, että molempien koneiden tulosteet liittyvät tähän päivään. Virtuaalikoneeni tulosteessa näkyy, koska olen käynnistänyt koneen, mutta palvelinkoneestani ei vastaavaa tietoa näy, sillä se on ollut päällä yhtäjaksoisesti jo pidempään. Sysstatin datan tulostusintervalli vaikuttaa olevan kymmenen minuuttia.

Virtuaalikoneellani ei rivejä ole kuin muutama:

kun taas palvelinkoneellani pelkästään tämän vuorokauden alkuosaan liittyviä rivejä on jo vaikka millä mitalla:

Joistain sarakkeiden otsikoista pystyy melko hyvin päättelemään, mitä ne tarkoittavat. Esimerkiksi CPU varmaankin liittyy prosessoreihin, user käyttäjään ja niin edespäin. Tämä ei kuitenkaan varsinaisesti auta itse arvojen tulkitsemisessa. Sysstatista vaikuttaa löytyvän dokumentaatiota vaikka millä mitalla, mutta suurin osa siitä vaikuttaa itselleni melko raskaslukuiselta, joten päädyin ainakin näin aluksi tutkailemaan hieman yksinkertaisempia ohjeita sar-komennon käyttöön.

CPU-sarakkeessa näkyvä sana all kielii siis siitä, että esitetyt tiedot liittyvät kaikkien prosessorien toimintaan. Toimintaa saisi eriteltyä tarkemmin komennolla sar -P ALL, mutta koska kummassakin koneessani on vain yksi prosessori, tämä ei hyödytä minua juurikaan. User-kohdasta löytämissäni ohjeissa ei puhuta mitään, joten jatkoin sopivampien ohjeiden etsimistä.

Löysinkin toisen sivun, jossa sarakkeiden nimet on selitetty edes jollain tavalla. User-sarake siis kuvaa prosentuaalisesti prosessorin käyttämää aikaa erilaisiin (käyttäjän) prosesseihin liittyen. Palvelinkoneellani arvo ei ole missään vaiheessa noussut edes yhteen, ja virtuaalikoneellanikin arvo on maksimissaan ollut 2,48.

Halusinkin testin vuoksi suorittaa jotakin resursseja enemmän kuluttavaa prosessia virtuaalikoneellani, ja katsoa, mitä sar tulostaa tämän jälkeen. Avasin kokeeksi Youtuben ja aloin katsomaan musiikkivideota. Video ei alussa pyörinyt kovin sulavasti, mutta jonkin aikaa latailtuaan toiston laatu normalisoitui. Selailin samalla myös Reddittiä.

Tämän jälkeen saadut arvot näyttivätkin jo hieman erilaisilta. Ainakin user- ja system-sarakkeiden arvot ovat lähteneet kasvuun ja idle-aika oli siten vähentynyt.

Nice ilmeisesti viittaa arvoon, jonka mukaan suoritettavia prosesseja priorisoidaan ja nice-sarake kuvaakin niihin prosesseihin käytettyä aikaa, joiden nice-arvoa on muutettu.

System-sarakkeessa puolestaan kuvataan prosessorin käyttämää aikaa käyttöjärjestelmän omiin prosesseihin.

Iowait kuvaa aikaa, jonka prosessori käyttää odottaen järjestelmän laitteita. Kirjaimet i ja o tulevat sanoista input ja output.

Steal-sarakkeesta käy ilmi aika, jonka virtuaalinen prosessori käyttää odottaessaan resursseja fyysiseltä prosessorilta. Yllä olevassa virtuaalikoneeseeni liittyvässä tulosteessa arvo on aina 0, mutta palvelinkoneellani arvo nousee toisinaan nollan yläpuolelle. Ilmeisesti oma prosessorini palvelee virtuaalikoneeni tarpeita ilman odotusta, kun taas palvelinkoneeni pitää välillä odotella resursseja pienen hetken ajan?

Idle-sarakkeessa on kuvattu sen ajan osuus, jolloin prosessori ei tee mitään.

Yhteensä sarakkeiden arvojen summa on siis 100% ja kuormituksen kasvaessa idle-aika vähenee ja toisinpäin.

Iostat-komento

Seuraavana lähdin tutkimaan, millaista informaatiota saisin iostat-komennolla.

Tällä kertaa löysin myös ihan kunnollisen manuaalisivun, jossa on eritelty komennon tulostetta tarkemmin. Ensimmäiseksi iostat tulostaa siis prosessorien keskimääräiseen ajankäyttöön liittyvää tietoa samaan tapaan kuin sar-komento.

Seuraava osa puolestaan kuvaa laitteiden käyttöön liittyvää tietoa. En osaa hyvin kuvailla, mikä loop0 oikein on, mutta veikkaisin sen liittyvän tähän Wikipedia-artikkeliin. Sda taas on luultavasti virtuaalikoneeni kovalevy.

Tps kuvaa sitä, kuinka monta siirtoa kyseinen laite suorittaa sekunnissa. Seuraavat arvot kertovat, millä vauhdilla tietoa on kilobiteissä mitattuna luettu ja kirjoitettu ja kaksi viimeistä saraketta kuvaavat luetun ja kirjoitetun tiedon kokonaismäärää kilobitteinä.

Pidstat-komento

Kuten sopii odottaakin, pidstat-komennon tulostama litania on huomattavan pitkä, sillä siinä näkyvät kaikki koneen senhetkiset prosessit. Vaikka seuraava kuva onkin melko laaja, siinä ei silti näy läheskään kaikkia listattuja prosesseja.

Kahdessa ensimmäisessä sarakkeessa on prosessin tunnistamiseen liittyvää tietoa:

UID – sen käyttäjän identifioiva tunnus, johon kyseinen prosessi liittyy. Rehellisesti sanottuna en oikein ymmärrä, miksi pidstat tulostaa niin monta erilaista käyttäjä-id:tä. Tiedän, että 0 on root-käyttäjän UID ja ns. normaalien käyttäjien UID:t alkavat yleensä 1000:sta. Mutta pidstat listaa näiden lisäksi myös UID:t 101, 102, 103, 109, 113, 114 ja 117. Googlettamalla selvitin, että kaikki koneen käyttäjät voi listata komennolla

$ cat /etc/passwd 

niitä löytyykin vaikka millä mitalla. En ole edes tiennyt, että ilmeisesti esimerkiksi joitakin demoneita käsitellään käyttäjinä. Esimerkiksi avahi daemon käyttää koneellani UID:tä 117. Muutkin mainitsemani arvot vaikuttavat liittyvän erilaisiin käyttöjärjestelmän osiin ja palveluihin.

PID – prosessin identifioiva numero. Olen itse käyttänyt näitä esimerkiksi sellaisissa tilanteissa, joissa haluan tarkistaa, onko jokin tietty prosessi käynnissä, tai halutessani tappaa tietyn prosessin.

%usr-sarake kertoo, kuinka suuren prosentuaalisen osuuden käyttäjätasolla suoritettu prosessi vie prosessorin tehosta. System-kohta pitää sisällään vastaavaa tietoa, mutta käyttäjätason sijaan se kuvaa systeemitason kuormitusta.

Guest kuvaa virtuaalikoneessa suoritetun prosessin osuutta virtuaaliprosessorin toiminnasta. Wait-sarake puolestaan nimensä mukaisesti kuvaa aikaa, jonka prosessori on käyttänyt odottaessaan tehtävään liittyvää suorittamista.

%CPU kuvaa prosentuaalisesti sitä aikaa, jonka tietty prosessi vie prosessorin toiminnasta. Pelkkä CPU puolestaan kertoo, mikä prosessori tehtävää suorittaa. Koska virtuaalikoneessani on vain yksi prosessori, kaikki sarakkeen luvut ovat samat. Viimeisessä sarakkeessa on prosessiin liittyvän komennon nimi.

Kun ottaa huomioon, että katselin nimenomaan musiikkivideoita netin kautta, ei ole yllättävää, että suurimpia numeroita ovat prosesseista saaneet Web Content, firefox, ja Xorg. Muuten en edes tietäisi, mikä Xorg on, mutta asensin sen juuri vähän aikaa sitten omalle Arch Linuxilleni, joten minulla on tuoreessa muistissa, että sitä käytetään graafisten käyttöliittymien ja sen myötä muiden graafisten ohjelmien käytön mahdollistavana serverinä.

Siinä olivatkin tämän viikon varsinaiset tehtävät. Muutamia vapaaehtoisia tehtäviä olisi tälle viikolle myös, mutta taidan skipata ne tällä kertaa. Olen käyttänyt lomalla sen verran paljon aikaa Arch Linuxin kanssa hikoilemiseen, että aion laskea sen tässä yhteydessä henkilökohtaiseksi lisätehtäväkseni :D Kirjoitan omista Arch Linux -kokemuksistani ehkä joskus tulevaisuudessa, kunhan saan Archissa erinäiset asiat toimimaan. Tai oikeammin, JOS saan ne toimimaan :D Tähän mennessä edistyminen on ollut jokseenkin hidasta ja tuskallista, mutta hyvin opettavaista, minkä takia Archia rakentelemaan lähdinkin.

Tietoa kirjoittajasta

Noora Huttunen

Opiskelen ohjelmistotuotantoa Haaga-Helian tietojenkäsittelylinjalla.