How to Install Icinga2 on RHEL, Rocky and AlmaLinux

Icinga2 is a feature-rich open-source network monitoring and alerting application that is a fork of the Nagios monitoring tool.

It was built to address the shortcomings of Nagios and introduce new features such as an improved and modern user interface, a REST API for integrating new extensions without the need for making changes to the Icinga core, and additional database connectors.

Icinga2 monitors the availability of hosts as well as services. Some of these services include SNMP, HTTP, HTTPS, and SSH. It also monitors network devices such as routers and switches.

Icinga also gathers metrics and generates logs to give you a complete picture of your network infrastructure. The logs and metrics are then visualized on dashboards to put everything into a better context.

In this article, we showcase how to install the Icinga2 monitoring application on RHEL, Rocky Linux, and AlmaLinux.


As a requirement for installing Icinga2, you need to have the LAMP stack installed. A little caution here – Icinga2 requires PHP 7.3 and later versions for installation.

We already have a tutorial on how to install LAMP on RHEL 8 – Use this article to install the Apache webserver and MariaDB database server only since the instructions focus on installing PHP 7.2 which is not supported by Icinga2.

In the first step of this guide, we will walk you through the process of installing PHP 7.4 and the required modules.

Step 1: Install PHP and PHP Modules

With Apache and MariaDB installed, Let’s go ahead and install PHP 7.4. If you have PHP 7.2 and later versions installed, remove it by running:

$ sudo dnf remove php

Next, reset the current PHP module on the system.

$ sudo dnf module reset php
Reset PHP Module
Reset PHP Module

After that, list the available PHP versions as shown.

$ sudo dnf module list php

Then enable PHP 7.4.

$ sudo dnf module enable php:7.4

Once the PHP 7.4 module has been enabled, Install PHP and the required PHP extensions.

$ sudo dnf install php-gd php-mbstring php-mysqlnd php-curl php-devel php-pear php-xml php-cli php-soap php-intl php-json php-ldap php-xmlrpc php-zip php-json php-common php-opcache php-gmp php-pgsql make -y

Icinga2 also requires the php-imagick extension. However, this cannot be installed conventionally as we did with the other PHP modules.

To install the extension, run the following commands:

$ dnf install -y ImageMagick ImageMagick-devel
$ sudo pecl install imagick

Then switch to the root user and append the extensions to the PHP.INI file.

$ su -
$ echo "" > /etc/php.d/20-imagick.ini

To apply the changes, restart the Apache webserver.

$ sudo systemctl restart httpd

Step 2: Install Icinga2 in RHEL 8

To install Icinga2, we need to add the Icinga repository since Icinga2 is not hosted on the AppStream repositories.

To do so, first, enable the EPEL repository.

$ sudo dnf -y install

Next, enable the GPG signing key.

$ sudo rpm --import

Next, create a repository file in the /etc/yum.repos.d directory.

$ sudo vim  /etc/yum.repos.d/icinga2.repo

Paste the following block of code

name=Icinga 2 Repository for EPEL 8

Save and exit the repository file. Then update the cache packages,

$ sudo dnf makecache

With the repository added, install the Icinga2 package and other associated Icinga2 packages.

$ sudo dnf install icinga2 icinga2-ido-mysql icinga2-selinux  vim-icinga2 -y
Install Icinga2 in RHEL
Install Icinga2 in RHEL

Next, install Nagios plugins that will be used in monitoring both physical and virtual hosts.

$ sudo dnf install nagios-plugins-all -y

Next, enable the Icinga2 ido-mysql module and other features.

$ sudo icinga2 feature enable ido-mysql syslog command

Then restart Icinga for the changes to be applied.

$ sudo systemctl restart icinga2

Step 3: Create a Database for Icinga-IDO MySQL Module

The icinga2-IDO (Icinga Data Output) mysql feature is a backend feature that collates and exports all configuration and status information into a database. For this reason, we need to create a database for the Icinga2-ido-mysql feature.

So, log in to the MySQL database server:

$ sudo mysql -u root -p

Create a database as well as a database user for Icinga2. Then grant all privileges on the database user to the Icinga2 database.

> GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2_user'@'localhost' IDENTIFIED BY 'P@ssword321';

Apply the changes and exit the database server.


Next, import the database schema as follows. You will be prompted for a password upon which you should provide the database password.

$ sudo mysql -u root -p icinga2 < /usr/share/icinga2-ido-mysql/schema/mysql.sql

Moving on, edit the ido-mysql configuration file.

$ sudo vim /etc/icinga2/features-available/ido-mysql.conf

Uncomment the database block and specify the database details.

Configure Icinga2 MySQL Module
Configure Icinga2 MySQL Module

Save and exit.

Next, start and enable Icinga2.

$ sudo systemctl start icinga2
$ sudo systemctl enable icinga2

Then verify the status of Icinga2 as shown.

$ sudo systemctl status icinga2

From the output below, it’s clear that Icinga is up and running as expected.

Check Icinga2 Status
Check Icinga2 Status

Step 4: Install IcingaWeb2 on RHEL 8

IcingaWeb2 is an open-source web-based monitoring tool that also incorporates a command-line interface. It supports all the backend Icinga features such as Icinga-ido-mysql, Icinga core, Icinga2, and other modules.

To install IcingaWeb2, install PowerTools using the following command.

$ sudo dnf install 'dnf-command(config-manager)'
$ sudo dnf config-manager --set-enabled powertools

Once the installation is complete, install IcingaWeb2 and the CLI as shown.

$ sudo dnf install icingaweb2 icingacli
Install IcingaWeb2 in RHEL
Install IcingaWeb2 in RHEL

Step 5: Create a Database for IcingaWeb2

Just as we created a database schema for the Icinga2-IDO-mysql feature, we also need to create a second schema for Icinga Web2.

So, once again, log in to the database server.

$ sudo mysql -u root -p

Create a database and database user for IcingaWeb2 then grant all the permissions to the database user on the Icinga Web2 database.

> CREATE DATABASE icingaweb2;
> GRANT ALL ON icingaweb2.* TO icingaweb2@localhost IDENTIFIED BY 'P@ssword321';

Save the changes and exit.


When Icinga2 was installed, a new configuration file for Icinga2 was created. You can view it as shown.

$ cat /etc/httpd/conf.d/icingaweb2.conf

You need to restart the Apache webserver for the changes to kick in.

$ sudo systemctl restart httpd

Additionally, you also need to set SELinux mode to ‘permissive’ as follows.

$ sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

Step 6: Complete Icinga2 Setup from Browser

The step in the installation of Icinga2 is the creation of a setup token, which is a unique code that will be used for authentication on the first step when setting up Icinga2 on a browser.

To generate a secret token, run the command:

$ sudo icingacli setup token create
Create Icinga2 Token
Create Icinga2 Token

Copy and keep the setup token safe. If in the event you lose the token, you can retrieve it by running the command:

$ sudo icingacli setup token show

At this point in this guide, all the configurations are in check. What remains is to complete the installation from a web browser. To do this, browse the URL shown


On the welcome page, paste the setup token that you generated earlier.

Icinga2 Setup Token
Icinga2 Setup Token

Once you have pasted the token, click ‘Next’ to continue. This takes you to the ‘Modules’ page. This provides an overview of all the modules that you can enable. By default, the ‘monitoring’ module is enabled.

Enable your preferred modules and scroll down and click ‘Next’ to continue.

Icinga2 Modules
Icinga2 Modules

In this section, ensure that all the PHP prerequisites have been satisfied, which includes PHP modules, libraries, and directories. If all looks good, scroll down and click ‘Next’.

Icinga2 PHP Checks
Icinga2 PHP Checks

On the ‘Authentication’ page, leave everything as it is and click ‘Next’.

Icinga2 Authentication
Icinga2 Authentication

In the ‘Database Resource’ section, fill in the database details for IcingaWeb2 as specified in Step 5.

Icinga2 Database Settings
Icinga2 Database Settings

To confirm the database details are correct, scroll all the way down and click ‘Validate Configuration’.

Icinga2 Database Validation
Icinga2 Database Validation

If all goes well, you should get a notification that the configuration was successfully validated.

Icinga2 Database Validated
Icinga2 Database Validated

To head over to the next step, scroll down and click ‘Next’. For ‘Authentication Backend’ simply click ‘Next’ to accept the defaults.

Icinga2 Authentication Backend
Icinga2 Authentication Backend

In the next step, create an Admin user that will be used to access and log into the Icinga2 web interface.

Icinga2 Admin User
Icinga2 Admin User

For the ‘Application monitoring’ section, accept the defaults and click ‘Next’.

Icinga2 Application Monitoring
Icinga2 Application Monitoring

Review all the changes that you have made so far along the way. If all looks good, click ‘Next’ and if you feel to make any changes, click ‘back’ and make the required changes.

Icinga2 Configuration Review
Icinga2 Configuration Review

The next section is the configuration of the monitoring module for IcingaWeb2. This is the core module for Icinga Web 2 that offers status and reporting views with robust filter capabilities for tracking crucial events.

Click ‘Next’ to continue.

Icinga2 Monitoring Module
Icinga2 Monitoring Module

In the next step, fill out the form with the database details for the Icinga2-ido-mysql feature as specified in Step 3.

Icinga2 MySQL Module
Icinga2 MySQL Module

To validate the configuration, scroll down and click ‘Validate configuration’.

Icinga2 MySQL Module Validation
Icinga2 MySQL Module Validation

You will get the notification that the configuration was successfully validated.

Icinga2 MySQL Module Validated
Icinga2 MySQL Module Validated

To proceed to the next step, scroll down and click ‘Next’. For ‘Command Transport’, use ‘Local Command File’ as the transport type and click ‘Next’.

Icinga2 Command Transport
Icinga2 Command Transport

In the ‘Monitoring Security’ section, click ‘Next’.

Icinga2 Monitoring Security
Icinga2 Monitoring Security

Once again, review all the configurations for the Icinga2 monitoring module. If all looks good, click ‘Finish’ otherwise head back and make the necessary changes.

Icinga2 Monitoring Configurtion Review
Icinga2 Monitoring Configuration Review

If all went well with the Icinga Web 2 setup, you should get a notification that Icinga Web 2 has been successfully set up. To log in to the web interface, click on the ‘Login to Icinga Web 2’ link.

Icinga Web2 Login
Icinga Web2 Login

This pops open the Icinga Web 2 interface. Provide the Admin account details and click ‘login’.

IcingaWeb2 Login
IcingaWeb2 Login

This ushers you to the Icinga2 monitoring dashboard as shown.

IcingaWeb2 Dashboard
IcingaWeb2 Dashboard

And that’s it. From there you can monitor various hosts and services within your network infrastructure. In this guide, we have walked you through the installation of Icinga Web 2 on RHEL 8, Rocky Linux, and AlmaLinux.

James Kiarie
This is James, a certified Linux administrator and a tech enthusiast who loves keeping in touch with emerging trends in the tech world. When I'm not running commands on the terminal, I'm taking listening to some cool music. taking a casual stroll or watching a nice movie.

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

1 Comment

Leave a Reply

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.