Fa aproximadament un any de la posada en producció del nostre servidor de monitorització que utilitza el software Icinga2. Fins llavors la monitorització de sistemes s'havia fet utilitzant Nagios. La valoració que en fem és positiva. A grans trets, els beneficis que n'hem pogut obtenir serien els següents:
- Augment del nivell d'automatització
- Simplificació de la gestió de hosts i serveis
- Augment del nombre i tipologia de hosts i serveis monitoritzats.
Actualment estem monitoritzant 149 hosts i 741 serveis. Entre la tipologia de hosts s'hi inclouen servidors físics, servidors virtuals, virtualitzadores, contenidors docker, switchs de xarxa i SAIs.
L'arquitectura del servei es pot dividir en 3 parts diferenciades: la monitorització, la visualització i la gestió.
Monitorització: Icinga 2
De tot el potencial que ofereix Icinga2, nosaltres utilitzem els següents moduls: api, checker, ido-mysql, mainlog i notification. Per fer la monitorització, en molts casos cal instal·lar l'agent de Icinga al client, que es comunica de forma segura amb el servidor utilitzant JSON-RPC amb TLS per sobre. També suporta altres formes de comunicació, com per exemple via SNMP, que utilitzem per comunicar-nos amb els Switchs de xarxa. És interessant destacar la comunicació amb les virtualitzadores de VMware utilitzant només una connexió al vcenter.
Visualització: Icinga Web 2
https://icinga.com/docs/icingaweb2/latest/
Es tracta d'una interficie escrita en PHP que es comunica amb Icinga2 . Disposa d'una estructura modular que permet anar incorporant funcionalitats. El mòdul bàsic és el de monitorització, que fa la visualització de les dades via web. Permet configurar l'accés a l'aplicació utilitzant usuaris, grups i rols.
L'aplicació proporciona diferents vistes que permeten detectar els problemes i visualitzar l'estar dels serveis de forma fàcil
Gestió: Director
https://github.com/Icinga/icingaweb2-module-director
Es tracta d'un modul que s'afegeix a la interficie Icinga-web que permet configurar la monitorització i les notificacions de forma gràfica a través del navegador. Per nosaltres aquesta eina és clau, ja que permet permet planificar la monitorització i posar-la en pràctica sense tenir coneixements de la configuració de Icinga2 a nivell de fitxers.
Estratègia de configuració de la monitorització
Per la nostra estratègia hem considerat que farem 3 tipus de checks:
- Checks que s'apliquen directament sobre el host per saber si està funcionant (alive) (153 checks)
- Checks de serveis que s'apliquen seguint unes regles (Service apply rules) (709 checks)
- Checks que es programen explicitament per un servei d'un host (Single services) (44 checks)
L'objectiu és maximitzar els checks de tipus 2 i minimitzar els de tipus 3, ja que requereixen ser mantinguts d'un en un.
Per configurar el nostre servidor hem utilitzat els següents tipus d'objectes que ens ofereix Icinga:
- Host template: plantilla que ens permet parametritzar un host utilitzant variables.
- Host: instància amb les dades específiques d'un host.
- Host group: agrupació de hosts que pot ser fet a mà o automaticament configurant regles.
- Single service: servei que es comprova explicitament sobre un host.
- Service apply rules: regles que fan que es crei una instància de servei sobre els hosts que cumpleixen unes regles.
- Service templates: plantilla que ens permet parametritzar el check d'un servei.
- Command: comandes per fer els checks que es configuren explicitament.
- External command: comandes predefinides que ofereix Icinga2.
- Notification: regles que s'apliquen per generar notificacions.
- Notification template: plantilla de comportament per quan s'ha de fer una notificació.
Cada cop que tenim un element nou per monitoritzar cal crear un Host, que ha d'heredar d'una Host template. En el nostre cas hem configurat 2 Host templates: server_template (per servidors, físics, servidors virtuals, virtualitzadores, i altres) i switch_template (per elements de xarxa). A cada template hi assignem un conjunt de variables per poder parametritzar el host. Una propietat interessant d'aquestes variables és que poden tenir dependències i, per tant, només es mostren si una altra variable té un valor determinat. Les variables poden ser de diferents tipus: enters, strings, llistes, etc. Aquestes són algunes de les variables que utilitzem per la server_template:
- Operating system (selecció tancada)
- Server type (selecció tancada)
- Ping Time critical (enter)
- Check CPU? (yes/no)
- Check disk? (yes/no)
- Web server? (yes/no)
- HTTPS sites (depen de si Web Server? = yes, és una llista de valors)
- Ubicació virtual (depen de si Server type = virtual, és una selecció tancada)
Les agrupacions de hosts en Host groups es poden fer manualment seleccionant els valors de la llista de hosts o bé es poden fer automàticament utilitzant les variables dels servidors. Per exemple el grup Linux servers el componen tots els hosts que tenen el valor de la variable Operating system = Linux.
Els serveis s'estructuren de forma similar als hosts. Quan es crea un servei cal que heredi d'una Service template, que és on es defineix el Command que executarà el check i on també es defineixen un conjunt de variables que serviran per parametritzar cada instància del servei. Quan creem un Single Service seleccionem el host on s'aplicarà el check i el service template que utilitzarà, posant els valors concrets per aquell servei. En canvi, si creem una Service apply rule definim una regla per seleccionar el grup de hosts sobre la que s'aplicarà el check, i també definim d'on s'agafaran els valors concrets de cada variable per generar cada instància de servei (recordem que cal indicar els valors que hem definit a la service template). En la regla es pot definir que per les variables multivalor es crei un servei per cadascun d'ells. Per exemple, si tenim un host amb una variable multivalor com HTTPS hosts en que hi ha les webs hostatjades en aquell host, podem definir una regla que per cadascun dels hosts que siguin servidor web (identificats per la variable Web server?) es crei un servei de check de la web per cadascun dels HTTPS hosts que s'hagin definit en el servidor.
En general l'objectiu és definir serveis amb regles generals i fer que els paràmetres concrets de cada check resideixin en el host.
Pel que fa a les notificacions no hem fet gaires distincions i ho notifiquem gairebé tot per igual. Funciona amb la mateixa filosofia que hosts i services. Hem definit una Notification template per hosts i una per services, que apliquem a totes les màquines i serveis respectivament.
Programació de checks
Una de les funcionalitats que hem aprofitat, i que amb Nagios també teniem, és la possibilitat de programar els nostres propis checks, ja sigui perquè amb els checks estàndar no cubriem les nostres necessitats o perquè voliem que el check es comportés d'una forma diferent a la normal. Per exemple hem programat els checks de les actualitzacions de sistema tan per windows com per linux, o també hem programat un check per comprovar l'estat dels nodes d'un cluster de càlcul.
Alertes
Tenim 3 vies per fer el seguiment de les alertes:
- Accés a Icinga web. Cal anar explicitament a mirar si hi ha cap alerta.
- Client d'escriptori. En el nostre cas utilitzem Nagstamon. Emet avisos visuals i sonors quan hi ha una alerta.
- Avisos per correu. Hem programat que es facin notificacions de les alertes més crítiques via correu electrònic.
Procés de migració de NAGIOS a ICINGA2
Per preparar la migració vam fer una anàlisi dels checks que s'estaven fent amb NAGIOS per identificar els tipus de hosts i de servei. Un cop definida l'estratègia de monitorització per Icinga2 vam posar-lo en marxa per anar monitoritzant al mateix temps que Nagios. Les màquines que tenien agent nagios no van tenir cap problema per conviure amb l'agent de icinga.
Amb els dos sistemes en marxa es tractava d'anar comprovant que Icinga2 mostrava les mateixes alertes que Nagios. Un cop fetes totes les comprovacions es va poder tancar Nagios.
Futures Millores
De cara a treure millor rendiment a la informació que ens ofereix Icinga2 planegem aquestes millores en un futur:
- Integració d'Icinga en un sistema de Logs global
- Accés als valors de monitorització a través de la API de Icinga per poder extreure informació i mostrar-la online a la web.

