Moodul 8 · 8.3
Serveri jälgimine
Moodul 8: Varukoopiad ja jälgimine · Lugemisaeg: 10 minutit
Õpieesmärk: Pärast seda õppetundi oskad otsustada, mida oma serveris jälgida (väljast ja seest), millised piirväärtused on mõistlikud ning kuidas tagada, et teavitus sinuni päriselt jõuab, ilma et sa teavitustesse upuksid.
Põhimõisted: välisjälgimine, sisejälgimine, tööaeg (uptime), http-kontroll, pordikontroll, sertifikaadi aegumine, kettaruum, mälu, koormus (load), heartbeat (dead man's switch), piirväärtus, teavituskanal, häireväsimus, teenusepakkuja graafikud
Miks jälgida?
Ilma jälgimiseta kuuled probleemidest oma klientidelt või üldse mitte. Veebisait, mis on laupäevast saati maas, aegunud sertifikaat, täis saanud ketas, varundus, mis on juba kolm nädalat vaikselt ebaõnnestunud: kõik need on asjad, mida oleksid saanud õigel ajal märgata. Jälgimine tähendab, et programm vaatab pidevalt ja hoiatab sind, kui midagi on valesti.
Hea jälgimine vastab kahele küsimusele:
- Kas see töötab kasutaja jaoks? Seda mõõdad väljast.
- Kas varsti läheb midagi valesti? Seda mõõdad seest: ketas, mälu, uuendused, varukoopiad.
Väljast: mida kasutaja näeb
Välisjälgimine töötab sinu serverist erineval masinal, soovitatavalt teise teenusepakkuja juures. Loogiline: kui su server on maas, ei saa ta ise enam hoiatada.
| Kontroll | Mida teeb | Miks |
|---|---|---|
| http(s) | laadib iga minut lehe ja vaatab olekukoodi (200) ning soovi korral mõnd sõna lehel | veebisait töötab päriselt, mitte ainult server |
| port | loob ühenduse näiteks pordiga 22 või 443 | teenus kuulab ja on kättesaadav |
| ping | saadab ICMP-paketi | server on elus (kuid su veebisaidi kohta see midagi ei ütle) |
| sertifikaat | loeb sertifikaati ja selle aegumiskuupäeva | hoiatab aegsasti enne aegumist |
| DNS | pärib A-kirje | nimi viitab endiselt õigele serverile |
Sertifikaat väärib erilist tähelepanu. Let's Encrypti sertifikaadid kehtivad lühikest aega ja uuendatakse automaatselt (õppetund 7.3), kuid kui uuendamine vaikselt ebaõnnestub, märkad seda alles siis, kui külastajad hoiatuse saavad. Let's Encrypt ise ei saada alates 2025. aasta juunist enam meeldetuletuskirju aeguvate sertifikaatide kohta ja soovitab ise jälgimist. Sertifikaadikontroll, mis hoiatab, kui kehtivust on jäänud alla 14 päeva, ei ole seega luksus.
Levinud programm, millega seda ise teha, on Uptime Kuma, mille paigaldad õppetunnis 9.4 konteinerisse. Ära pane seda eelistatult samasse serverisse, mida see jälgima peab, või kombineeri see teise, välise kontrolliga. On ka kolmandate osapoolte teenuseid, mis teevad sama; vali endale sobiv ja vaata, kus need asuvad, kui teavitustes võib olla su klientide andmeid.
Seest: mis varsti valesti läheb
Mõnda probleemi näed väljast alles siis, kui on juba hilja. Neid mõõdad serveris endas:
| Mida | Kuidas seda näed | Mõistlik piirväärtus |
|---|---|---|
| Kettaruum | df -h | hoiatus üle 80%, häire üle 90% |
| Inoodid (failide arv) | df -i | sama; ketas võib olla "täis" miljonitest väikestest failidest |
| Mälu | free -h, teated "Out of memory" logis journalctl -k | iga OOM-teade on märk |
| Koormus (load) | uptime, top | pikalt suurem kui vCPU-de arv |
| Ebaõnnestunud teenused | systemctl --failed (õppetund 6.1) | iga ebaõnnestunud teenus |
| Uuendused ja taaskäivitus | /var/run/reboot-required, apt list --upgradable (õppetund 4.2) | turvauuendus vanem kui kaks päeva |
| Varukoopiad | su varundusskripti lõpp (õppetund 8.2) | iga ebaõnnestunud või ära jäänud käivitus |
Seda saab teha lihtsa skripti ja taimeriga (õppetund 6.3), mis piirväärtuse ületamisel teavituse saadab, või jälgimisprogrammiga, millel on serveris agent (tuntud avatud lähtekoodiga näited on Netdata ning Prometheuse ja node_exporteri kombinatsioon). Alusta väikselt: ketas, ebaõnnestunud teenused ja varukoopiad püüavad kinni enamiku probleemidest.
Teenusepakkuja paneeli graafikud (protsessor, mälu, võrk, ketas päevast aastani) on suurepärane lisa trendide nägemiseks: kui su ketas kasvab iga kuu paar protsenti, tead, millal see täis saab. WebOké juures on need VPS-i vaates, teiste pakkujate juures sarnaselt. Tavaliselt need teavitusi ei saada, seega jälgimist need ei asenda.
Heartbeat: teavitus siis, kui midagi ei juhtu
Mõnda asja tuleb jälgida just signaali puudumise järgi. Parim näide on öine varundus: kui skript isegi ei käivitu (taimer väljas, server väljas, skript katki), ei tule ka veateadet.
Lahendus on heartbeat ehk dead man's switch: su jälgimine ootab iga päev elumärki. Varundusskript saadab lõpus, ainult siis, kui kõik õnnestus, väikese http-päringu su jälgimise kindlale salajasele URL-ile:
restic backup ... && restic check && curl -fsS -m 10 https://status.example.com/api/push/Xyz123abc?status=up >/dev/nullKui elumärki ühel päeval ei tule, saad teavituse. Uptime Kumal on selleks monitoritüüp Push; on ka ise majutatavaid programme, nagu Healthchecks. Nii jälgid ühe reaga, kas su varundus päriselt toimus.
Teavitused, mis kohale jõuavad, ja mitte liiga palju
Teavitus, mida keegi ei loe, ei ole jälgimine. Korralda kolm asja:
- Teavituskanal, mida päriselt näed: tõuketeade telefonis, vestluskanal, SMS. E-post sobib, kuid ainult siis, kui su server suudab usaldusväärselt e-kirju saata, ja e-kiri jääb kergesti märkamata. Kasuta kõige olulisemate teavituste jaoks kahte kanalit.
- Ei sõltu sellest, mida jälgid. Kui su server saadab täis ketta kohta ise e-kirja, ei tule seda, kui ketas on täis. Välisjälgimine ja heartbeat püüavad selle kinni.
- Vähe, kuid põhjendatult. Kui saad iga päev kümme teavitust, millega midagi ette ei võta, hakkad neid eirama, ka seda ühte, mis loeb. Seda nimetatakse häireväsimuseks. Sea piirväärtused nii, et teavitus tähendab: pead midagi tegema. Lase teavitusel käivituda alles pärast mitut järjestikust ebaõnnestunud kontrolli (näiteks kolm korda), et üks kadunud pakett sind üles ei ajaks.
Testi oma teavitusi: lülita mõni teenus korraks välja ja vaata, kas teavitus tuleb ja kui kaua see aega võttis.
Mida mitte teha
- Jälgimislehed kõigile avatud koos sisemiste nimede ja aadressidega. Avalik olekuleht on lubatud, kuid näita seal ainult seda, mida külastajad võivad teada.
- Jälgimise administraatorikonto ilma tugeva parooli ja 2FA-ta. Kes pääseb su jälgimisse, saab teavitused välja lülitada.
- Agendid, millel on rohkem õigusi kui vaja. Jälgimisagent ei pea tavaliselt olema root.
Kokkuvõte
- Jälgi väljast, kas asi töötab (http, port, sertifikaat, DNS), teiselt masinalt, ja seest, kas midagi varsti valesti läheb (ketas, mälu, teenused, uuendused, varukoopiad).
- Sertifikaadid väärivad oma kontrolli: Let's Encrypt ei saada alates 2025. aasta juunist enam meeldetuletuskirju.
- Heartbeat teavitab elumärgi puudumisest; ideaalne varukoopiate ja ajastatud ülesannete jaoks.
- Vali teavituskanal, mida päriselt näed ja mis ei sõltu serverist endast, ning sea piirväärtused nii, et iga teavitus nõuab tegutsemist.
- Teenusepakkuja graafikud näitavad trende, kuid tavaliselt teavitusi ei saada.
Test (quiz)
Ülesanne
Ülesanne O8.3: Sinu jälgimisnimekiri. Koosta oma serveri jaoks jälgimisnimekiri: millised välised kontrollid (millise intervalliga ja kust), millised sisemised (koos piirväärtustega), milli(n)e heartbeat ja millise kanali kaudu teavitused tulevad. Seadista vähemalt üks väline http- või sertifikaadikontroll ja üks heartbeat (näiteks oma varunduse jaoks) ning testi teavitust, lülitades mõne teenuse korraks välja. Pane kirja, kui kaua kulus, enne kui teavitus tuli.
Ülesanne O8.3: Sinu jälgimisnimekiri
Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.
Väline kontroll teisest masinast (soovitatavalt teise teenusepakkuja juures), iga 1 kuni 5 minuti järel mõne kordusega. Sertifikaat 14 päeva, ketas 80/90%, systemctl --failed, heartbeat ainult õnnestunud varundamise korral. Teavitused, mis ei nõua tegutsemist: eemalda need või tõsta läve.
Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.
Loe edasi
- Pole enam ligipääsu oma VPS-ile: mis nüüd?
- Let's Encrypt, Expiration Notification Service Has Ended: https://letsencrypt.org/2025/06/26/expiration-notification-service-has-ended
- Uptime Kuma (GitHub): https://github.com/louislam/uptime-kuma
