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.