Icinga2: Erste Schritt mit der API
Letzte Woche habe ich auf der Froscon 11 einen Vortrag zur dynamischen Anlage von Host und Service Informationen auf Icinga2 gehört. Im Gegensatz zu seinem Vorgänger Icinga/Nagios kann man in Icinga2 diese Informationen nicht nur in einer Konfigurationsdatei sondern auch über eine REST Api anlegen. Das “schreit” geradezu nach einer Integration mit meinen Ansible Konfiguration. Denn da ich ja meine Hosts in Ansible anlege und verwalte sollten dies natürlich auch die Basis für das Monitoring sein.
Aber bevor es in die intergalaktisch Automation geht war erst mal die Installation und der erste erfolgreiche API Aufruf zu bezwingen.
Die Basis Installation war recht einfach
Einbinden des Icinga Repositories und Installation der notwendigen Pakete
sudo vi /etc/apt/sources.list.d/icinga2.list
deb http://packages.icinga.org/debian icinga-jessie main
deb-src http://packages.icinga.org/debian icinga-jessie main
wget -O - http://packages.icinga.org/icinga.key | apt-key add -
sudo apt update && sudo apt upgrade
sudo apt install icinga2 icingaweb2 mysql-server icinga2-ido-mysql
Modul aktivieren? → Ja
Einrichten mit db-common? → Nein
Datenbank anlegen und die Strukturen aufbauen
mysql -u root -p
mysql> CREATE DATABASE icinga;
GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON icinga.* TO 'icingaadmin'@'localhost' IDENTIFIED BY 'geheim';
quit;
mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.
Icinga MySQL Schnittstelle mit Datenbanknutzer und -kennwort aktivieren
vi /etc/icinga2/features-available/ido-mysql.conf
icinga2 feature enable ido-mysql
systemctl restart icinga2
Für die Webinstallation braucht man noch ein Token nach dem gleich gefragt wird
sudo icingacli setup token create
The newly generated setup token is: f79xxxxxxxxxx
Zeitzone für PHP setzen
vi /etc/php5/apache2/php.ini
> Europe/Berlin.
service apache2 restart
Dann mit dem Browser auf die Admin Seite und der graphischen Installation folgen http://icinga2/icingaweb2/
Da wir gleich noch die API brauchen sind noch zwei Schritte notwendig.
API Setup
icinga2 api setupapi
Neuer API User einrichten
vi /etc/icinga2/conf.d/api-users
Ein schneller Test curl -k -s -u icinga-api:falsch ‘https://localhost:5665/v1’
<h1>Unauthorized</h1>root@falken-tv:~# curl -k -s -u icinga-api:richtig 'https://localhost:5665/v1'
<html><head><title>Icinga 2</title></head><h1>Hello from Icinga 2 (Version: r2.5.3-1)!</h1><p>You are authenticated as <b>icinga-api</b>. Your user has the following permissions:</p> <ul><li>*</li></ul><p>More information about API requests is available in the <a href="http://docs.icinga.org/icinga2/latest" target="_blank">documentation</a>.</p></html>root@falken-tv:~#
Und jetzt der eigentliche erste Test
curl -k -s -u icinga-api:geheim -H 'Accept: application/json' -X PUT 'https://icinga2:5665/v1/objects/hosts/googledns' -d '{ "attrs": { "address": "8.8.8.8", "check_command": "hostalive" } }'
{"results":[{"code":200.0,"status":"Object was created"}]}
Und schon taucht der Google DNS Server in meinem Dashboard auf.
Dann geht es jetzt weiter mit der “korrekten” Anlage von Server aus Ansible.