Icinga2 has built-in support for writing monitoring data to InfluxDB. This makes Icinga quite extensible as it allows for other programs to read the gathered data from InfluxDB. For example, Icinga does not have built-in graphing support. But monitoring data can be written to InfluxDB and then consumed by a dedicated graphing tool like Grafana.
Install Packages
Let's install a few necessary packages
apt install influxdb influxdb-client ssl-cert
Generate self-signed certificate
Now generate a self-signed certificate for accessing InfluxDB over TLS
make-ssl-cert generate-default-snakeoil
usermod -aG ssl-cert influxdb
Create Database and Users
Start and enable the InfluxDB service
systemctl enable --now influxdb
Now we'll create our database and users. We'll be creating 3 users with different access rights. An admin user with full control over the database, a user with write access that Icinga will use to write data to the database, and a read-only user to allow external programs to read data from the database.
influx -ssl -unsafeSsl -execute "create database icinga2; create user admin with password 'changeme'; create user icingauser with password 'changeme'; create user readonly with password 'changeme'; grant all to admin; grant write on icinga2 to icingauser; grant read on icinga2 to readonly;"
Configuration Files
Then write InfluxDB's configuration file at /etc/influxdb/influxdb.conf
reporting-enabled = false
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
wal-dir = "/var/lib/influxdb/wal"
[coordinator]
[retention]
[shard-precreation]
[monitor]
[http]
enabled = true
bind-address = ":8086"
auth-enabled = true
https-enabled = true
https-certificate = "/etc/ssl/certs/ssl-cert-snakeoil.pem"
https-private-key = "/etc/ssl/private/ssl-cert-snakeoil.key"
[ifql]
[logging]
[subscriber]
[[graphite]]
[[collectd]]
[[opentsdb]]
[[udp]]
[continuous_queries]
[tls]
min-version = "tls1.2"
And restart InfluxDB to pickup the changes
systemctl restart influxdb
Then we need to configure Icinga to write data to our database. Start by enabling the influxdb feature in Icinga
icinga2 feature enable influxdb
Now we tell Icinga how to write to our database. Open the configuration file at /etc/icinga2/features-available/influxdb.conf and replace with the following
object InfluxdbWriter \"influxdb\" {
host = "127.0.0.1"
port = 8086
username = "icingauser"
password = "icinga_password"
ssl_enable = true
database = "icinga2"
flush_threshold = 1024
flush_interval = 10s
host_template = {
measurement = "$host.check_command$"
tags = {
hostname = "$host.name$"
}
}
service_template = {
measurement = "$service.check_command$"
tags = {
hostname = "$host.name$"
service = "$service.name$"
}
}
}
And finally restart Icinga to make those changes live.
systemctl restart icinga2
Icinga2 will now be writing the data it collects to your InfluxDB instance.