Provozovaný systém

Cílem naší práce je monitoring provozu jednoduché webové aplikace pomocí chatbota JSONBOTa, který poslouchá na UDP portu, na který monitorovací systém emituje Události. Pokud je služba v nežádoucím stavu, dojde k selhání kontroly - znikne Událost a ta se odešle danými kanály dál (mimo jiné i na UDP port našeho robota). Jakou Činnost má robot vykonat pro vyřešení dané Událostí zjistí dotazem do grafové databáze, která obsahuje model monitorovaného systému. Robot poté odešle požadavek na provedení Činnosti do řídícího systému Salt, který pak Činnost vykoná na cílovém serveru. Pokud tato Činnost problém vyřeší, monitorovací systém přestane Událost dále emitovat. Pokud Událost přetrvává, robot kontaktuje lidskou obsluhu.

Apache web server

Apache HTTP server je softwarový webový server s otevřeným kódem pro Linux, BSD, Solaris, a další platformy. Apache podporuje velké množství funkcí, mnoho z nich je implementováno jako kompilované moduly rozšiřující jádro. Mohou to být funkce podpory programovacích jazyků na straně serveru nebo různá autentizační schémeta. Příkladem podporovaných programovacích jazyků je Perl, Python, nebo PHP. Autentizační schémata jako například mod_access, mod_auth, mod_digest, a mod_auth_digest.
Apache dále obsahuje externí modul pro kompresi dat webových stránek posílaných protokolem HTTP (mod_gzip), open source modul pro ochranu a prevenci webových aplikací před napadením (mod_security). Virtuální hosting je funkce dovolující jedné instalaci Apache na jednom fyzickém počítači obsluhovat více webových stránek.
Přestože hlavním cílem Apache není být „nejrychlejším“ webovým serverem, jeho výkon se může srovnávat s ostatními výkonnými webovými servery. Místo implementování jedné architektury, Apache poskytuje mnoho tzv. MultiProcessing modulů (MPM) což mu dovoluje přizpůsobit se potřebám systému na kterém běží. Z toho vyplývá, že výkon je hodně závislý na zvolených MPM a konkrétním nastavení. Tam, kde je nutné udělat kompromis ve výkonu, Apache je navrženo tak, aby latence byla co nejnižší a propustnost co nejvyšší, vzhledem k obsluze více požadavků, tedy zajistit konzistentní a spolehlivé obsloužení požadavků v co nejkratším časovém rámci.

Python/Django aplikace

Django je open source webový aplikační framework napsaný v Pythonu, který se volně drží architektury Model-view-controller. Původně bylo navrženo pro správu několika zpravodajsky orientovaných stránek společnosti The World Company v Lawrenci v Kansasu, později, v červnu 2005, bylo vydáno veřejně pod open-sourceovou licencí BSD. Framework byl pojmenován po jazzovém kytaristovi Django Reinhardtovi.
Je dalším z řady webových frameworků, jako je např. Ruby on Rails. Oproti Ruby on Rails však nabízí zajímavou možnost automatické tvorby administrace projektu, která je generována dynamicky podle datového modelu.
Hlavní úkol Djanga je snadné vytvoření komplexních, databází řízených webových aplikací. Zaměřuje se na znovupoužitelnosti a připojitelnosti všech komponent, rychlý vývoj a především na koncept „DRY“ (Don’t Repeat Yourself) – neopakovat se.

PostgreSQL databáze

PostgreSQL je plnohodnotným relačním databázovým systémem s otevřeným zdrojovým kódem. Má za sebou více než patnáct let aktivního vývoje a má vynikající pověst pro svou spolehlivost a bezpečnost. Běží nativně na všech rozšířených operačních systémech včetně Linuxu, UNIXů a Windows. Stoprocentně splňuje podmínky ACID, plně podporuje cizí klíče, operace JOIN, pohledy, spouště a uložené procedury. Obsahuje většinu SQL92 a SQL99 datových typů. Vývojáři PostgreSQL se snaží o respektování a implementaci standardu ANSI SQL - k dispozici vlastnosti popsané v ANSI/SQL 200x (např. rekurzivní a analytické dotazy). Výkonnostně nezaostává za srovnatelnými komerčními systémy a v častokrát je i předčí.
Předností systému PostgreSQL je rozšiřitelnost. Systém může být bezproblémově rozšiřován o nové datové typy, funkce operátory, agregační funkce, procedurální jazyky. Díky tomu mohly vzniknout následující rozšíření: PostGIS - podpora pro geografické informační systémy, Slony-I - master to multiple slaves replikace. Za vývojem PostgreSQL stojí skupina nezávislých vývojářů a uživatelů, ke které se kdokoliv může připojit. A to přihlášením do diskusního fóra a následnou participací na projektu: patche, podporou uživatelů, psaním a překladem dokumentace atd. 

Memcached cache

Memcachced je jednoduchý daemon, který má alokované nastavené množství  paměti, do níž mohou aplikace ukládat libovolná data. Ty pak jsou  k dispozici velmi rychle a navíc mohou být být sdílena například mezi  mnoha procesy jedné aplikace. když paměť dojde, začnou se odmazávat  staré záznamy. Kromě toho lze záznamu nastavit čas expirace, po kterém  již není platný.
Memcached je univerzální nástroj, jenž umí ukládat nejrůznější data, ale  velmi často se používá hlavně v kombinaci s webovými aplikacemi. Jeho  podporu najdeme ve všech populárních webových frameworcích nebo web  serverech. Nejsme proto omezeni způsobem, jakým se rozhodneme komunikaci  zrychlit.

Prvky řídícího systému

Sensu monitoring

Sensu je open source cloudový monitorovací framework. Poskytuje základy pro monitoring cloudové infrastruktury a aplikací. Framework obsahuje monitorovací server, na platformě nezávislé agenty a webové API. Sensu sám o sobě umí jen rozpoznat změnu stavu zařízení nebo služby, ale nemá prostředky k samotnému zjištění této události. Proto je potřeba ho rozšířit o pluginy, s jejichž pomocí může vykonávat monitorovací činnost. V našem případě jsou to pluginy Nagios a Sensu komunitní pluginy.

Nagios pluginy

Nagios pluginy jsou samostatné rozšíření monitorovacího systému Nagios.  Pluginy pracují jako samostatné aplikace a zpracovávají argumenty příkazového řádku. Provádějí hlavně specifické typy kontrol,  jejichž výsledky vracejí pro následné zpracování. Pluginy existují ve formě spustitelných souborů (napsaných v jazyce C, C++, atd.) nebo ve formě spustitelných skriptů (shell,  Perl, PHP, atd.).

Sensu komunitní pluginy

GitHub repozitář sensu-community-plugins obsahuje řadu pluginů pro Sensu. Většina z nich je implementována v Ruby s vyžitím sensu-plugin frameworku. Některé jsou pouze shellové skripty.

Řídící a konfigurační systém Salt

Salt je opensource nástroj pro správu infrastruktury serverů a služeb. Jedná se o velmi jednoduchý nástroj, který zprovozníte během pár minut a který je tak rychlý, že dokáže najednou spravovat desítky tisíc serverů (a dostat odezvu během několika sekund). Salt je schopný provádět libovolné příkazy shellu nebo vám umožní vybrat z desítek přednastavených modulů běžných (ale i složitých) příkazů. Umožňuje zaměřit individuální servery podle jména, definovaných rolí nebo podle různých systémových informací jako jsou: software, hardware, operační systém, atuální prostředí a mnoho dalších. Díky Saltu znáne kompletní konfigurací všech serverů, kterou nastavujeme pomocí jednoduchého seznamu služeb a definováním jejich vlastností.

Neo4j grafová databáze

Neo4j je plně vybavená grafová databáze, která bez problémů ukládá a načítá silně propojená data. Neo4j ukládá data do uzlů. Tyto uzly jsou propojeny směrovou vazbou s vlastnostmi na obou, tato konfigurace se nazývá Property Graph. Neo4j je intuitivní a používá grafický model pro reprezentaci dat. Neo4j je dobře škálovatelný, zvládne až několik miliard uzlů, vztahů a vlastností. Pro přístup k informacím se používá  přehledný graph query jazyk. Server je dostupný pomocí REST rozhraní.

 

Chatbot JSONBOT

JSONBOT je chatbot, který může přijímat příkazy a reagovat na události v síti, ke které je připojen (nejčastěji IRC, XMPP, WEB, UDP). JSONBOT poskytuje funci push (z RSS feedu do vašeho IRC kanálu nebo do XMPP konference). JSONBOT dovoluje naprogramovat si vlastní pluginy k vytvoření volitelných funkcí.

Popis řídícího systému

Terminologie prvků řídícího systému

  • Kontrola (check) - je prováděna konkrétním skriptem, který zjistí současný stav sledované služby
  • Událost (event) - vzniká, pokud se překročí nastavené prahy Kontroly, kdy stav služby již neodpovídá normě
  • Činnost (action) - reakce na Událost, která řeší nežádoucí stav služby

Kontroly služeb

check_procs Nagios plugin

Zkontroluje všechny procesy a generuje varování nebo kritické stavy, pokud je zadaná metrika mimo požadováný limit. Metrika je výchozí pro velký počet procesů. Pro omezení procesů určených pro kontrolu  můžeme použít vyhledávací filtry.
V našem případě kontrolujeme jednotlivé procesy

check_http Nagios plugin

Tento plugin testuje HTTP služby na daném serveru. Může testovat normální (HTTP) a zabezpečené  (HTTPS) servery, sledovat přesměrování, vyhledávat řetězce a regulární výrazy, kontrolovat časy připojení a hlásit časy vypršení certifikátů.

postgres-alive.rb Sensu Community Plugin

Tento plugin testuje přihlášení do postgresql databáze s poskytnutými údaji.

check-memcached-stats.rb Community Plugin

Check Memcached stats

Činnosti služeb

Salt modul service.restart

Restarts the named service.
Např.: service.restart <service name>

Salt modul state.sls

Execute a set list of state modules from an environment, default environment is base.
Např.: salt '*' state.sls postgresql.service

Salt modul state.highstate

Control the state system on the minion. Retrive the state data from the salt master for this minion and execute it.
Např.: service.restart <service name>

Propojení Kontrol a Činností sledovaných služeb

SlužbaKontrolaČinnost
apachecheck_procsservice.restart apache2
apachecheck_httpstate.sls apache.service
memcachedcheck_procsservice.restart memcached
memcachedcheck-memcached-stats.rbstate.sls memcached.service
postgresqlcheck_procsservice.restart postgresql-9.1
postgresqlpostgres-alive.rbstate.sls postgres