V tomto článku popíšu, jak můžete monitorovat svůj server CentOS 7 pomocí Munin a Monit. Munin vytváří šikovnou malou grafiku o téměř každém aspektu vašeho serveru (průměrné zatížení, využití paměti, využití CPU, propustnost MySQL, provoz eth0 atd.) bez velké konfigurace, zatímco Monit kontroluje dostupnost služeb jako Apache, MySQL, Postfix a bere příslušná akce, jako je restart, pokud zjistí, že se služba nechová podle očekávání. Kombinace těchto dvou vám poskytuje plné monitorování:grafika, která vám umožní rozpoznat aktuální nebo nadcházející problémy (jako „Brzy potřebujeme větší server, naše průměrná zátěž se rychle zvyšuje.“) a hlídací pes, který zajišťuje dostupnost monitorovaných služeb. .
Přestože Munin umožňuje monitorovat více než jeden server, zde se budeme zabývat pouze monitorováním systému, kde je nainstalován.
Tento tutoriál byl napsán pro CentOS 7, ale konfigurace by měla platit i pro další distribuce, jako je RHEL a Scientific Linux.
1 předběžná poznámka
Hostname našeho systému je server1.example.com a máme na něm web www.example.com s kořenem dokumentu /var/www/html.
2 Povolit úložiště EPEL
Na CentOS 7 nejsou Munin a Monit dostupné ve výchozích úložištích CentOS. Naštěstí je můžeme nainstalovat z úložiště EPEL. Chcete-li povolit úložiště EPEL, spustíme:
yum install epel-release
Importujte klíč EPEL GPG:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
a poté spusťte:
yum update
abychom se ujistili, že je systém aktuální a že se načte seznam balíčků z EPEL, než začneme instalovat munin.
2 Instalace webového serveru Apache
Munin vyžaduje webový server, aby obsluhoval a zobrazoval své statistické soubory. Zde nainstaluji apache httpd server:
yum install httpd
Spusťte apache a povolte jeho automatické spouštění při spouštění.
systemctl enable httpd
systemctl start httpd
4 Instalace a konfigurace Munin
Chcete-li nainstalovat Munin na CentOS 7, provedeme toto:
yum install munin munin-node
Poté vytvoříme odkazy pro spuštění systému pro Munin a spustíme jej:
systemctl enable munin-node
systemctl start munin-node
Dále musíme upravit konfigurační soubor Munin /etc/munin/munin.conf.
nano /etc/munin/munin.conf
Chceme, aby munin ve výstupu HTML používal název server1.example.com místo localhost, proto nahradíme localhost serverem1.example.com. Bez komentářů vypadá změněný soubor takto:
[...] # a simple host tree [server1.example.com] address 127.0.0.1 use_node_name yes [...]
Statistiky munin jsou chráněny uživatelským jménem a heslem (Apache basic auth). V dalším kroku přidáme nového uživatele a heslo do souboru /etc/munin/munin-htpasswd.
htpassd /etc/munin/munin-htpasswd admin
Příkaz přidá nového uživatele se jménem „admin“ a dvakrát vyzve k zadání nového hesla.
Nyní počkejte několik minut, aby munin mohl vytvořit svůj první výstup, a poté přejděte ve svém prohlížeči na http://server1.example.com/munin/ a uvidíte první statistiku.
(Toto je jen malý výňatek z mnoha grafik, které munin produkuje...)
5 Instalace a konfigurace Monit
Dále nainstalujeme Monit:
yum install monit
Poté vytvoříme odkazy pro spuštění systému pro monit:
systemctl enable monit
systemctl start monit
Výchozí konfigurační soubor Monitu je /etc/monitrc, kde můžete najít příklady konfigurace (další příklady konfigurace najdete na http://mmonit.com/wiki/Monit/ConfigurationExamples), které jsou všechny zakomentovány, ale říká monitu, aby také vyhledejte konfigurační soubory v adresáři /etc/monit.d.
V tomto případě chci monitorovat:
- proftpd
- sshd
- mysql
- apache
- postfix
Dále nakonfiguruji tato nastavení pro Monit:
- Povolte webové rozhraní Monit na portu 2812.
- Pro webové rozhraní místo HTTP použijte HTTPS.
- Nakonfigurujte heslem chráněné přihlášení pro webové rozhraní.
- Monit bude zasílat e-mailová upozornění na adresu [email protected]
Nejprve nakonfiguruji nastavení ověřování. Otevřete soubor /etc/monit.d/monitrc
nano /etc/monit.d/monitrc
A přejděte dolů, dokud nenajdete tuto sekci:
set httpd port 2812 and
use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server and
allow admin:monit # require user 'admin' with password 'monit'
allow @monit # allow users of group 'monit' to connect (rw)
allow @users readonly # allow users of group 'users' to connect readonly
Nahraďte jej následujícím nastavením:
set httpd port 2812 and
use address 0.0.0.0
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
Slovo "test" je heslo, nahraďte ho prosím bezpečným heslem a možná budete chtít změnit uživatelské jméno "admin" na jméno, které nelze snadno uhodnout.
Nyní přidáme konfiguraci pro sledované služby. Místo úpravy /etc/monitrc vytvoříme nový konfigurační soubor /etc/monit.d/monitrc.
Můj soubor vypadá takto:
nano /etc/monit.d/monitrc
set logfile syslog facility log_daemon
# Send emails trough this mailserver
set mailserver localhost
# Set the From address of the alert emails
set mail-format { from: [email protected] }
# Send alerts to this address
set alert [email protected]
# Monitor the Proftpd service check process proftpd with pidfile /var/run/proftpd/proftpd.pid start program = "/usr/bin/systemctl start proftpd" stop program = "/usr/bin/systemctl stop proftpd" if failed port 21 protocol ftp then restart if 5 restarts within 5 cycles then timeout
# Monitor the SSH service check process sshd with pidfile /var/run/sshd.pid start program "/usr/bin/systemctl start sshd" stop program "/usr/bin/systemctl stop sshd" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
# Monitor MySQL check process mysql with pidfile /var/run/mysqld/mysqld.pid group database start program = "/usr/bin/systemctl start mysqld" stop program = "/usr/bin/systemctl stop mysqld" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout
# Monitor the apache webserver check process apache with pidfile /var/run/httpd/httpd.pid group www start program = "/usr/bin/systemctl start httpd" stop program = "/usr/bin/systemctl stop httpd" if failed host localhost port 80 protocol http and request "/monit_token" then restart if cpu is greater than 60% for 2 cycles then alert if cpu > 80% for 5 cycles then restart if totalmem > 500 MB for 5 cycles then restart if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles then stop if 3 restarts within 5 cycles then timeout
# Monitor postfix mailserver check process postfix with pidfile /var/spool/postfix/pid/master.pid group mail start program = "/usr/bin/systemctl start postfix" stop program = "/usr/bin/systemctl stop postfix" if failed port 25 protocol smtp then restart if 5 restarts within 5 cycles then timeout
(Ujistěte se prosím, že kontrolujete pouze procesy, které skutečně existují na vašem serveru – jinak se monit nespustí. To znamená, že když řeknete monitu, aby zkontroloval Postfix, ale Postfix není v systému nainstalován, monit se nespustí.)
Konfigurační soubor je docela samovysvětlující; pokud si nejste jisti některou možností, podívejte se na dokumentaci monit:http://mmonit.com/monit/documentation/monit.html
V části Apache konfigurace Monit najdete toto:
if failed host localhost port 80 protocol http and request "/monit_token" then restart
což znamená, že monit se pokusí připojit k localhostu na portu 80 a pokusí se získat přístup k souboru /monit_token, což je /var/www/html/monit_token, protože kořen dokumentu našeho webu je /var/www/html. Pokud Monit neuspěje, znamená to, že Apache neběží a Monit jej restartuje. Nyní musíme vytvořit soubor /var/www/html/monit_token a napsat do něj nějaký náhodný řetězec:
touch /var/www/html/monit_token
Dále vytvoříme pem cert (/var/certs/monit.pem), který potřebujeme pro webové rozhraní Monit šifrované SSL:
mkdir /var/certs
cd /var/certs
K vytvoření našeho certifikátu potřebujeme konfigurační soubor OpenSSL. Může to vypadat takto:
nano /var/certs/monit.cnf
# create RSA certs - Server RANDFILE = ./openssl.rnd [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type [ req_dn ] countryName = Country Name (2 letter code) countryName_default = MO stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Monitoria localityName = Locality Name (eg, city) localityName_default = Monittown organizationName = Organization Name (eg, company) organizationName_default = Monit Inc. organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Dept. of Monitoring Technologies commonName = Common Name (FQDN of your server) commonName_default = server.monit.mo emailAddress = Email Address emailAddress_default = [email protected] [ cert_type ] nsCertType = server
Nyní vytvoříme certifikát takto:
openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
openssl gendh 512 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 700 /var/certs/monit.pem
Konečně můžeme začít monit:
systemctl restart monit
Nyní nasměrujte svůj prohlížeč na https://www.example.com:2812/ (ujistěte se, že port 2812 není blokován vaším firewallem), přihlaste se pomocí admin a otestujte a měli byste vidět webové rozhraní Monit. Mělo by to vypadat takto:
(Hlavní obrazovka)
(Stránka stavu Apache)
V závislosti na vaší konfiguraci v /etc/monit.d/monitrc Monit restartuje vaše služby, pokud selžou, a odešle e-maily s upozorněním, pokud se změní ID procesů služeb atd.
6 odkazů
- munin:http://munin.projects.linpro.no
- monit:http://mmonit.com/monit
- CentOS:http://www.centos.org