From a759c1e45134bc370e42bde93a794fc5e92458ac Mon Sep 17 00:00:00 2001 From: Blerim Sheqa Date: Wed, 16 Feb 2022 10:29:27 +0100 Subject: [PATCH] Update installation instructions for easier navigation on icinga.com --- doc/02-installation.md | 1310 +++++++++-------- doc/02-installation.md.d/01-Debian.md | 3 + doc/02-installation.md.d/02-Ubuntu.md | 3 + doc/02-installation.md.d/03-Raspbian.md | 3 + doc/02-installation.md.d/04-Fedora.md | 2 + doc/02-installation.md.d/05-CentOS.md | 3 + doc/02-installation.md.d/06-RHEL.md | 3 + doc/02-installation.md.d/07-OpenSUSE.md | 3 + doc/02-installation.md.d/08-SLES.md | 3 + doc/02-installation.md.d/09-Amazon-Linux.md | 3 + doc/02-installation.md.d/10-Windows.md | 3 + doc/03-monitoring-basics.md | 2 +- doc/04-configuration.md | 7 +- doc/06-distributed-monitoring.md | 18 +- doc/07-agent-based-monitoring.md | 6 +- doc/14-features.md | 20 +- doc/15-troubleshooting.md | 14 +- doc/16-upgrading-icinga-2.md | 5 +- doc/21-development.md | 5 +- doc/images/installation/mariadb-centos7.png | Bin 51357 -> 0 bytes doc/images/installation/postgr-import-ido.png | Bin 33117 -> 0 bytes 21 files changed, 736 insertions(+), 680 deletions(-) create mode 100644 doc/02-installation.md.d/01-Debian.md create mode 100644 doc/02-installation.md.d/02-Ubuntu.md create mode 100644 doc/02-installation.md.d/03-Raspbian.md create mode 100644 doc/02-installation.md.d/04-Fedora.md create mode 100644 doc/02-installation.md.d/05-CentOS.md create mode 100644 doc/02-installation.md.d/06-RHEL.md create mode 100644 doc/02-installation.md.d/07-OpenSUSE.md create mode 100644 doc/02-installation.md.d/08-SLES.md create mode 100644 doc/02-installation.md.d/09-Amazon-Linux.md create mode 100644 doc/02-installation.md.d/10-Windows.md delete mode 100644 doc/images/installation/mariadb-centos7.png delete mode 100644 doc/images/installation/postgr-import-ido.png diff --git a/doc/02-installation.md b/doc/02-installation.md index 4e04622772a..004eaf163f9 100644 --- a/doc/02-installation.md +++ b/doc/02-installation.md @@ -1,55 +1,26 @@ + # Installation -This tutorial is a step-by-step introduction to installing [Icinga 2](02-installation.md#setting-up-icinga2) -and [Icinga Web 2](02-installation.md#setting-up-icingaweb2). +This tutorial is a step-by-step introduction to install Icinga 2. It assumes that you are familiar with the operating system you're using to install Icinga 2. -In case you are upgrading an existing setup, please ensure to -follow the [upgrade documentation](16-upgrading-icinga-2.md#upgrading-icinga-2). - -## Setting up Icinga 2 - -First off you have to install Icinga 2. The preferred way of doing this -is to use the official package repositories depending on which operating system -and distribution you are running. - -Official repositories ([support matrix](https://icinga.com/subscription/support-details/)): +Please follow the steps listed for your operating system. Packages for distributions other than the ones +listed here may also be available. Please refer to [icinga.com/get-started/download](https://icinga.com/get-started/download/#community) +for a full list of available community repositories. - Distribution | Repository - ------------------------|--------------------------- - Debian | [Icinga Repository](https://packages.icinga.com/debian/) - Ubuntu | [Icinga Repository](https://packages.icinga.com/ubuntu/) - Raspbian | [Icinga Repository](https://packages.icinga.com/raspbian/). Note that **Raspbian `icinga-buster` is required.** - RHEL/CentOS | [Icinga Repository](https://packages.icinga.com/epel/) - openSUSE | [Icinga Repository](https://packages.icinga.com/openSUSE/) - SLES | [Icinga Repository](https://packages.icinga.com/SUSE/) +## Upgrade -Community repositories: - - Distribution | Repository - ------------------------|--------------------------- - Gentoo | [Upstream](https://packages.gentoo.org/package/net-analyzer/icinga2) - FreeBSD | [Upstream](https://www.freshports.org/net-mgmt/icinga2) - OpenBSD | [Upstream](http://ports.su/net/icinga/core2,-main) - ArchLinux | [Upstream](https://aur.archlinux.org/packages/icinga2) - Alpine Linux | [Upstream](https://pkgs.alpinelinux.org/package/edge/community/x86_64/icinga2) - -Packages for distributions other than the ones listed above may also be -available. Please contact your distribution packagers. - -> **Note** -> -> Windows is only supported for agent installations. Please refer -> to the [distributed monitoring chapter](06-distributed-monitoring.md#distributed-monitoring-setup-client-windows). +In case you are upgrading an existing setup, please ensure to +follow the [upgrade documentation](16-upgrading-icinga-2.md#upgrading-icinga-2). + -### Package Repositories +## Add Icinga Package Repository -You need to add the Icinga repository to your package management configuration. -The following commands must be executed with `root` permissions unless noted otherwise. +We recommend using our official repositories. Here's how to add it to your system: -#### Debian/Ubuntu/Raspbian Repositories + -Debian: +### Debian Repository ```bash apt-get update @@ -66,7 +37,24 @@ DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \ apt-get update ``` -Ubuntu: +#### Debian Backports Repository + +This repository is required for Debian Stretch since Icinga v2.11. + +Debian Stretch: + +```bash +DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \ + echo "deb https://deb.debian.org/debian ${DIST}-backports main" > \ + /etc/apt/sources.list.d/${DIST}-backports.list + +apt-get update +``` + + + + +### Ubuntu Repository ```bash apt-get update @@ -82,8 +70,10 @@ wget -O - https://packages.icinga.com/icinga.key | apt-key add - apt-get update ``` + -Raspbian Buster: + +### Raspbian Repository ```bash apt-get update @@ -99,325 +89,250 @@ DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \ apt-get update ``` + -##### Debian Backports Repository - -> **Note**: -> -> This repository is required for Debian Stretch since v2.11. - -Debian Stretch: + +### CentOS Repository ```bash -DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \ - echo "deb https://deb.debian.org/debian ${DIST}-backports main" > \ - /etc/apt/sources.list.d/${DIST}-backports.list - -apt-get update +rpm --import https://packages.icinga.com/icinga.key +wget https://packages.icinga.com/centos/ICINGA-release.repo -O /etc/yum.repos.d/ICINGA-release.repo ``` -#### RHEL/CentOS/Fedora Repositories - -RHEL/CentOS 8: - -```bash -dnf install https://packages.icinga.com/epel/icinga-rpm-release-8-latest.noarch.rpm -``` +The packages for CentOS depend on other packages which are distributed +as part of the [EPEL repository](https://fedoraproject.org/wiki/EPEL). -RHEL/CentOS 7: +CentOS 8 additionally needs the PowerTools repository for EPEL: ```bash -yum install https://packages.icinga.com/epel/icinga-rpm-release-7-latest.noarch.rpm -``` - -RHEL/CentOS 6 x64: +dnf install 'dnf-command(config-manager)' +dnf config-manager --set-enabled powertools -```bash -yum install https://packages.icinga.com/epel/icinga-rpm-release-6-latest.noarch.rpm +dnf install epel-release ``` -Fedora 31: +For CentOS 7 run: ```bash -dnf install https://packages.icinga.com/fedora/icinga-rpm-release-31-latest.noarch.rpm +yum install epel-release ``` + -##### RHEL/CentOS EPEL Repository + +### RHEL Repository -The packages for RHEL/CentOS depend on other packages which are distributed -as part of the [EPEL repository](https://fedoraproject.org/wiki/EPEL). +!!! info -CentOS 8 additionally needs the PowerTools repository for EPEL: + A paid repository subscription is required for RHEL repositories. Get more information on + [icinga.com/subscription](https://icinga.com/subscription) -```bash -dnf install 'dnf-command(config-manager)' -dnf config-manager --set-enabled powertools - -dnf install epel-release -``` - -CentOS 7/6: + Don't forget to fill in the username and password section with your credentials in the local .repo file. ```bash -yum install epel-release +rpm --import https://packages.icinga.com/icinga.key +wget https://packages.icinga.com/subscription/rhel/ICINGA-release.repo -O /etc/yum.repos.d/ICINGA-release.repo ``` If you are using RHEL you need to additionally enable the `optional` and `codeready-builder` repository before installing the [EPEL rpm package](https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F). -RHEL 8: +#### RHEL 8 ```bash ARCH=$( /bin/arch ) +subscription-manager repos --enable rhel-8-server-optional-rpms subscription-manager repos --enable "codeready-builder-for-rhel-8-${ARCH}-rpms" dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm ``` -RHEL 7: +#### RHEL 7 ```bash subscription-manager repos --enable rhel-7-server-optional-rpms + yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ``` + + -RHEL 6: + +### Fedora Repository ```bash -subscription-manager repos --enable rhel-6-server-optional-rpms -yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm +rpm --import https://packages.icinga.com/icinga.key +dnf install https://packages.icinga.com/fedora/icinga-rpm-release-$(. /etc/os-release; echo "$VERSION_ID")-latest.noarch.rpm ``` + -#### SLES/OpenSUSE Repositories + +### SLES Repository -The release repository also provides the required Boost 1.66+ packages -since v2.11. +!!! info -SLES 15/12: + A paid repository subscription is required for SLES repositories. Get more information on + [icinga.com/subscription](https://icinga.com/subscription) -```bash -rpm --import https://packages.icinga.com/icinga.key - -zypper ar https://packages.icinga.com/SUSE/ICINGA-release.repo -zypper ref -``` - -openSUSE: + Don't forget to fill in the username and password section with your credentials in the local .repo file. ```bash rpm --import https://packages.icinga.com/icinga.key -zypper ar https://packages.icinga.com/openSUSE/ICINGA-release.repo +zypper ar https://packages.icinga.com/subscription/sles/ICINGA-release.repo zypper ref ``` -#### Alpine Linux Repositories +You need to additionally add the `PackageHub` repository to fulfill dependencies: ```bash -echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories -echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories -apk update -``` - -The example provided assumes that you are running Alpine edge, which is the -dev branch and is a rolling release. -If you are using a stable version please "pin" the edge repository on the latest Icinga 2 package version. -In order to correctly manage your repository, please follow -[these instructions](https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management) +source /etc/os-release -### Installing Icinga 2 - -You can install Icinga 2 by using your distribution's package manager -to install the `icinga2` package. The following commands must be executed -with `root` permissions unless noted otherwise. - -Debian/Ubuntu: - -```bash -apt-get install icinga2 +SUSEConnect -p PackageHub/$VERSION_ID/x86_64 ``` + -RHEL/CentOS 8 and Fedora: + +### openSUSE Repository ```bash -dnf install icinga2 -systemctl enable icinga2 -systemctl start icinga2 -``` - -RHEL/CentOS 7: +rpm --import https://packages.icinga.com/icinga.key -```bash -yum install icinga2 -systemctl enable icinga2 -systemctl start icinga2 +zypper ar https://packages.icinga.com/openSUSE/ICINGA-release.repo +zypper ref ``` -RHEL/CentOS 6: +You need to additionally add the `server:monitoring` repository to fulfill dependencies: ```bash -yum install icinga2 -chkconfig icinga2 on -service icinga2 start +zypper ar https://download.opensuse.org/repositories/server:/monitoring/15.3/server:monitoring.repo ``` + -SLES/openSUSE: + +### Amazon Linux 2 Repository -```bash -zypper install icinga2 -``` +!!! info + + A paid repository subscription is required for Amazon Linux repositories. Get more information on + [icinga.com/subscription](https://icinga.com/subscription) -FreeBSD: + Don't forget to fill in the username and password section with your credentials in the local .repo file. ```bash -pkg install icinga2 +rpm --import https://packages.icinga.com/icinga.key +wget https://packages.icinga.com/subscription/amazon/ICINGA-release.repo -O /etc/yum.repos.d/ICINGA-release.repo ``` -Alpine Linux: +The packages for Amazon Linux 2 depend on other packages which are distributed +as part of the [EPEL repository](https://fedoraproject.org/wiki/EPEL). ```bash -apk add icinga2 +yum install epel-release ``` + -## Setting up Check Plugins + +### Icinga for Windows Repository +[Icinga for Windows](https://icinga.com/docs/icinga-for-windows/latest/doc/000-Introduction/) is the recommended +way to install and update Icinga 2 on Windows. -Without plugins Icinga 2 does not know how to check external services. The -[Monitoring Plugins Project](https://www.monitoring-plugins.org/) provides -an extensive set of plugins which can be used with Icinga 2 to check whether -services are working properly. - -These plugins are required to make the [example configuration](04-configuration.md#configuring-icinga2-overview) -work out-of-the-box. +We provide a dedicated repository for Windows to simplify the installation. Please refer to the official +[Icinga for Windows installation docs](https://icinga.com/docs/icinga-for-windows/latest/doc/110-Installation/01-Getting-Started/) + -For your convenience here is a list of package names for some of the more -popular operating systems/distributions: +## Install Icinga 2 -OS/Distribution | Package Name | Repository | Installation Path ------------------------|--------------------|---------------------------|---------------------------- -RHEL/CentOS | nagios-plugins-all | [EPEL](02-installation.md#package-repositories-rhel-epel) | /usr/lib64/nagios/plugins -SLES/OpenSUSE | monitoring-plugins | [server:monitoring](https://build.opensuse.org/project/repositories/server:monitoring) | /usr/lib/nagios/plugins -Debian/Ubuntu | monitoring-plugins | - | /usr/lib/nagios/plugins -FreeBSD | monitoring-plugins | - | /usr/local/libexec/nagios -Alpine Linux | monitoring-plugins | - | /usr/lib/monitoring-plugins - -The recommended way of installing these standard plugins is to use your -distribution's package manager. - -Depending on which directory your plugins are installed into you may need to -update the global `PluginDir` constant in your [Icinga 2 configuration](04-configuration.md#constants-conf). -This constant is used by the check command definitions contained in the Icinga Template Library -to determine where to find the plugin binaries. +You can install Icinga 2 by using your distribution's package manager +to install the `icinga2` package. The following commands must be executed +with `root` permissions unless noted otherwise. -> **Note** -> -> Please refer to the [service monitoring](05-service-monitoring.md#service-monitoring-plugins) chapter for details about how to integrate -> additional check plugins into your Icinga 2 setup. + +!!! tip -### Debian/Ubuntu + If you have [SELinux](22-selinux.md) enabled, the package `icinga2-selinux` is also required. + + + +#### Debian / Ubuntu / Raspbian + ```bash -apt-get install monitoring-plugins +apt-get install icinga2 ``` + -### RHEL/CentOS/Fedora - -The packages for RHEL/CentOS depend on other packages which are distributed -as part of the [EPEL repository](02-installation.md#package-repositories-rhel-epel). - -RHEL/CentOS 8: + +#### CentOS 8 ```bash -dnf install nagios-plugins-all +dnf install icinga2 +systemctl enable icinga2 +systemctl start icinga2 ``` -RHEL/CentOS 7/6: +#### CentOS 7 ```bash -yum install nagios-plugins-all +yum install icinga2 +systemctl enable icinga2 +systemctl start icinga2 ``` + -Fedora: + +#### RHEL 8 ```bash -dnf install nagios-plugins-all +dnf install icinga2 +systemctl enable icinga2 +systemctl start icinga2 ``` -### SLES/openSUSE - -The packages for SLES/OpenSUSE depend on other packages which are distributed -as part of the [server:monitoring repository](https://build.opensuse.org/project/repositories/server:monitoring). -Please make sure to enable this repository beforehand. +#### RHEL 7 ```bash -zypper install monitoring-plugins +yum install icinga2 +systemctl enable icinga2 +systemctl start icinga2 ``` + -### FreeBSD - + + +#### Fedora + ```bash -pkg install monitoring-plugins +dnf install icinga2 +systemctl enable icinga2 +systemctl start icinga2 ``` + -### Alpine Linux - + + +#### SLES / openSUSE + ```bash -apk add monitoring-plugins -``` - -Note: For Alpine you don't need to explicitly add the `monitoring-plugins` package since it is a dependency of -`icinga2` and is pulled automatically. - -## Running Icinga 2 - -### Systemd Service - -The majority of supported distributions use systemd. The -Icinga 2 packages automatically install the necessary systemd unit files. - -The Icinga 2 systemd service can be (re-)started, reloaded, stopped and also -queried for its current status. - +zypper install icinga2 ``` -systemctl status icinga2 - -icinga2.service - Icinga host/service/network monitoring system - Loaded: loaded (/usr/lib/systemd/system/icinga2.service; disabled) - Active: active (running) since Mi 2014-07-23 13:39:38 CEST; 15s ago - Process: 21692 ExecStart=/usr/sbin/icinga2 -c ${ICINGA2_CONFIG_FILE} -d -e ${ICINGA2_ERROR_LOG} -u ${ICINGA2_USER} -g ${ICINGA2_GROUP} (code=exited, status=0/SUCCESS) - Process: 21674 ExecStartPre=/usr/sbin/icinga2-prepare-dirs /etc/sysconfig/icinga2 (code=exited, status=0/SUCCESS) - Main PID: 21727 (icinga2) - CGroup: /system.slice/icinga2.service - 21727 /usr/sbin/icinga2 -c /etc/icinga2/icinga2.conf -d -e /var/log/icinga2/error.log -u icinga -g icinga --no-stack-rlimit + -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 309 Service(s). -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 1 User(s). -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 15 Notification(s). -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 4 ScheduledDowntime(s). -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 1 UserGroup(s). -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 1 IcingaApplication(s). -Jul 23 13:39:38 nbmif icinga2[21692]: [2014-07-23 13:39:38 +0200] information/ConfigItem: Checked 8 Dependency(s). -Jul 23 13:39:38 nbmif systemd[1]: Started Icinga host/service/network monitoring system. + + +#### Amazon Linux 2 + +```bash +yum install icinga2 +systemctl enable icinga2 +systemctl start icinga2 ``` + -The `systemctl` command supports the following actions: - - Command | Description - --------------------|------------------------ - start | The `start` action starts the Icinga 2 daemon. - stop | The `stop` action stops the Icinga 2 daemon. - restart | The `restart` action is a shortcut for running the `stop` action followed by `start`. - reload | The `reload` action sends the `HUP` signal to Icinga 2 which causes it to restart. Unlike the `restart` action `reload` does not wait until Icinga 2 has restarted. - status | The `status` action checks if Icinga 2 is running. - enable | The `enable` action enables the service being started at system boot time (similar to `chkconfig`) - -Examples: +### Systemd Service -``` -systemctl enable icinga2 - -systemctl restart icinga2 -Job for icinga2.service failed. See 'systemctl status icinga2.service' and 'journalctl -xn' for details. -``` +The majority of supported distributions use systemd. The Icinga 2 packages automatically install the necessary +systemd unit files. If you're stuck with configuration errors, you can manually invoke the [configuration validation](11-cli-commands.md#config-validation). @@ -426,288 +341,286 @@ If you're stuck with configuration errors, you can manually invoke the icinga2 daemon -C ``` -> **Tip** -> -> If you are running into fork errors with systemd enabled distributions, -> please check the [troubleshooting chapter](15-troubleshooting.md#check-fork-errors). - -### Init Script +!!! tip -Icinga 2's init script is installed in `/etc/init.d/icinga2` (`/usr/local/etc/rc.d/icinga2` on FreeBSD) by default: + If you are running into fork errors with systemd enabled distributions, + please check the [troubleshooting chapter](15-troubleshooting.md#check-fork-errors). -``` -/etc/init.d/icinga2 -Usage: /etc/init.d/icinga2 {start|stop|restart|reload|checkconfig|status} -``` +## Set up Check Plugins -The init script supports the following actions: +Without plugins Icinga 2 does not know how to check external services. The +[Monitoring Plugins Project](https://www.monitoring-plugins.org/) provides +an extensive set of plugins which can be used with Icinga 2 to check whether +services are working properly. - Command | Description - --------------------|------------------------ - start | The `start` action starts the Icinga 2 daemon. - stop | The `stop` action stops the Icinga 2 daemon. - restart | The `restart` action is a shortcut for running the `stop` action followed by `start`. - reload | The `reload` action sends the `HUP` signal to Icinga 2 which causes it to restart. Unlike the `restart` action `reload` does not wait until Icinga 2 has restarted. - checkconfig | The `checkconfig` action checks if the `/etc/icinga2/icinga2.conf` configuration file contains any errors. - status | The `status` action checks if Icinga 2 is running. +These plugins are required to make the [example configuration](04-configuration.md#configuring-icinga2-overview) +work out-of-the-box. -By default, the Icinga 2 daemon is running as `icinga` user and group -using the init script. Using Debian packages the user and group are set to -`nagios` for historical reasons. +Depending on which directory your plugins are installed into you may need to +update the global `PluginDir` constant in your [Icinga 2 configuration](04-configuration.md#constants-conf). +This constant is used by the check command definitions contained in the Icinga Template Library +to determine where to find the plugin binaries. +!!! tip -### FreeBSD + Please refer to the [service monitoring](05-service-monitoring.md#service-monitoring-plugins) chapter for details about how to integrate + additional check plugins into your Icinga 2 setup. -On FreeBSD you need to enable icinga2 in your rc.conf + + +#### Debian / Ubuntu / Raspbian + ```bash -sysrc icinga2_enable=yes - -service icinga2 restart +apt-get install monitoring-plugins ``` + -### SELinux - -SELinux is a mandatory access control (MAC) system on Linux which adds -a fine-grained permission system for access to all system resources such -as files, devices, networks and inter-process communication. + + +#### CentOS + +The packages for CentOS depend on other packages which are distributed as part of the EPEL repository. -Icinga 2 provides its own SELinux policy. `icinga2-selinux` is a policy package -for Red Hat Enterprise Linux 7 and derivatives. The package runs the targeted policy -which confines Icinga 2 including enabled features and running commands. - -RHEL/CentOS 8 and Fedora: +#### CentOS 8 ```bash -dnf install icinga2-selinux +dnf install nagios-plugins-all ``` -RHEL/CentOS 7: +#### CentOS 7 ```bash -yum install icinga2-selinux +yum install nagios-plugins-all ``` + -Read more about SELinux in [this chapter](22-selinux.md#selinux). - -## Configuration Syntax Highlighting + + +#### RHEL + +The packages for RHEL depend on other packages which are distributed as part of the EPEL repository. -Icinga 2 provides configuration examples for syntax highlighting using the `vim` and `nano` editors. -The RHEL and SUSE package `icinga2-common` installs these files into `/usr/share/doc/icinga2-common-[x.x.x]/syntax` -(where `[x.x.x]` is the version number, e.g. `2.4.3` or `2.4.4`). Sources provide these files in `tools/syntax`. -On Debian systems the `icinga2-common` package provides only the Nano configuration file (`/usr/share/nano/icinga2.nanorc`); -to obtain the Vim configuration, please install the extra package `vim-icinga2`. The files are located in `/usr/share/vim/addons`. - -### Configuration Syntax Highlighting using Vim - -Install the package `vim-icinga2` with your distribution's package manager. - -Debian/Ubuntu: - -``` -apt-get install vim-icinga2 vim-addon-manager -vim-addon-manager -w install icinga2 -Info: installing removed addon 'icinga2' to /var/lib/vim/addons -``` - -RHEL/CentOS 8 and Fedora: +#### RHEL 8 ```bash -dnf install vim-icinga2 +dnf install nagios-plugins-all ``` -RHEL/CentOS 7/6: +#### RHEL 7 ```bash -yum install vim-icinga2 +yum install nagios-plugins-all ``` + -SLES/openSUSE: - + + +#### Fedora + ```bash -zypper install vim-icinga2 +dnf install nagios-plugins-all ``` + -Alpine Linux: + + +#### SLES / openSUSE + +The packages depend on other packages which are distributed +as part of the [server:monitoring repository](https://build.opensuse.org/project/repositories/server:monitoring). +Please make sure to enable this repository beforehand. ```bash -apk add icinga2-vim -``` - -Ensure that syntax highlighting is enabled e.g. by editing the user's `vimrc` -configuration file: - -``` -# vim ~/.vimrc -syntax on +zypper install monitoring-plugins ``` + -Test it: + + +#### Amazon Linux 2 + +The packages for Amazon Linux 2 depend on other packages which are distributed as part of the EPEL repository. ```bash -vim /etc/icinga2/conf.d/templates.conf -``` - -![Vim with syntax highlighting](images/installation/vim-syntax.png "Vim with Icinga 2 syntax highlighting") +amazon-linux-extras install epel +yum install nagios-plugins-all +``` + -### Configuration Syntax Highlighting using Nano +## Set up Database -Install the package `nano-icinga2` with your distribution's package manager. +The IDO (Icinga Data Output) feature for Icinga 2 stores all configuration and status information into a database. +Icinga Web 2 connects to the IDO database to visualize the data properly. You can either use a +[MySQL](#ido-with-mysql) or [PostgreSQL](#ido-with-postgresql) database. -Debian/Ubuntu: +We recommend to install and configure the IDO feature before continuing with the installation +of Icinga Web 2. -**Note:** The syntax files are installed with the `icinga2-common` package already. +!!! note -RHEL/CentOS 8 and Fedora: + We're currently working on a new data backend called Icinga DB. If you want to try the latest + release candidate skip to the [Icinga DB Chapter](#icingadb). Please keep in mind, that this version + is not ready for use in production and currently only supports MySQL. -```bash -dnf install nano-icinga2 -``` +### IDO with MySQL -RHEL/CentOS 7/6: +#### Install MySQL Server + + +#### Debian / Ubuntu + ```bash -yum install nano-icinga2 -``` - -SLES/openSUSE: +apt-get install mariadb-server mariadb-client -```bash -zypper install nano-icinga2 +mysql_secure_installation ``` + -Copy the `/etc/nanorc` sample file to your home directory. + + +#### CentOS + +#### CentOS 8 ```bash -cp /etc/nanorc ~/.nanorc -``` - -Include the `icinga2.nanorc` file. - -``` -$ vim ~/.nanorc - -## Icinga 2 -include "/usr/share/nano/icinga2.nanorc" +dnf install mariadb-server mariadb +systemctl enable mariadb +systemctl start mariadb +mysql_secure_installation ``` -Test it: - +#### CentOS 7 ```bash -nano /etc/icinga2/conf.d/templates.conf +yum install mariadb-server mariadb +systemctl enable mariadb +systemctl start mariadb +mysql_secure_installation ``` + -![Nano with syntax highlighting](images/installation/nano-syntax.png "Nano with Icinga 2 syntax highlighting") - -## Setting up Icinga Web 2 - -Icinga 2 can be used with Icinga Web 2 and a variety of modules. -This chapter explains how to set up Icinga Web 2. - -The DB IDO (Database Icinga Data Output) feature for Icinga 2 takes care of -exporting all configuration and status information into a database. - -> **Note** -> -> We're currently working on a new data backend called Icinga DB. -> If you want to try the latest release candidate skip to -> the [Icinga DB Chapter](02-installation.md#icingadb). -> Please keep in mind, that this version is not ready for use in -> production and currently only supports MySQL. - -### Configuring DB IDO MySQL - -#### Installing MySQL database server - -Debian/Ubuntu: - + + +#### RHEL + +#### RHEL 8 ```bash -apt-get install mariadb-server mariadb-client - +dnf install mariadb-server mariadb +systemctl enable mariadb +systemctl start mariadb mysql_secure_installation ``` -RHEL/CentOS and Fedora: - +#### RHEL 7 ```bash yum install mariadb-server mariadb systemctl enable mariadb systemctl start mariadb mysql_secure_installation ``` + -SUSE: - + + +#### SLES / openSUSE + ```bash -zypper install mysql mysql-client -chkconfig mysqld on -service mysqld start +zypper install mariadb mariadb-client +systemctl enable mariadb +systemctl start mariadb +mysql_secure_installation ``` + -FreeBSD: - + + +#### Amazon Linux 2 + ```bash -pkg install mysql56-server -sysrc mysql_enable=yes -service mysql-server restart +yum install mariadb-server mariadb +systemctl enable mariadb +systemctl start mariadb mysql_secure_installation ``` + + +#### Install IDO Feature -Alpine Linux: +The next step is to install the `icinga2-ido-mysql` package using your +distribution's package manager. + + +#### Debian / Ubuntu + ```bash -apk add mariadb -rc-service mariadb setup -rc-update add mariadb default -rc-service mariadb start +apt-get install icinga2-ido-mysql ``` -#### Installing the IDO modules for MySQL +!!! note -The next step is to install the `icinga2-ido-mysql` package using your -distribution's package manager. + The packages provide a database configuration wizard by + default. You can skip the automated setup and install/upgrade the + database manually if you prefer. + -Debian/Ubuntu: + + +#### CentOS + +#### CentOS 8 ```bash -apt-get install icinga2-ido-mysql +dnf install icinga2-ido-mysql ``` -RHEL/CentOS: - +#### CentOS 7 ```bash yum install icinga2-ido-mysql ``` + -SUSE: - + + +#### RHEL + +#### RHEL 8 ```bash -zypper install icinga2-ido-mysql +dnf install icinga2-ido-mysql ``` -FreeBSD: - -On FreeBSD the IDO modules for MySQL are included with the icinga2 package -and located at `/usr/local/share/icinga2-ido-mysql/schema/mysql.sql`. - -Alpine Linux: +#### RHEL 7 +```bash +yum install icinga2-ido-mysql +``` + -On Alpine Linux the IDO modules for MySQL are included with the `icinga2` package -and located at `/usr/share/icinga2-ido-mysql/schema/mysql.sql`. + + +#### SLES / openSUSE + +```bash +zypper install icinga2-ido-mysql +``` + -> **Note** -> -> The Debian/Ubuntu packages provide a database configuration wizard by -> default. You can skip the automated setup and install/upgrade the -> database manually if you prefer. + + +#### Amazon Linux 2 + +```bash +yum install icinga2-ido-mysql +``` + -#### Setting up the MySQL database +#### Set up MySQL database Set up a MySQL database for Icinga 2: -``` +```bash # mysql -u root -p CREATE DATABASE icinga; @@ -715,11 +628,9 @@ GRANT ALTER, CREATE, SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, E quit ``` -Please note that the example above uses the very simple password 'icinga' (in `IDENTIFIED BY 'icinga'`). +Please note that the example above uses the very simple password 'icinga' (in `IDENTIFIED BY 'icinga'`). Please choose a better password for your installation. -![setting up the database on CentOS 7](images/installation/mariadb-centos7.png "Setting up the database on CentOS 7") - After creating the database you can import the Icinga 2 IDO schema using the following command. Enter the icinga password into the prompt when asked. @@ -727,7 +638,7 @@ following command. Enter the icinga password into the prompt when asked. mysql -u icinga -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql ``` -#### Enabling the IDO MySQL module +#### Enable the IDO MySQL feature The package provides a new configuration file that is installed in `/etc/icinga2/features-available/ido-mysql.conf`. You can update @@ -737,10 +648,9 @@ All available attributes are explained in the [IdoMysqlConnection object](09-object-types.md#objecttype-idomysqlconnection) chapter. -You can enable the `ido-mysql` feature configuration file using -`icinga2 feature enable`: +Enable the `ido-mysql` feature configuration file using the `icinga2` command: -``` +```bash # icinga2 feature enable ido-mysql Module 'ido-mysql' was enabled. Make sure to restart Icinga 2 for these changes to take effect. @@ -752,100 +662,156 @@ Restart Icinga 2. systemctl restart icinga2 ``` -Alpine Linux: +### IDO with PostgreSQL +#### Install PostgreSQL server + + + +#### Debian / Ubuntu + ```bash -rc-service icinga2 restart +apt-get install postgresql ``` + -Continue with the [webserver setup](02-installation.md#icinga2-user-interface-webserver). - -### Configuring DB IDO PostgreSQL - -#### Installing PostgreSQL database server + + +#### CentOS + -Debian/Ubuntu: +#### CentOS 8 +```bash +dnf install postgresql-server postgresql +postgresql-setup initdb +systemctl enable postgresql +systemctl start postgresql +``` +#### CentOS 7 ```bash -apt-get install postgresql +yum install postgresql-server postgresql +postgresql-setup initdb +systemctl enable postgresql +systemctl start postgresql ``` + -RHEL/CentOS: + + +#### RHEL + +#### RHEL 8 +```bash +dnf install postgresql-server postgresql +postgresql-setup initdb +systemctl enable postgresql +systemctl start postgresql +``` +#### RHEL 7 ```bash yum install postgresql-server postgresql postgresql-setup initdb systemctl enable postgresql systemctl start postgresql ``` + -SUSE: - + + +#### SLES / openSUSE + ```bash zypper install postgresql postgresql-server chkconfig postgresql on service postgresql initdb service postgresql start ``` + -FreeBSD: - + + +#### Amazon Linux 2 + ```bash -pkg install postgresql93-server -sysrc postgresql_enable=yes -service postgresql initdb -service postgresql start +yum install postgresql-server postgresql +postgresql-setup initdb +systemctl enable postgresql +systemctl start postgresql ``` + + +#### Install IDO Feature -Alpine Linux: +The next step is to install the `icinga2-ido-pgsql` package using your +distribution's package manager. + + +#### Debian / Ubuntu + ```bash -apk add postgresql -rc-update add postgresql default -rc-service postgresql setup -rc-service postgresql start +apt-get install icinga2-ido-pgsql ``` -#### Installing the IDO modules for PostgreSQL +!!! note -The next step is to install the `icinga2-ido-pgsql` package using your -distribution's package manager. + Upstream Debian packages provide a database configuration wizard by default. + You can skip the automated setup and install/upgrade the database manually + if you prefer that. + -Debian/Ubuntu: + + +#### CentOS + +#### CentOS 8 ```bash -apt-get install icinga2-ido-pgsql +dnf install icinga2-ido-pgsql ``` -RHEL/CentOS: - +#### CentOS 7 ```bash yum install icinga2-ido-pgsql ``` + -SUSE: - + + +#### RHEL + +#### RHEL 8 ```bash -zypper install icinga2-ido-pgsql +dnf install icinga2-ido-pgsql ``` -FreeBSD: - -On FreeBSD the IDO modules for PostgreSQL are included with the icinga2 package -and located at `/usr/local/share/icinga2-ido-pgsql/schema/pgsql.sql`. - -Alpine Linux: +#### RHEL 7 +```bash +yum install icinga2-ido-pgsql +``` + -On Alpine Linux the IDO modules for PostgreSQL are included with the `icinga2` package -and located at `/usr/share/icinga2-ido-pgsql/schema/pgsql.sql`. + + +#### SLES / openSUSE + +```bash +zypper install icinga2-ido-pgsql +``` + -> **Note** -> -> Upstream Debian packages provide a database configuration wizard by default. -> You can skip the automated setup and install/upgrade the database manually -> if you prefer that. + + +#### Amazon Linux 2 + +```bash +yum install icinga2-ido-pgsql +``` + -#### Setting up the PostgreSQL database +#### Set up PostgreSQL database Set up a PostgreSQL database for Icinga 2: @@ -855,13 +821,13 @@ sudo -u postgres psql -c "CREATE ROLE icinga WITH LOGIN PASSWORD 'icinga'" sudo -u postgres createdb -O icinga -E UTF8 icinga ``` -> **Note** -> -> It is assumed here that your locale is set to utf-8, you may run into problems otherwise. +!!! note -Locate your `pg_hba.conf` configuration file (Debian: `/etc/postgresql/*/main/pg_hba.conf`, -RHEL/SUSE: `/var/lib/pgsql/data/pg_hba.conf`), add the icinga user with `md5` -as authentication method and restart the postgresql server. + It is assumed here that your locale is set to utf-8, you may run into problems otherwise. + +Locate your `pg_hba.conf` configuration file and add the icinga user with `md5` as authentication method +and restart the postgresql server. Common locations for `pg_hba.conf` are either +`/etc/postgresql/*/main/pg_hba.conf` or `/var/lib/pgsql/data/pg_hba.conf`. ``` # icinga @@ -877,11 +843,12 @@ host all all 127.0.0.1/32 ident host all all ::1/128 ident ``` +Restart PostgreSQL: + ```bash systemctl restart postgresql ``` - After creating the database and permissions you need to import the IDO database schema using the following command: @@ -890,10 +857,7 @@ export PGPASSWORD=icinga psql -U icinga -d icinga < /usr/share/icinga2-ido-pgsql/schema/pgsql.sql ``` -![importing the Icinga 2 IDO schema](images/installation/postgr-import-ido.png "Importing the Icinga 2 IDO schema on Debian Jessie") - - -#### Enabling the IDO PostgreSQL module +#### Enable the IDO PostgreSQL feature The package provides a new configuration file that is installed in `/etc/icinga2/features-available/ido-pgsql.conf`. You can update @@ -903,8 +867,7 @@ All available attributes are explained in the [IdoPgsqlConnection object](09-object-types.md#objecttype-idopgsqlconnection) chapter. -You can enable the `ido-pgsql` feature configuration file using -`icinga2 feature enable`: +Enable the `ido-pgsql` feature configuration file using the `icinga2` command: ``` # icinga2 feature enable ido-pgsql @@ -918,142 +881,270 @@ Restart Icinga 2. systemctl restart icinga2 ``` -Alpine Linux: +### Icinga DB -```bash -rc-service icinga2 restart +Icinga DB is a new data backend currently in development. +It's purpose is to synchronise data between Icinga 2 (Redis) and Icinga Web 2 (MySQL), some day replacing the IDO. +Don't worry, we won't drop support on the IDO any time soon. + +!!! note + + Icinga DB is not ready to be used in production and should only be used for testing purposes. + +#### Configue Icinga DB + +First, make sure to setup Icinga DB itself and its database backends (Redis and MySQL) by following the [installation instructions](https://icinga.com/docs/icingadb/latest/doc/02-Installation/). + +#### Enable Icinga DB feature + +Icinga 2 provides a configuration file that is installed in +`/etc/icinga2/features-available/icingadb.conf`. You can update +the Redis credentials in this file. + +All available attributes are explained in the +[IcingaDB object](09-object-types.md#objecttype-icingadb) +chapter. + +You can enable the `icingadb` feature configuration file using +`icinga2 feature enable`: + +``` +# icinga2 feature enable icingadb +Module 'icingadb' was enabled. +Make sure to restart Icinga 2 for these changes to take effect. ``` -Continue with the [webserver setup](02-installation.md#icinga2-user-interface-webserver). +Restart Icinga 2. -### Webserver +```bash +systemctl restart icinga2 +``` -The preferred way of installing Icinga Web 2 is to use Apache as webserver -in combination with PHP-FPM. If you prefer Nginx, please refer to the Icinga Web 2 -documentation. +## Set up Icinga 2 REST API -> **Note** -> -> These instructions follow HTTP. In order to secure your webserver, please -> use HTTPS and TLS certificates e.g. from [Let's Encrypt](https://letsencrypt.org/). +Icinga Web 2 requires the [REST API](12-icinga2-api.md#icinga2-api-setup) to send actions +(reschedule check, etc.) and query object details. -Debian/Ubuntu: +You can run the CLI command `icinga2 api setup` to enable the +`api` [feature](11-cli-commands.md#enable-features) and set up +certificates as well as a new API user `root` with an auto-generated password in the +`/etc/icinga2/conf.d/api-users.conf` configuration file: ```bash -apt-get install apache2 +icinga2 api setup ``` -RHEL/CentOS/Fedora: +Edit the `api-users.conf` file and add a new ApiUser object. Specify the [permissions](12-icinga2-api.md#icinga2-api-permissions) +attribute with minimal permissions required by Icinga Web 2. + +``` +object ApiUser "icingaweb2" { + password = "Wijsn8Z9eRs5E25d" + permissions = [ "status/query", "actions/*", "objects/modify/*", "objects/query/*" ] +} +``` + +Restart Icinga 2 to activate the configuration. ```bash -yum install httpd -systemctl enable httpd -systemctl start httpd +systemctl restart icinga2 ``` -SUSE: +## Install Icinga Web 2 + +You are now ready to start the installation of Icinga Web 2. Please follow the +[Icinga Web 2 installation instructions](https://icinga.com/docs/icinga-web-2/latest/doc/02-Installation/). + +!!! note + + If you're using Icinga DB, follow the [installation instructions](https://icinga.com/docs/icinga-db/latest/icinga-db-web/doc/02-Installation/) + to install and enable the Icinga DB Web module. + +## Syntax Highlighting +Icinga 2 provides configuration examples for syntax highlighting using the `vim` and `nano` editors. + +### Using Vim + +Install the package `vim-icinga2` with your distribution's package manager. + + + +#### Debian / Ubuntu / Raspbian + ```bash -zypper install apache2 -chkconfig apache2 on -service apache2 start +apt-get install vim-icinga2 vim-addon-manager +vim-addon-manager -w install icinga2 +Info: installing removed addon 'icinga2' to /var/lib/vim/addons ``` + -FreeBSD (Nginx, but you could also use the `apache24` package): + + +#### CentOS + +#### CentOS 8 ```bash -pkg install nginx php56-gettext php56-ldap php56-openssl php56-mysql php56-pdo_mysql php56-pgsql php56-pdo_pgsql php56-sockets php56-gd pecl-imagick pecl-intl -sysrc php_fpm_enable=yes -sysrc nginx_enable=yes -sed -i '' "s/listen\ =\ 127.0.0.1:9000/listen\ =\ \/var\/run\/php5-fpm.sock/" /usr/local/etc/php-fpm.conf -sed -i '' "s/;listen.owner/listen.owner/" /usr/local/etc/php-fpm.conf -sed -i '' "s/;listen.group/listen.group/" /usr/local/etc/php-fpm.conf -sed -i '' "s/;listen.mode/listen.mode/" /usr/local/etc/php-fpm.conf -service php-fpm start -service nginx start +dnf install vim-icinga2 ``` -Alpine Linux: +#### CentOS 7 +```bash +yum install vim-icinga2 +``` + + + +#### RHEL + +#### RHEL 8 ```bash -apk add apache2 php7-apache2 -sed -i -e "s/^#LoadModule rewrite_module/LoadModule rewrite_module/" /etc/apache2/httpd.conf -rc-update add apache2 default -rc-service apache2 start +dnf install vim-icinga2 ``` -### Firewall Rules +#### RHEL 7 +```bash +yum install vim-icinga2 +``` + -Enable port 80 (http). Best practice is to only enable port 443 (https) and use TLS certificates. + + +#### Fedora + +```bash +dnf install vim-icinga2 +``` + -firewall-cmd: + + +#### SLES / openSUSE + +```bash +zypper install vim-icinga2 +``` + + + +#### Amazon Linux 2 + ```bash -firewall-cmd --add-service=http -firewall-cmd --permanent --add-service=http +yum install vim-icinga2 +``` + + +Ensure that syntax highlighting is enabled e.g. by editing the user's `vimrc` +configuration file: + +``` +# vim ~/.vimrc +syntax on ``` -iptables: +Test it: ```bash -iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -service iptables save +vim /etc/icinga2/conf.d/templates.conf ``` -FreeBSD: -Please consult the [FreeBSD Handbook](https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html) how to configure one of FreeBSD's firewalls. +![Vim with syntax highlighting](images/installation/vim-syntax.png "Vim with Icinga 2 syntax highlighting") -### Setting Up Icinga 2 REST API +### Using Nano -Icinga Web 2 and other web interfaces require the [REST API](12-icinga2-api.md#icinga2-api-setup) -to send actions (reschedule check, etc.) and query object details. +Install the package `nano-icinga2` with your distribution's package manager. -You can run the CLI command `icinga2 api setup` to enable the -`api` [feature](11-cli-commands.md#enable-features) and set up -certificates as well as a new API user `root` with an auto-generated password in the -`/etc/icinga2/conf.d/api-users.conf` configuration file: + + +#### Debian / Ubuntu / Raspbian + +**Note:** The syntax files are installed with the `icinga2-common` package already. + + + +#### CentOS + + +#### CentOS 8 ```bash -icinga2 api setup +dnf install nano-icinga2 ``` -Edit the `api-users.conf` file and add a new ApiUser object. Specify the [permissions](12-icinga2-api.md#icinga2-api-permissions) -attribute with minimal permissions required by Icinga Web 2. +#### CentOS 7 +```bash +yum install nano-icinga2 +``` + + + +#### RHEL + +#### RHEL 8 +```bash +dnf install nano-icinga2 ``` -vim /etc/icinga2/conf.d/api-users.conf -object ApiUser "icingaweb2" { - password = "Wijsn8Z9eRs5E25d" - permissions = [ "status/query", "actions/*", "objects/modify/*", "objects/query/*" ] -} +#### RHEL 7 +```bash +yum install nano-icinga2 ``` + -Restart Icinga 2 to activate the configuration. + + +#### Fedora + +```bash +dnf install nano-icinga2 +``` + + + +#### SLES / openSUSE + ```bash -systemctl restart icinga2 +zypper install nano-icinga2 +``` + + + + +#### Amazon Linux 2 + +```bash +yum install nano-icinga2 ``` + -Alpine Linux: +Copy the `/etc/nanorc` sample file to your home directory. ```bash -rc-service icinga2 restart +cp /etc/nanorc ~/.nanorc ``` -### Installing Icinga Web 2 +Include the `icinga2.nanorc` file. -Please consult the [Icinga Web 2 documentation](https://icinga.com/docs/icingaweb2/latest/) -for further instructions on how to install Icinga Web 2. +``` +$ vim ~/.nanorc -If you decided on using Icinga DB, consult the [Icinga DB Web documentation](https://icinga.com/docs/icingadb/latest/icingadb-web/doc/01-About/) on how to connect Icinga Web 2 with Icinga DB. +## Icinga 2 +include "/usr/share/nano/icinga2.nanorc" +``` -## Addons +Test it: -A number of additional features are available in the form of addons. A list of -popular addons is available in the -[Addons and Plugins](13-addons.md#addons) chapter. +```bash +nano /etc/icinga2/conf.d/templates.conf +``` + +![Nano with syntax highlighting](images/installation/nano-syntax.png "Nano with Icinga 2 syntax highlighting") ## Installation Overview @@ -1097,25 +1188,11 @@ By default Icinga 2 uses the following files and directories: /var/spool/icinga2 | Used for performance data spool files. /var/log/icinga2 | Log file location and compat/ directory for the CompatLogger feature. -FreeBSD uses slightly different paths: - -By default Icinga 2 uses the following files and directories: - - Path | Description - ------------------------------------|------------------------------------ - /usr/local/etc/icinga2 | Contains Icinga 2 configuration files. - /usr/local/etc/rc.d/icinga2 | The Icinga 2 init script. - /usr/local/sbin/icinga2 | Shell wrapper for the Icinga 2 binary. - /usr/local/lib/icinga2 | Libraries and the Icinga 2 binary. - /usr/local/share/doc/icinga2 | Documentation files that come with Icinga 2. - /usr/local/share/icinga2/include | The Icinga Template Library and plugin command configuration. - /var/lib/icinga2 | Icinga 2 state file, cluster log, master CA, node certificates and configuration files (cluster, api). - /var/run/icinga2 | PID file. - /var/run/icinga2/cmd | Command pipe and Livestatus socket. - /var/cache/icinga2 | status.dat/objects.cache, icinga2.debug files. - /var/spool/icinga2 | Used for performance data spool files. - /var/log/icinga2 | Log file location and compat/ directory for the CompatLogger feature. +## Addons +A number of additional features are available in the form of addons. A list of +popular addons is available in the +[Addons and Plugins](13-addons.md#addons) chapter. ## Backup @@ -1126,7 +1203,7 @@ Ensure to include the following in your backups: * Runtime files in `/var/lib/icinga2` * Optional: IDO database backup -## Backup: Database +### Database Backup MySQL/MariaDB: @@ -1135,50 +1212,5 @@ MySQL/MariaDB: PostgreSQL: * [Documentation](https://www.postgresql.org/docs/9.3/static/backup.html) - -## Icinga DB - -Icinga DB is a new data backend currently in development. -It's purpose is to synchronise data between Icinga 2 (Redis) and Icinga Web 2 (MySQL), some day replacing the IDO. -Don't worry, we won't drop support on the IDO any time soon. - -> **Note** -> Icinga DB is not ready to be used in production -> and should only be used for testing purposes. - -### Configuring Icinga DB - -First, make sure to setup Icinga DB itself and its database backends (Redis and MySQL) by following the [installation instructions](https://icinga.com/docs/icingadb/latest/doc/02-Installation/). - -#### Enabling the Icinga DB feature - -Icinga 2 provides a configuration file that is installed in -`/etc/icinga2/features-available/icingadb.conf`. You can update -the Redis credentials in this file. - -All available attributes are explained in the -[IcingaDB object](09-object-types.md#objecttype-icingadb) -chapter. - -You can enable the `icingadb` feature configuration file using -`icinga2 feature enable`: - -``` -# icinga2 feature enable icingadb -Module 'icingadb' was enabled. -Make sure to restart Icinga 2 for these changes to take effect. -``` - -Restart Icinga 2. - -```bash -systemctl restart icinga2 -``` - -Alpine Linux: - -```bash -rc-service icinga2 restart -``` - -Continue with the [webserver setup](02-installation.md#icinga2-user-interface-webserver). + + diff --git a/doc/02-installation.md.d/01-Debian.md b/doc/02-installation.md.d/01-Debian.md new file mode 100644 index 00000000000..d3e31434cee --- /dev/null +++ b/doc/02-installation.md.d/01-Debian.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on Debian + + diff --git a/doc/02-installation.md.d/02-Ubuntu.md b/doc/02-installation.md.d/02-Ubuntu.md new file mode 100644 index 00000000000..aa099d87b2c --- /dev/null +++ b/doc/02-installation.md.d/02-Ubuntu.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on Ubuntu + + diff --git a/doc/02-installation.md.d/03-Raspbian.md b/doc/02-installation.md.d/03-Raspbian.md new file mode 100644 index 00000000000..fc48d6c67f5 --- /dev/null +++ b/doc/02-installation.md.d/03-Raspbian.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on Raspbian + + diff --git a/doc/02-installation.md.d/04-Fedora.md b/doc/02-installation.md.d/04-Fedora.md new file mode 100644 index 00000000000..1f12276b509 --- /dev/null +++ b/doc/02-installation.md.d/04-Fedora.md @@ -0,0 +1,2 @@ + + diff --git a/doc/02-installation.md.d/05-CentOS.md b/doc/02-installation.md.d/05-CentOS.md new file mode 100644 index 00000000000..4d766b21c5e --- /dev/null +++ b/doc/02-installation.md.d/05-CentOS.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on CentOS + + diff --git a/doc/02-installation.md.d/06-RHEL.md b/doc/02-installation.md.d/06-RHEL.md new file mode 100644 index 00000000000..568251ad0ed --- /dev/null +++ b/doc/02-installation.md.d/06-RHEL.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on RHEL + + diff --git a/doc/02-installation.md.d/07-OpenSUSE.md b/doc/02-installation.md.d/07-OpenSUSE.md new file mode 100644 index 00000000000..347831e8a3d --- /dev/null +++ b/doc/02-installation.md.d/07-OpenSUSE.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on openSUSE + + diff --git a/doc/02-installation.md.d/08-SLES.md b/doc/02-installation.md.d/08-SLES.md new file mode 100644 index 00000000000..aa2646d6fcf --- /dev/null +++ b/doc/02-installation.md.d/08-SLES.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on SLES + + diff --git a/doc/02-installation.md.d/09-Amazon-Linux.md b/doc/02-installation.md.d/09-Amazon-Linux.md new file mode 100644 index 00000000000..ec1d9866da5 --- /dev/null +++ b/doc/02-installation.md.d/09-Amazon-Linux.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on Amazon Linux + + diff --git a/doc/02-installation.md.d/10-Windows.md b/doc/02-installation.md.d/10-Windows.md new file mode 100644 index 00000000000..64bc6877c7b --- /dev/null +++ b/doc/02-installation.md.d/10-Windows.md @@ -0,0 +1,3 @@ +# Install Icinga 2 on Windows + + diff --git a/doc/03-monitoring-basics.md b/doc/03-monitoring-basics.md index 98e97672cbb..342442cfb06 100644 --- a/doc/03-monitoring-basics.md +++ b/doc/03-monitoring-basics.md @@ -1938,7 +1938,7 @@ The check command parameters for ITL provided plugin check command definitions a In order to practice passing command parameters you should [integrate your own plugin](03-monitoring-basics.md#command-plugin-integration). -The following example will use `check_mysql` provided by the [Monitoring Plugins installation](02-installation.md#setting-up-check-plugins). +The following example will use `check_mysql` provided by the [Monitoring Plugins](https://www.monitoring-plugins.org/). Define the default check command custom variables, for example `mysql_user` and `mysql_password` (freely definable naming schema) and optional their default threshold values. You can diff --git a/doc/04-configuration.md b/doc/04-configuration.md index 632cd27761b..e16c21060b7 100644 --- a/doc/04-configuration.md +++ b/doc/04-configuration.md @@ -196,7 +196,7 @@ The `constants.conf` configuration file can be used to define global constants. By default, you need to make sure to set these constants: -* The `PluginDir` constant must be set to the path where the [Monitoring Project plugins](02-installation.md#setting-up-check-plugins) are installed. +* The `PluginDir` constant must be set to the path where the [Monitoring Project](https://www.monitoring-plugins.org/) plugins are installed. This constant is used by a number of [built-in check command definitions](10-icinga-template-library.md#icinga-template-library). * The `NodeName` constant defines your local node name. Should be set to FQDN which is the default @@ -304,7 +304,7 @@ service apply rule defined in [services.conf](04-configuration.md#services-conf) * define notification types (`mail`) and set the groups attribute. This will be used by notification apply rules in [notifications.conf](04-configuration.md#notifications-conf). -If you've installed [Icinga Web 2](02-installation.md#setting-up-icingaweb2), you can +If you've installed [Icinga Web 2](https://icinga.com/docs/icinga-web-2/latest/doc/02-Installation/), you can uncomment the http vhost attributes and reload Icinga 2. The apply rules in [services.conf](04-configuration.md#services-conf) will automatically generate a new service checking the `/icingaweb2` URI using the `http` @@ -515,8 +515,7 @@ Look into [notifications.conf](04-configuration.md#notifications-conf) how this for applying notifications to hosts and services using their type and user attributes. -Don't forget to install the [check plugins](02-installation.md#setting-up-check-plugins) required by -the hosts and services and their check commands. +Don't forget to install the check plugins required by the hosts and services and their check commands. Further details on the monitoring configuration can be found in the [monitoring basics](03-monitoring-basics.md#monitoring-basics) chapter. diff --git a/doc/06-distributed-monitoring.md b/doc/06-distributed-monitoring.md index ca47bccb50d..7d28a9ba2a4 100644 --- a/doc/06-distributed-monitoring.md +++ b/doc/06-distributed-monitoring.md @@ -44,8 +44,8 @@ simple examples. In case you are planning a huge cluster setup with multiple levels and lots of satellites and agents, read on -- we'll deal with these cases later on. -The installation on each system is the same: You need to install the -[Icinga 2 package](02-installation.md#setting-up-icinga2) and the required [plugins](02-installation.md#setting-up-check-plugins). +The installation on each system is the same: Follow the [installation instructions](02-installation.md) +for the Icinga 2 package and the required check plugins. The required configuration steps are mostly happening on the command line. You can also [automate the setup](06-distributed-monitoring.md#distributed-monitoring-automation). @@ -238,9 +238,8 @@ This section explains how to install a central single master node using the `node wizard` command. If you prefer to do an automated installation, please refer to the [automated setup](06-distributed-monitoring.md#distributed-monitoring-automation) section. -Install the [Icinga 2 package](02-installation.md#setting-up-icinga2) and setup -the required [plugins](02-installation.md#setting-up-check-plugins) if you haven't done -so already. +Follow the [installation instructions](02-installation.md) for the Icinga 2 package and the required +check plugins if you haven't done so already. **Note**: Windows is not supported for a master node setup. @@ -304,7 +303,7 @@ Now restart your Icinga 2 daemon to finish the installation! ``` You can verify that the CA public and private keys are stored in the `/var/lib/icinga2/ca` directory. -Keep this path secure and include it in your [backups](02-installation.md#install-backup). +Keep this path secure and include it in your backups. In case you lose the CA private key you have to generate a new CA for signing new agent/satellite certificate requests. You then have to also re-create new signed certificates for all @@ -512,9 +511,8 @@ Icinga 2 on the master node must be running and accepting connections on port `5 Please ensure that you've run all the steps mentioned in the [agent/satellite section](06-distributed-monitoring.md#distributed-monitoring-setup-agent-satellite). -Install the [Icinga 2 package](02-installation.md#setting-up-icinga2) and setup -the required [plugins](02-installation.md#setting-up-check-plugins) if you haven't done -so already. +Follow the [installation instructions](02-installation.md) for the Icinga 2 package and the required +check plugins if you haven't done so already. The next step is to run the `node wizard` CLI command. @@ -3187,7 +3185,7 @@ to pick the authoritative running one and copy the following content: If you need already deployed config packages from the Director, or synced cluster zones, you can also sync the entire `/var/lib/icinga2/api/packages` directory. This directory should also be -included in your [backup strategy](02-installation.md#install-backup). +included in your backup strategy. Do **not** sync `/var/lib/icinga2/api/zones*` manually - this is an internal directory and handled by the Icinga cluster config sync itself. diff --git a/doc/07-agent-based-monitoring.md b/doc/07-agent-based-monitoring.md index 7a1a73afadc..a5a466e1176 100644 --- a/doc/07-agent-based-monitoring.md +++ b/doc/07-agent-based-monitoring.md @@ -64,7 +64,7 @@ an arbitrary plugin command line. The output and exit code is returned and used by the core. The `check_by_ssh` plugin takes care of this. It is available in the -[Monitoring Plugins package](02-installation.md#setting-up-check-plugins). +[Monitoring Plugins](https://www.monitoring-plugins.org/) package. For your convenience, the Icinga template library provides the [by_ssh](10-icinga-template-library.md#plugin-check-command-by-ssh) CheckCommand already. @@ -171,7 +171,7 @@ A more advanced example with better arguments is shown in [this blogpost](https: ## SNMP The SNMP daemon runs on the remote system and answers SNMP queries by plugin scripts. -The [Monitoring Plugins package](02-installation.md#setting-up-check-plugins) provides +The [Monitoring Plugins](https://www.monitoring-plugins.org/) package provides the `check_snmp` plugin binary, but there are plenty of [existing plugins](05-service-monitoring.md#service-monitoring-plugins) for specific use cases already around, for example monitoring Cisco routers. @@ -483,5 +483,3 @@ Community examples: * [Icinga 2 check_wmi_plus example by 18pct](https://18pct.com/icinga2-check_wmi_plus-example/) * [Agent-less monitoring with WMI](https://www.devlink.de/linux/icinga2-nagios-agentless-monitoring-von-windows/) - - diff --git a/doc/14-features.md b/doc/14-features.md index 392f98aa6b1..3007c0a5c00 100644 --- a/doc/14-features.md +++ b/doc/14-features.md @@ -63,7 +63,7 @@ Requirements: * IcingaDB service requires Redis and MySQL/MariaDB server * Icinga Web module -Consult the [Icinga DB section](02-installation.md#configuring-icinga-db) in the installation chapter for setup instructions. +Consult the [Icinga DB installation documentation](https://icinga.com/docs/icinga-db/latest/doc/02-Installation/) for setup instructions. We will deprecate the IDO and shift towards the Icinga DB as main backend, but we will not drop the IDO for now. @@ -77,8 +77,8 @@ The IDO (Icinga Data Output) feature for Icinga 2 takes care of exporting all configuration and status information into a database. The IDO database is used by Icinga Web 2 as data backend. -Details on the installation can be found in the [Configuring DB IDO](02-installation.md#configuring-db-ido-mysql) -chapter. Details on the configuration can be found in the +Details on the installation can be found in the "Prepare for Icinga Web 2" chapter +of the [Installation docs](02-installation.md). Details on the configuration can be found in the [IdoMysqlConnection](09-object-types.md#objecttype-idomysqlconnection) and [IdoPgsqlConnection](09-object-types.md#objecttype-idopgsqlconnection) object configuration documentation. @@ -705,7 +705,7 @@ Functionality exists to modify the built in OpenTSDB metric names that the plugi writes to. By default this is `icinga.host` and `icinga.service.`. These prefixes can be modified as necessary to any arbitary string. The prefix -configuration also supports Icinga macros, so if you rather use `` +configuration also supports Icinga macros, so if you rather use `` or any other variable instead of `` you may do so. To configure OpenTSDB metric name prefixes, create or modify the `host_template` and/or @@ -847,16 +847,16 @@ what attributes are available with links to each object type. > Ensure you do not name your custom attributes with a dot in the name. > Dots located inside a macro tell the interpreter to expand a > dictionary. -> +> > Do not do this in your object configuration: -> +> > `vars["my.attribute"]` -> +> > as you will be unable to reference `my.attribute` because it is not a > dictionary. -> +> > Instead, use underscores or another character: -> +> > `vars.my_attribute` or `vars["my_attribute"]` @@ -1069,7 +1069,7 @@ Livestatus. > > Only install the Livestatus feature if your web interface or addon requires > you to do so. -> [Icinga Web 2](02-installation.md#setting-up-icingaweb2) does not need +> [Icinga Web 2](https://icinga.com/docs/icinga-web-2/latest/doc/02-Installation/) does not need > Livestatus. Details on the available tables and attributes with Icinga 2 can be found diff --git a/doc/15-troubleshooting.md b/doc/15-troubleshooting.md index f4003fb829f..727c56c342e 100644 --- a/doc/15-troubleshooting.md +++ b/doc/15-troubleshooting.md @@ -856,7 +856,7 @@ $ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost: "icinga2-agent1.localdomain" ``` -Whenever a notification command failed to execute, you can fetch the output as well. +Whenever a notification command failed to execute, you can fetch the output as well. ## Feature Troubleshooting @@ -1745,7 +1745,7 @@ object Endpoint "icinga-satellite2.localdomain" { // That's no different to what is explained in the docs as basic zone trust hierarchy, and is intentionally managed outside in zones.conf there. object Zone "master" { - endpoints = [ "icinga-master1.localdomain", "icinga-master2.localdomain" ] + endpoints = [ "icinga-master1.localdomain", "icinga-master2.localdomain" ] } object Zone "satellite" { @@ -1754,21 +1754,21 @@ object Zone "satellite" { } ``` -Prepare the above configuration on all affected nodes, satellites are likely uptodate already. +Prepare the above configuration on all affected nodes, satellites are likely uptodate already. Then continue with the steps below. > * backup your database, just to be on the safe side > * create all non-external Zone/Endpoint-Objects on all related Icinga Master/Satellite-Nodes (manually in your local zones.conf) > * while doing so please do NOT restart Icinga, no deployments > * change the type in the Director DB: -> +> > ```sql > UPDATE icinga_zone SET object_type = 'external_object' WHERE object_type = 'object'; > UPDATE icinga_endpoint SET object_type = 'external_object' WHERE object_type = 'object'; > ``` -> +> > * render and deploy a new configuration in the Director. It will state that there are no changes. Ignore it, deploy anyways -> +> > That's it. All nodes should automatically restart, triggered by the deployed configuration via cluster protocol. @@ -1788,7 +1788,7 @@ certificate's CN, the master will deny all events. > **Tip** > -> [Icinga Web 2](02-installation.md#setting-up-icingaweb2) provides a dashboard view +> [Icinga Web 2](https://icinga.com/docs/icinga-web-2/latest/doc/01-About/) provides a dashboard view > for overdue check results. Enable the [debug log](15-troubleshooting.md#troubleshooting-enable-debug-output) on the master diff --git a/doc/16-upgrading-icinga-2.md b/doc/16-upgrading-icinga-2.md index b6a7d500c61..f90e61192e5 100644 --- a/doc/16-upgrading-icinga-2.md +++ b/doc/16-upgrading-icinga-2.md @@ -120,11 +120,12 @@ details, please continue reading in [this issue](https://github.com/Icinga/icing Distribution | Repository providing Boost Dependencies ---------------------|------------------------------------- -RHEL/CentOS 7 | [EPEL repository](02-installation.md#package-repositories-rhel-epel) +CentOS 7 | [EPEL repository](02-installation.md#centos-repository) +RHEL 7 | [EPEL repository](02-installation.md#rhel-repository) RHEL/CentOS 6 x64 | [packages.icinga.com](https://packages.icinga.com) Fedora | Fedora Upstream Debian 10 Buster | Debian Upstream -Debian 9 Stretch | [Backports repository](02-installation.md#package-repositories-debian-backports) **New since 2.11** +Debian 9 Stretch | [Backports repository](02-installation.md#debian-backports-repository) **New since 2.11** Debian 8 Jessie | [packages.icinga.com](https://packages.icinga.com) Ubuntu 18 Bionic | [packages.icinga.com](https://packages.icinga.com) Ubuntu 16 Xenial | [packages.icinga.com](https://packages.icinga.com) diff --git a/doc/21-development.md b/doc/21-development.md index 2ae7f398bf4..cb3fcf26277 100644 --- a/doc/21-development.md +++ b/doc/21-development.md @@ -539,7 +539,7 @@ on GitHub and mention that you're testing the snapshot packages. #### RHEL/CentOS -2.11+ requires the [EPEL repository](02-installation.md#package-repositories-rhel-epel) for Boost 1.66+. +2.11+ requires the EPEL repository for Boost 1.66+. In addition to that, the `icinga-rpm-release` package already provides the `icinga-snapshot-builds` repository but it is disabled by default. @@ -1436,7 +1436,7 @@ vim /usr/local/icinga2/etc/icinga2/conf.d/api-users.conf Debian Buster doesn't need updated Boost packages from packages.icinga.com, the distribution already provides 1.66+. For older versions such as Stretch, -include the release repository for packages.icinga.com as shown in the [setup instructions](02-installation.md#package-repositories-debian-ubuntu-raspbian). +include the release repository for packages.icinga.com as shown in the [setup instructions](02-installation.md). ```bash docker run -ti debian:buster bash @@ -2696,4 +2696,3 @@ the duplicate import in your `~/.gdbinit` file. ``` RuntimeError: pretty-printer already registered: libstdc++-v6 ``` - diff --git a/doc/images/installation/mariadb-centos7.png b/doc/images/installation/mariadb-centos7.png deleted file mode 100644 index 7ef54263ba11cc4e9346f3418792ed00eb59669e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51357 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

48!inj?}$<8;loz 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

    7X&V;(*Lo*cnJ@WQl=L> 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