Last Updated on 09/07/2023 by administrator
Konfigurace Smokeping pro monitoring v Linuxu (Smokeping configuration)
Konfigurace Smokeping pro monitoring v Linuxu (Smokeping configuration)
Popis:
SmokePing je software pro monitorování síťové odezvy (latency), ztrátovosti (packetloss) a rozptylu zpoždění. Nabízí mnoho sond a pluginů pro monitorování nejrůznějších protokolů jako je SSH, Telnet, DNS, IPv6, LDAP, .. Tyto údaje zaznamenává vizuálně do grafů a umí varovat při výpadku služby. Konfigurace Smokeping není nějak náročná.
Demo s živými ukázkovými grafy lze nalézt zde: https://smokeping.oetiker.ch/?target=Customers.OP
OS:
Implementace byla prováděna na Ubuntu 18.04 LTS a Ubuntu 20.04 LTS, postup může být aplikovatelný na Ubuntu 17.10 a nižší.
Impementaci je možné provést u na Ubuntu 22.04 – nicméně je potřeba se řídit instrukcemi v závěru článku.
Implementace:
Instalace a konfigurace Smokeping:
Aktualizace seznamu balíčků z repozitářů:
sudo apt-get update
Instalace služby Smokeping. Automaticky se nainstalují i další závislosti na tomto balíčku (např: apache2, fping, echoping, ..):
sudo apt-get install smokeping
Potvrdíme „Internet Site“, díky kterému je možné použít protokol SMTP pro odesílání emailu při výpadku služby. To bude později ukázáno.
Dopsat doménové jméno. Např. pokud používám email uzivatel@example.org, mé doménové jméno bude example.org.
Smokeping vyžaduje instalaci webového serveru. V tomto případě bude nainstalován Apache web server:
apt-get install apache2
Po instalaci webového serveru apache povolit CGI modul. CGI (Common Gateway Interface) umožňuje spouštění externích programů (v případě SmokePing je to skript smokeping.cgi) na straně serveru. SmokePing využívá skript smokeping.cgi jako rozhraní mezi serverem a uživatelským rozhraním webového prohlížeče. Skript smokeping.cgi zpracovává požadavky na zobrazení grafů, tabulek a konfiguraci SmokePing.
a2enmod cgid
Zjistit IP adresu na které běží smokeping pomocí příkazu:
ip a
Do internetového prohlížeče zadat link níže, kde <IP> je IP adresa je adresou stanice/serveru na které běží Smokeping:
http://<IP>/cgi-bin/smokeping.cgi
Objeví se hlavní okno Smokeping webu:
Všechna síťová zařízení se definují v souboru Targets ve složce /etc/smokeping/config.d/:
sudo vim /etc/smokeping/config.d/Targets
Ukázka původní konfigurace s popisem:
+ Local # definice sekce "Local" menu = Local # sekce se jménem "Local" title = Local Network # nadpis sekce "Local" ++ LocalMachine # definice podsekce "LocalMachine" menu = Local Machine # popis sledovaného zařízení "LocalMachine" title = This host # popis grafu host = localhost # testování sebe samého (t.j. na IP 127.0.0.1)
Lépe je to ukázáno níže na obrázku, kde je graficky znázorněná sekce (+ Local) a podsekce (++ LocalMachine):
Jak lze vidět v podsekcích označené „++“ definujeme síťová zařízení. Sekce označená „+“ je zase nadmnožinou síťových zařízení.
a) Sonda pro testování ICMP (ping):
Budou přidány první dva testy na ICMP (ping) pro síťová zařízení např. router, který běží na IP adrese 192.168.0.1 a WiFi router běžící na 192.168.0.254. Tyto podsekce budou přidány do souboru Targets.
sudo vim /etc/smokeping/config.d/Targets
Pod celý config níže vložit:
++ Router menu = Router title = Router host = 192.168.0.1 #alerts = someloss ++ WiFirouter menu = WifiRouter title = WifiRouter host = 192.168.0.254 #alerts = someloss
Podobně lze přidávat další síťová zařízení.
Změna configu vyžaduje restart služby smokeping:
sudo service smokeping restart
Ověření služby Smokeping:
service smokeping status
Výpis příkazu service smokeping status:
● smokeping.service - LSB: Start or stop the smokeping latency logging system daemon Loaded: loaded (/etc/init.d/smokeping; generated) Active: active (running) since Wed 2019-06-19 17:15:03 CEST; 12min ago Docs: man:systemd-sysv-generator(8) Process: 694 ExecStart=/etc/init.d/smokeping start (code=exited, status=0/SUCCESS) Tasks: 4 (limit: 4662) CGroup: /system.slice/smokeping.service ├─888 /usr/bin/perl /usr/sbin/smokeping --config=/etc/smokeping/config ├─889 /usr/sbin/smokeping [FPing] ├─890 /usr/sbin/smokeping [EchoPingDNS] └─891 /usr/sbin/smokeping [EchoPingHttp]
Nyní se na localhost, router a wifi router zasílá co 5 min žádost protokolem ICMP. To je následně vykresleno v grafu níže. Na vykreslení první hodnoty v grafu je nutné si počkat minimálně 5 min:
Pozn. Jak bylo již zmíněno výše, vykreslení grafu není okamžité. Defaulně se posílá 20 „pingů“ každých 5 min. Případné změny lze nastavit v souboru Database v /etc/smokeping/config.d/.
b) Sonda pro testování HTTP:
Pro měření obousměrného zpoždění (RTT) na aplikační službu HTTP se využívá sonda (probe) EchoPingHttp. Tuto sondu je nutné definovat v souboru /etc/smokeping/config.d/Probes
sudo vim /etc/smokeping/config.d/Probes
Příklad konfigurace v souboru Probes:
+EchoPingHttp binary = /usr/bin/echoping ipversion = 4 port = 80 accept_redirects = yes
Legenda:
binary – typ sondy (probe) s definicí její absolutní cesty v linuxu
port – HTTP obvykle beží na portu 80
ipversion – verze IP protokolu, zde pro IPv4 protokol
accept_redirects – akceptuje stavové HTTP kódy 3xx přesměrování (redirections) jako obyčejné odpovědi
Bude přidána nová sekce WEBtest (+) pod kterou budou přidány dvě podsekce (++), kde bude sledována dostupnost na webové stránky google.com a seznam.cz protokolem HTTP. To bude zapsáno do souboru Targets:
Všechna síťová zařízení se definují v souboru Targets ve složce /etc/smokeping/config.d/:
sudo vim /etc/smokeping/config.d/Targets
A vložit nakonec souboru:
+ WEBtest menu = WEB Test title = WEB Testing ++ Google-com probe = EchoPingHttp menu = google.com title = HTTP ping to google.com host = google.com #alerts = someloss ++ Seznam-cz probe = EchoPingHttp menu = seznam.cz title = HTTP ping to seznam.cz host = seznam.cz #alerts = someloss
Restartovat službu smokeping:
sudo service smokeping restart
Nyní se na oba webové servery google.com a seznam.cz zasílá co 5 min žádost na portu 80. To je následně vykresleno v grafu níže. Na vykreslení první hodnoty v grafu je nutné si opět počkat minimálně 5 min:
Pozn. podle potřeby lze parametry port, ipversion, accept_redirects přepsat u každé podsekce zvlášt v /etc/smokeping/config.d/Targets.
Další info a možnostech nastavení sondy zde: https://oss.oetiker.ch/smokeping/probe/EchoPingHttp.en.html
c) Sonda pro testování HTTPS:
Pro měření obousměrného zpoždění (RTT) na aplikační službu HTTPS se využívá sonda (probe) EchoPingHttps. Tuto sondu je nutné definovat v souboru /etc/smokeping/config.d/Probes
sudo vim /etc/smokeping/config.d/Probes
Příklad konfigurace v souboru Probes:
+EchoPingHttps binary = /usr/bin/echoping forks = 5 accept_redirects = yes ipversion = 4 pings = 5 port = 443 url = /
Legenda:
forks – maximální počet souběžných procesů
Bude použita stejná sekce WEBtest (+) kde budou upravanz dvě podsekce (++), kde bude sledována dostupnost na webové stránky google.com a seznam.cz protokolem HTTPS.
Všechna síťová zařízení se definují v souboru Targets ve složce /etc/smokeping/config.d/:
sudo vim /etc/smokeping/config.d/Targets
Boldem označené řádky, které byly změněny:
+ WEBtest menu = WEB Test title = WEB Testing ++ Google-com probe = EchoPingHttps menu = google.com title = HTTPs ping to google.com host = google.com #alerts = someloss ++ Seznam-cz probe = EchoPingHttps menu = seznam.cz title = HTTPs ping to seznam.cz host = seznam.cz #alerts = someloss
Restartovat službu smokeping:
sudo service smokeping restart
Nyní se na oba webové servery google.com a seznam.cz zasílá co 5 min žádost na portu 443. To je následně vykresleno v grafu níže. Na vykreslení první hodnoty v grafu je nutné si opět počkat minimálně 5 min:
Pozn. opět podle potřeby lze parametry port, ipversion, accept_redirects přepsat u každé podsekce zvlášt v/etc/smokeping/config.d/Targets.
Další info a možnostech nastavení sondy zde: https://oss.oetiker.ch/smokeping/probe/EchoPingHttps.en.html
d) Sonda pro testování DNS:
Pro test rychlosti překladu s obousměrným zpožděním na DNS servery je možné použít program dig jako sondu. Jako doménové jméno pro tento test rychlosti překladu bude zvoleno seznam.cz. Toto se definuje v opět v /etc/smokeping/config.d/Probes
sudo vim /etc/smokeping/config.d/Probes
Příklad konfigurace v souboru Probes:
+ DNS binary = /usr/bin/dig lookup = seznam.cz
Legenda:
binary – typ sondy (probe) s definicí její absolutní cesty v linuxu
lookup – definice doménového jména (to které se má DNS servery „resolvovat“)
Bude přidána opět nová sekce DNStest (+) pod kterou budou přidány dvě podsekce (++) na veřejné Google DNS servery 8.8.8.8 a 8.8.4.4. To bude zapsáno do souboru Targets:
sudo vim /etc/smokeping/config.d/Targets
A vložit nakonec souboru:
+ DNStest menu = DNS Test title = DNS Testing ++ Public-Google1 probe = DNS menu = 8.8.8.8 title = Google DNS Public 1 - 8.8.8.8 host = 8.8.8.8 #alerts = someloss ++ Public-Google2 probe = DNS menu = 8.8.4.4 title = Google DNS Public 2 - 8.8.4.4 host = 8.8.4.4 #alerts = someloss
Nyní se na oba veřejné Google DNS servery 8.8.8.8 a 8.8.4.4 zasílá co 5 min žádost o překlad doménového jména seznam.cz. To je následně vykresleno v grafu níže. Na vykreslení první hodnoty v grafu je nutné si opět počkat minimálně 5 min:
Pozn. podle potřeby lze parametr lookup přepsat u každé podsekce zvlášť v/etc/smokeping/config.d/Targets.
Další info a možnostech nastavení sondy zde: https://oss.oetiker.ch/smokeping/probe/DNS.en.html
Mnoho dalších sond lze najít zde: https://oss.oetiker.ch/smokeping/probe/index.en.html
Notifikace přes Email:
Při výpadku síťového zařízení či služby je možné nastavit oznámení zasílání emailem. K tomu je potřebný balíček sendmail:
apt-get install sendmail
Ověřit zda služba sendmail běží:
service sendmail status
Konfigurační soubor sendmail je umístěný v /etc/mail/sendmail.conf, nicméně nemusí se upravovat.
V souboru Targets odkomentovat alerts = someloss
sudo vim /etc/smokeping/config.d/Targets
++ WiFirouter menu = WifiRouter title = WifiRouter host = 192.168.0.254 alerts = someloss
Nastavení zasílání emailů se provede v souboru Alerts.
sudo vim /etc/smokeping/config.d/Alerts
Doporučuji vymazat původní konfiguraci a konfiguraci níže překopírovat a upravit podle sebe. Přepsat parametr „to“ na skutečnou emailovou adrese příjemce a parametr „from“ na původce zprávy:
*** Alerts *** to = jmeno@seznam.cz, jmeno@centrum.cz from = smokeping@martinuvzivot.cz +someloss type = loss # in percent pattern = >5% edgetrigger = yes comment = Packet loss for 5 mins
someloss – označení alertu (to je ten „alert“, který byl odkomentován v souboru Targets)
type – existují základní dva typy – loss (pro packetloss) a rtt (pro síťovou odezvu)
pattern = >5% – Pokud vznikne packetloss více než 5-ti procentní, odešle se email
edgetrigger – pokud bude nastaven na „yes“, email se zašle při výpadku a při znovunačtení/obnovení výpadku
Dále v souboru General přepsat some.url na řádku cgiurl = http://some.url/smokeping.cgi, což definuje doménové jméno nebo IP adresu na které běží Smokeping. Příklad konfigurace, kde smokeping běží na IP adrese 192.168.88.15:
vim /etc/smokeping/config.d/General
Částečný výpis souboru General:
cgiurl = http://192.168.88.15/cgi-bin/smokeping.cgi
Restartovat službu smokeping:
sudo service smokeping restart
Konfigurace Smokepingje hotova!
TIP – Jak zkrátit URL:
Jelikož URL název „192.168.88.15/cgi-bin/smokeping.cgi“ je příliš dlouhý, je tady tip jak přesměrovat 192.168.88.15 na 192.168.88.15/cgi-bin/smokeping.cgi aby se nemusela zadávat do prohlížeče tato celá URL adresa:
Otevřít soubor .htaccess ve složce /var/www/html/:
sudo vi /var/www/html/.htaccess
Vložit kód níže:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^/cgi-bin/smokeping.cgi RewriteRule ^$ /cgi-bin/smokeping.cgi [L]
Otevřít soubor 000-default.conf ve složce /etc/apache2/sites-available/:
vi /etc/apache2/sites-available/000-default.conf
Přidat pod <VirtualHost *:80> vložit tučně vyznačený kód níže. Ve výsledku to bude vypadat takto:
<VirtualHost *:80> ... <Directory /var/www/html> AllowOverride All </Directory> ... </VirtualHost>
Povolit modul mod_rewrite pro Apache2. Modul mod_rewrite je zodpovědný za přesměrování URL a řízení přepisování URL v Apache:
sudo a2enmod rewrite
Provést restart Apache2:
service apache2 restart
Hotovo!