Szerver monitorozása a Monit segítségével Debian és Ubuntu rendszereken (2. oldal)

botond küldte be 2023. 01. 26., cs – 02:12 időpontban

Tartalom

  1. oldal: Monit telepítése és beállítása
  2. oldal: Monit konfigurálása és finomhangolása az ISPConfig automatikus telepítése után

 

A 2. oldal tartalma

 

Folytatás

Az első oldalon elvégeztük a Monit rendszermonitor alkalmazás friss telepítését és beállítását egy Debian 10 (Buster) tökéletes szerver 1.1-es szerver változaton, ezen az oldalon pedig Egy ISPConfig automatizált telepítő által már feltelepített és bekonfigurált Monit példány utólagos hibajavítását, beállítását és finomhangolását hajtjuk végre.

 

 

Monit konfigurálása az ISPConfig automatikus telepítése után

Mivel itt már egy előre feltelepített és beállított Monit rendszerrel lesz dolgunk, aminek a paraméterei nem mindenben fedik le igényeinket, ezért ez a rész inkább - az előző részek kiegészítőjeként - egy amolyan pörgősebb hibaelhárító, finomhangoló rész lesz, ahol megjavítjuk a nem működő összetevőket, és saját igényeinkre szabjuk a Monit beállításait a már használatban lévő rendszerünkön. Ennek a fejezetnek alapjául szolgálhat az alábbi Debian 11 (Bullseye) alapú tökéletes szerver telepítő leírások valamelyike:

Én ezt a forgatókönyvet az utóbbi telepítésen hajtom végre, tehát az erre a célra bérelt VPS szerveremen és szintén erre a célra regisztrált linuxportal.eu domain nevemmel. Így tehát az itt következő részek élő környezetben kerülnek bemutatásra.

SSL kapcsolat beállítása

A probléma:

A szerver sikeresen feltelepült az ISPConfig automatizált telepítője segítségéevel, ahol opcióként a Monit is beállításra került, így ez is feltelepült. A szerver élesítése (domain név átirányítása) után kikért Let's Encrypt SSL tanúsítvány telepítését követően a szerver webes szolgáltatásai már csak HTTPS kapcsolattal érhetők el. A Monit 2812-es portja alapértelmezetten azonban nem teszi lehetővé az SSL kapcsolatot, ezért a Monit felületére lépve hibát dob:

Monit - SSL hiba

"ERR_SSL_PROTOCOL_ERROR"

A megoldás:

A leírás első felében már átnéztük az SSL beállítását, ezért a művelet megértéséhez tekintsük át a korábbi részeket, majd ide visszatérve hajtsuk végre az alábbiakat:

Nyissuk meg szerkesztésre a webes felület konfigurációját:

nano /etc/monit/conf-available/webui

(Ellentétben a friss telepítéses részben leírtakkal, az ISPConfig által telepített Monit webes beállításai ebben a fájlban vannak.)

set httpd port 2812 and
    #SSL ENABLE
    #PEMFILE /usr/local/ispconfig/interface/ssl/ispserver.pem
    allow admin:xxx

Vegyük ki a kommentet a pirossal jelzett helyről a 2. sor elejéről, és tegyük bele a zölddel kiemelt plusz sort, hogy így nézzen ki:

set httpd port 2812 and
    #SSL ENABLE
    #PEMFILE /usr/local/ispconfig/interface/ssl/ispserver.pem
    PEMFILE /etc/monit/ssl/ispserver.pem
    allow admin:xxx (itt a saját jelszavunk van, amit a telepítő adott a végén)

Mentsük le, majd sorban hajtsuk végre az alábbi parancsokat:

mkdir /etc/monit/ssl
cd /etc/monit/ssl
cp /usr/local/ispconfig/interface/ssl/ispserver.pem .
chmod 700 ispserver.pem
monit reload

Ha ennél a Monit újratöltésnél az alábbi hibát dobja:

checksum: file /etc/ssh/ssh_host_dsa_key is not regular file
/etc/monit/conf-enabled/openssh-server:27: Cannot compute a checksum for file /etc/ssh/ssh_host_dsa_key 'sshd'

Akkor ugorjunk erre a részre a hiba kijavításához, majd itt folytassuk.

Ezután frissítsük a Monit webes felületét:

Monit - Belépés SSL kapcsolattal

Majd belépés után:

Monit - Kezdőoldal

És az érvényes tanúsítvány:

Monit - Érvényes SSL tanúsítvány

A Let's Encrypt ACME kliense legkésőbb 3 havonta megújítja az SSL tanúsítványokat, ezért ennek a fájlnak a bemásolását és jogosultsági beállítását minden alkalommal el kellene végezni. A leírás végén a függelékben elkészítünk egy automatizált megoldást erre, hogy ezt magától elvégezze. Most megyünk tovább a következő feladatra.

 

 

Egyedi SSH port beállítása

A probléma:

Az előző SSL-es megoldásnál is látszik, hogy az SSHd folyamatot nem monitorozza a rendszer. Belépve az sshd részleteibe, a következőt látjuk:

SSHD - Nincs monitorozás

A lényeg az alsó szürke sorban olvasható:

If failed [localhost]:22 type TCP/IP protocol SSH with timeout 5 s then restart

A probléma oka, hogy a szerver telepítését követően egyedi portszámot állítottunk be az SSHD számára, ezért a Monit nem tud hozzá csatlakozni, ezért a beállított szabályok szerint az 5. ellenőrzési ciklus után lekapcsolja a monitorozását. Az ISPConfig automatizált telepítésekor ha szigorúbb SSH beállításokkal dolgozunk, akkor ilyenkor le is állítja az SSHd szolgáltatást, tehát kidob a rendszer a terminálokból is. Ha ilyen történik, akkor a webes felületen kell újraindítani/elindítani az SSHd szolgáltatást, és átmenetileg kézzel leállítani a monitorozást, amíg elvégezzük az itt következő megoldást. Majd ezután ismét be lehet kapcsolni a szolgáltatás monitorozását.

Én például friss telepítésnél ha éles környezetben dolgozom, akkor elsőként állítom át az SSH portszámát - mert hiába friss szerver, "új" IP-cím, már néhány órán belül jönnek a próbálkozások a 22-es és az egyéb ismert portokon, mert az IP-címet már előttem biztos használták mások is (ma már nem nagyon létezik "új" cím az IPv4 hálózaton), ebből adódóan a robotok számára sem ismeretlen. Majd a saját alapbeállításaimat követően az ISPConfig automatizált telepítőjénél már nem kérek semmilyen egyedi SSH beállítást, mert ezeket szeretem inkább magam bekonfigurálni. Ennél fogva a telepítő sem ismeri, és nem is igazítja hozzá a Monit beállításaiban az én korábbi manuálisan beállított SSH portszámomat.
Ez a rész tehát azoknak szól, akik hasonlóan állították össze a szerverük SSH konfigurációját, mint én.

A megoldás:

Itt is áttekintettük már korábban az egyedi SSH port beállítási lehetőségét.

Ennek megfelelően nyissuk meg az alábbi konfigurációs fájlt:

nano /etc/monit/conf-available/sshd

Ebben találunk egy ilyen sort:

[...]
if failed host localhost port 22 with proto ssh then restart
[...]

Itt javítsuk át a 22-es portszámot az egyedi portszámunkra, mentsük le, majd töltsük újra a Monit konfigurációt:

monit reload

Majd a webes felületen az SSHD részletek oldalon lent kattintsunk az "Enable monitoring" gombra. Végül visszalépve a főoldalra, már működik az SSHd monitorozása:

SSHD - Működik a monitorozás

Erőforráslimitek finomhangolása

A probléma:

Túl gyakran éri el a Monit a limiteket, vagy éppen fordítva: akkor sem jelez a rendszer, amikor már extrém magas értékeket mutat.

A megoldás:

Az erőforráslimiteket alapból általános értékekre állították, amik nem illeszkednek a saját szerverünk erőforrásaihoz. Ennek megoldásához finomhangolást kell végeznünk a limitek beállításánál, hogy azok a saját szerverünkre illeszkedjenek. Ennek elvégzéséről a leírás korábbi részében volt már szó, így oda ugorva megtudhatjuk ennek a kivitelezését.

Monit ciklus beállítása

A Monitnak van egy frissítési ciklusa, ami a friss telepítések esetén alapértelmezetten 2 perc, de az ISPConfig kezelőpanel automatikus telepítése során ezt felülírják 60 másodpercre. Ha szeretnénk ezt sűrűbbre, vagy éppen ritkábbra állítani, akkor nyissuk meg a Monit fő konfigurációs fájlját:

nano /etc/monit/monitrc

És itt rögtön az elején találunk benne egy ilyen sort:

  set daemon 120            # check services at 2-minute intervals

Az automatizált telepítés esetén itt 60-as értéket láthatunk. Ezt állítsuk át a kívánt frissítési időközre.

A Monit ciklus időtartam beállításkor vegyük figyelembe, hogy a Monit rendszere is fogyasztanak valamennyi erőforrást. Minél több dolgot figyeltetünk a rendszerrel, annál többet fogyaszt. Persze ez a fogyasztás elhanyagolható egy 1-2 perces időablakból nézve, de ha túl sűrűre állítjuk, akkor megemelheti a CPU terhelést, valamint a load értékeket. Továbbá még azt is tartsuk szem előtt, hogy a különböző folyamatok beállításainál a szolgáltatások ki- és bekapcsolása is ciklusokban van meghatározva. Ezért átállításkor ezzel is számoljunk.

Ha beállítottuk a megfelelő értéket, töltsük újra a konfigurációt:

monit reload

Webes felület egyedi portszám beállítása

Éles környezetben felmerülhet az igény a nagyobb fokú biztonságra. A Monit webes felületének elérési portszámát lehetőségünk van átállítani a 2812-es alapértelmezett portról egy egyedi értékre, így a kívülállók sokkal nehezebben akadnak rá Monit rendszerünkre. Ennek beállításához ugorjunk vissza a leírás első részébe, ahol ezt részletesebben kifejtettem. Tehát az ott leírtak figyelembevételével állítsunk be olyan portszámot, ami rendszerünkben még nincs használatban. Ezeknek a használaton kívüli portszámoknak a felderítéséről pedig az alábbi linkeken tájékozódhatunk:

 

 

Email értesítések beállítása

A probléma:

Az automatikus telepítés során a telepítő parancs összeállításánál elfelejtettük betenni a --monit-alert-email kapcsolót, így most nem kapunk értesítéseket a különböző Monit események bekövetkezésekor.

A megoldás:

A leírás első részében már volt szó az email értesítések beállításáról, így ott meg tudjuk tekinteni. Itt annyi a különbség, hogy az automatizált ISPConfig telepítés esetén már létezik a korábban említett fájl, valamint még vannak benne egyéb kikommentezett sablonok is, amikkel nem kell semmit csinálni, csak átírni az email címünket, és bekapcsolni a beállítást a szokásos módon.

Ha mindent jól csináltunk, akkor ilyesmi emaileket kapunk, például ha a CPU használat elérte a limitben beállított értéket:

Resource limit matched Service vps

    Date:        Mon, 23 Jan 2023 00:05:55
    Action:      alert
    Host:        vps
    Description: cpu system usage of 20.7% matches resource limit [cpu system usage > 20.0%]

Your faithful employee,
Monit

Majd utána ilyen érkezik, amint a terhelés visszakúszott a limit alá:

Resource limit succeeded Service vps

    Date:        Mon, 23 Jan 2023 00:08:13
    Action:      alert
    Host:        vps
    Description: cpu system usage check succeeded [current cpu system usage = 3.5%]

Your faithful employee,
Monit

És a többi figyelt szolgáltatásnál is küldi a hasonló leveleket.

 

Itt nagyjából ennyi volna a beállítani való, később még bővítem, ha eszembe jut valami hasznos beállítás.

 

Függelék

Az itt következő részekben még kiegészítjük pár hasznos dologgal a korábban megismerteket.

Állapotok ellenőrzése parancssorból

A Monit lehetőséget nyújt parancssorból is megtekinteni az állapotinformációkat. Ehhez a monit parancsot kell futtatni a megfelelő kapcsolókkal.

Összefoglaló

Ha csak egy gyors összesítést szeretnénk kapni a figyelt szolgáltatásokról, akkor futtassuk az alábbi parancsot:

monit summary

Példa kimenet nálam:

Monit - Summary

Monit 5.27.2 uptime: 8d 23h 40m
┌─────────────────────────────────┬────────────────────────────┬───────────────┐
│ Service Name                    │ Status                     │ Type          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ vps                             │ OK                         │ System        │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ sshd                            │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ rspamd                          │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ redis-server                    │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ pure-ftpd-mysql                 │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ postfix                         │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php8.1-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php8.0-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php7.4-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php7.3-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php7.2-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php7.1-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php7.0-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ php5.6-fpm                      │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ named                           │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ memcached                       │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ mariadb                         │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ fail2ban                        │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ dovecot                         │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ crond                           │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ apache                          │ OK                         │ Process       │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ sshd_bin                        │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ sftp_bin                        │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ sshd_rsa_key                    │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ sshd_dsa_key                    │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ sshd_rc                         │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ master_bin                      │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ postdrop_bin                    │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ postqueue_bin                   │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ master_cf                       │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ main_cf                         │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ postfix_rc                      │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ memcache_bin                    │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ memcache_rc                     │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ mysql_bin                       │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ mysql_rc                        │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ fail2ban_log                    │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ cron_bin                        │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ cron_rc                         │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ apache_bin                      │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ apache_rc                       │ OK                         │ File          │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ cron_spool                      │ OK                         │ Directory     │
├─────────────────────────────────┼────────────────────────────┼───────────────┤
│ rootfs                          │ OK                         │ Filesystem    │
└─────────────────────────────────┴────────────────────────────┴───────────────┘

 

 

Állapotjelentés

Ha pedig egy részletes állapotjelentésre vagyunk kíváncsiak, akkor futtassuk az alábbi parancsot:

monit status

Monit - Status

Ez egy elég hosszú lista, így most nem is másolom be, de le lehet külön is kérdezni az adott folyamatokat, erőforrásokat, például:

monit status apache

Monit - Status - Apache

Monit 5.27.2 uptime: 8d 23h 50m

Process 'apache'
  status                       OK
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  pid                          1453602
  parent pid                   1
  uid                          0
  effective uid                0
  gid                          0
  uptime                       3d 15h 7m
  threads                      1
  children                     10
  cpu                          0.0%
  cpu total                    0.1%
  memory                       0.5% [19.9 MB]
  memory total                 4.7% [185.7 MB]
  security attribute           unconfined
  filedescriptors              19 [0.2% of 8192 limit]
  total filedescriptors        215
  read bytes                   0 B/s [468.9 MB total]
  disk read bytes              0 B/s [23.2 MB total]
  disk read operations         0.0 reads/s [1116138 reads total]
  write bytes                  0 B/s [85.9 MB total]
  disk write bytes             0 B/s [60.9 MB total]
  disk write operations        0.0 writes/s [291832 writes total]
  port response time           0.413 ms to localhost:443 type TCP/IP protocol DEFAULT
  port response time           4.689 ms to localhost:80 type TCP/IP protocol HTTP
  data collected               Tue, 24 Jan 2023 10:41:51

 

SSL automatikus frissítése megújításkor

A rendszerben működő ACME kliens - a legutolsó megújításától számítva - legkésőbb 3 hónapon belül ciklikusan megújítja az SSL tanúsítványokat, ezért az ebben a leírásban korábban kézzel átmásolt PEM fájlt is frissíteni kell, valamint a jogosultságát is újra beállítani. Erre többféle megoldás is kínálkozik, amik közül most megnézünk párat, és amelyik a szimpatikusabb, azzal készítsük el saját automatikánkat.

Illetve most egyelőre csak egyfélét dolgoztam itt ki, amit le is teszteltem (Debian 10-en és Debian 11-en) és hibátlanul működik, de később még kipótolom ezt a részt, tervezek még ide egy-két másik megoldást is, amint időm engedi.

Frissítés Incron használatával

Figyelem!
Az Incron-al kapcsolatban szót kell ejtenünk egy biztonsági problémáról!

Az incron 0.5.12-1 verziójában találtak egy hibát, aminek következtében a csomag kikerült a Debian 11 (Bullseye) stabil csomagtárából, viszont az incron csomag a Debian 11 backports tárolójában továbbra is elérhető. A hiba leírása itt található, melynek a lényege röviden a következő:

"A problémát a figyelt útvonalakon belüli új könyvtárak létrehozása okozza: ezek az inotify figyelési cél újratöltését váltják ki, ami érvénytelenné teszi a régi figyelési struktúrát."

Tehát amellett a tény mellett nem szabad elsiklanunk, hogy van a programcsomagban egy bug, viszont a mi feladatunkat ez nem érinti, mivel mi most nem könyvtárat figyeltetünk vele, amiben újabb könyvtárak jönnek létre, hanem egy darab fájlt kell figyelnünk.

Ezek tudatában tehát mindenki döntse el, hogy használja-e az incron-t vagy sem.

Tudomásul véve a fentieket, ha szeretnénk beállítani az incron segítségével az SSL fájlunk átfrissítését, akkor folytassuk az itt leírtakkal.

A Tökéletes szerverek esetén a backports tárolók már eleve be vannak állítva, így ezzel nincs semmi teendőnk, csak simán telepítsük az incron csomagot.

apt-get install incron

Ezután hozzunk létre egy parancsfájlt mondjuk az ssl fájl mellé (itt nem kell keresgélnünk):

nano /etc/monit/ssl/monit_ssl_refresh.sh

És tegyük bele a következő tartalmat:

#!/bin/sh
cp /usr/local/ispconfig/interface/ssl/ispserver.pem /etc/monit/ssl/
chmod 700 /etc/monit/ssl/ispserver.pem
monit reload

Itt átmásoljuk a .pem fájlt, majd beállítjuk a jogosultságát 700-ra, végül újratöltjük a Monit konfigurációt, hogy már ezzel az SSL-el töltődjön be.

Mentsük le a fájlt, majd tegyük futtathatóvá:

chmod +x /etc/monit/ssl/monit_ssl_refresh.sh

Ezután adjuk hozzá a root felhasználót az incron jogosult felhasználói közé, mert enélkül a root sem használhatja:

echo "root" >> /etc/incron.allow

Majd az incrontab paranccsal szerkesszük az incrontab-ot:

incrontab -e

Tegyük bele az alábbi sort:

/usr/local/ispconfig/interface/ssl/ispserver.pem IN_MODIFY /etc/monit/ssl/monit_ssl_refresh.sh

És innentől kezdve már lefut a scriptünk amikor megváltozik az eredeti fájl.

Ezt a beállítást le is teszteltem, nálam gond nélkül működik: Belemódosítottam az eredeti fájlba, majd lementettem. Ezután egyből SSL hibát dobott a Monit. Majd visszaállítottam a mentést, és a Monit is helyreállt. Tehát nincs ezzel így semmi probléma, csak a fenti hibajelentéses oldalon leírtakat kerüljük, tehát hogy ne egész könyvtárat figyeltessünk, amiben újabb alkönyvtárak jöhetnek létre. De reméljük ezt is javítják idővel, és akkor visszakerül a stabil csomagtárba is. Bár ha belegondolunk, a Debian 10 (Buster) idején a phpMyAdmin járt ugyanígy, és az is csak itt a Debian 11 kiadásában került vissza. Ennek ellenére azt is használtuk a forrásából feltelepítve, és nem lett senkinek se baja...

 

 

Konklúzió

Ennyi lenne tehát a Monit szolgáltatás és rendszererőforrás monitorozó alkalmazás működtetése, amit láthattunk nulláról történő telepítés és bekonfigurálás formájában valamint az ISPConfig automatizált telepítője által már elkészített formában is, amit már csak finomhangolnunk kellett. Remélem sokaknak hasznára válik ez a leírás, és jó szolgálatot tesz a Monit a szerverük üzemeltetése során.

 

 

Lapozó

Ez a leírás több oldalból áll: