Merge pull request #9671 from Icinga/docs213

Backport docs
This commit is contained in:
Alexander Aleksandrovič Klimov 2023-02-16 16:23:21 +01:00 committed by GitHub
commit 2bebb92b35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 165 additions and 91 deletions

View File

@ -173,7 +173,7 @@ git clone git@git.icinga.com:packaging/rpm-icinga2.git && cd rpm-icinga2
git clone git@git.icinga.com:packaging/deb-icinga2.git && cd deb-icinga2
```
#### Raspbian Packages
### Raspbian Packages
```bash
git clone git@git.icinga.com:packaging/raspbian-icinga2.git && cd raspbian-icinga2

View File

@ -7,7 +7,7 @@ the availability of your network resources, notifies users of outages, and gener
performance data for reporting.
Scalable and extensible, Icinga can monitor large, complex environments across
multiple locations.
multiple locations. This includes your data center as well as your private, public, or hybrid clouds.
Icinga 2 is the monitoring server and requires [Icinga Web 2](https://icinga.com/products/)
on top in your Icinga Stack. The [configuration](https://icinga.com/products/configuration/)

View File

@ -23,18 +23,18 @@ We recommend using our official repositories. Here's how to add it to your syste
### Debian Repository <a id="debian-repository"></a>
```bash
apt-get update
apt-get -y install apt-transport-https wget gnupg
apt update
apt -y install apt-transport-https wget gnupg
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \
echo "deb https://packages.icinga.com/debian icinga-${DIST} main" > \
echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-${DIST} main" > \
/etc/apt/sources.list.d/${DIST}-icinga.list
echo "deb-src https://packages.icinga.com/debian icinga-${DIST} main" >> \
echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-${DIST} main" >> \
/etc/apt/sources.list.d/${DIST}-icinga.list
apt-get update
apt update
```
#### Debian Backports Repository <a id="debian-backports-repository"></a>
@ -48,7 +48,7 @@ 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
apt update
```
<!-- {% endif %} -->
@ -57,18 +57,18 @@ apt-get update
### Ubuntu Repository <a id="ubuntu-repository"></a>
```bash
apt-get update
apt-get -y install apt-transport-https wget gnupg
apt update
apt -y install apt-transport-https wget gnupg
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
. /etc/os-release; if [ ! -z ${UBUNTU_CODENAME+x} ]; then DIST="${UBUNTU_CODENAME}"; else DIST="$(lsb_release -c| awk '{print $2}')"; fi; \
echo "deb https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
/etc/apt/sources.list.d/${DIST}-icinga.list
echo "deb-src https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
/etc/apt/sources.list.d/${DIST}-icinga.list
apt-get update
apt update
```
<!-- {% endif %} -->
@ -76,18 +76,18 @@ apt-get update
### Raspbian Repository <a id="raspbian-repository"></a>
```bash
apt-get update
apt-get -y install apt-transport-https wget gnupg
apt update
apt -y install apt-transport-https wget gnupg
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \
echo "deb https://packages.icinga.com/raspbian icinga-${DIST} main" > \
echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/raspbian icinga-${DIST} main" > \
/etc/apt/sources.list.d/icinga.list
echo "deb-src https://packages.icinga.com/raspbian icinga-${DIST} main" >> \
echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/raspbian icinga-${DIST} main" >> \
/etc/apt/sources.list.d/icinga.list
apt-get update
apt update
```
<!-- {% endif %} -->
@ -151,7 +151,8 @@ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.r
```bash
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
dnf install -y 'dnf-command(config-manager)'
dnf config-manager --add-repo https://packages.icinga.com/fedora/$(. /etc/os-release; echo "$VERSION_ID")/release
```
<!-- {% endif %} -->
@ -247,7 +248,7 @@ with `root` permissions unless noted otherwise.
#### Debian / Ubuntu / Raspbian
<!-- {% endif %} -->
```bash
apt-get install icinga2
apt install icinga2
```
<!-- {% endif %} -->
@ -359,7 +360,7 @@ to determine where to find the plugin binaries.
#### Debian / Ubuntu / Raspbian
<!-- {% endif %} -->
```bash
apt-get install monitoring-plugins
apt install monitoring-plugins
```
<!-- {% endif %} -->
@ -411,7 +412,7 @@ as part of the [server:monitoring repository](https://build.opensuse.org/project
Please make sure to enable this repository beforehand.
```bash
zypper install monitoring-plugins
zypper install --recommends monitoring-plugins-all
```
<!-- {% endif %} -->
@ -530,7 +531,7 @@ yum install icingadb-redis
##### Debian / Ubuntu
<!-- {% endif %} -->
```bash
apt-get install icingadb-redis
apt install icingadb-redis
```
<!-- {% endif %} -->

View File

@ -1,2 +1,3 @@
# Install Icinga 2 on Fedora
<!-- {% set fedora = True %} -->
<!-- {% include "02-installation.md" %} -->

View File

@ -1572,12 +1572,18 @@ send notifications to all group members.
> Only users who have been notified of a problem before (`Warning`, `Critical`, `Unknown`
states for services, `Down` for hosts) will receive `Recovery` notifications.
Icinga 2 v2.10 allows you to configure `Acknowledgement` and/or `Recovery`
Icinga 2 v2.10 allows you to configure a `User` object with `Acknowledgement` and/or `Recovery`
without a `Problem` notification. These notifications will be sent without
any problem notifications beforehand, and can be used for e.g. ticket systems.
```
object User "ticketadmin" {
display_name = "Ticket Admin"
enable_notifications = true
states = [ OK, Warning, Critical ]
types = [ Acknowledgement, Recovery ]
email = "ticket@localhost"
}
```
### Notifications: Users from Host/Service <a id="alert-notifications-users-host-service"></a>
@ -1817,8 +1823,14 @@ Sometimes the problem in question should not be announced when the notification
(the object reaching the `HARD` state), but after a certain period. In Icinga 2
you can use the `times` dictionary and set `begin = 15m` as key and value if you want to
postpone the notification window for 15 minutes. Leave out the `end` key -- if not set,
Icinga 2 will not check against any end time for this notification. Make sure to
specify a relatively low notification `interval` to get notified soon enough again.
Icinga 2 will not check against any end time for this notification.
> **Note**
>
> Setting the `end` key to `0` will stop sending notifications immediately
> when a problem occurs, effectively disabling the notification.
Make sure to specify a relatively low notification `interval` to get notified soon enough again.
```
apply Notification "mail" to Service {
@ -1835,6 +1847,10 @@ apply Notification "mail" to Service {
}
```
Also note that this mechanism doesn't take downtimes etc. into account, only
the `HARD` state change time matters. E.g. for a problem which occurred in the
middle of a downtime from 2 PM to 4 PM `times.begin = 2h` means 5 PM, not 6 PM.
### Disable Re-notifications <a id="disable-renotification"></a>
If you prefer to be notified only once, you can disable re-notifications by setting the

View File

@ -343,7 +343,7 @@ object Host NodeName {
vars.http_vhosts["http"] = {
http_uri = "/"
}
/* Uncomment if you've sucessfully installed Icinga Web 2. */
/* Uncomment if you've successfully installed Icinga Web 2. */
//vars.http_vhosts["Icinga Web 2"] = {
// http_uri = "/icingaweb2"
//}

View File

@ -898,7 +898,7 @@ Instead, choose a plugin and configure its parameters and thresholds. The follow
* [running_kernel](10-icinga-template-library.md#plugin-contrib-command-running_kernel)
* package management: [apt](10-icinga-template-library.md#plugin-check-command-apt), [yum](10-icinga-template-library.md#plugin-contrib-command-yum), etc.
* [ssh](10-icinga-template-library.md#plugin-check-command-ssh)
* performance: [iostat](10-icinga-template-library.md#plugin-contrib-command-iostat), [check_sar_perf](https://github.com/dnsmichi/icinga-plugins/blob/master/scripts/check_sar_perf.py)
* performance: [iostat](10-icinga-template-library.md#plugin-contrib-command-iostat), [check_sar_perf](https://github.com/NETWAYS/check-sar-perf)
### Windows Monitoring <a id="service-monitoring-windows"></a>

View File

@ -477,7 +477,7 @@ Configuration Attributes:
vars | Dictionary | **Optional.** A dictionary containing custom variables that are specific to this notification object.
users | Array of object names | **Required.** A list of user names who should be notified. **Optional.** if the `user_groups` attribute is set.
user\_groups | Array of object names | **Required.** A list of user group names who should be notified. **Optional.** if the `users` attribute is set.
times | Dictionary | **Optional.** A dictionary containing `begin` and `end` attributes for the notification.
times | Dictionary | **Optional.** A dictionary containing `begin` and `end` attributes for the notification. If `end` is set to 0, `Notifications` are disabled permanently. Please read the [notification delay](03-monitoring-basics.md#notification-delay) chapter for details.
command | Object name | **Required.** The name of the notification command which should be executed when the notification is triggered.
interval | Duration | **Optional.** The notification interval (in seconds). This interval is used for active notifications. Defaults to 30 minutes. If set to 0, [re-notifications](03-monitoring-basics.md#disable-renotification) are disabled.
period | Object name | **Optional.** The name of a time period which determines when this notification should be triggered. Not set by default (effectively 24x7).
@ -1494,6 +1494,11 @@ Cleanup Items:
servicechecks\_age | Duration | **Optional.** Max age for servicechecks table rows (start\_time). Defaults to 0 (never).
systemcommands\_age | Duration | **Optional.** Max age for systemcommands table rows (start\_time). Defaults to 0 (never).
> **Supported units**
>
> Supported suffixes include ms (milliseconds), s (seconds), m (minutes), h (hours) and d (days).
> Check the [language reference](17-language-reference.md#duration-literals).
Data Categories:
Name | Description | Required by
@ -1593,6 +1598,11 @@ Cleanup Items:
servicechecks\_age | Duration | **Optional.** Max age for servicechecks table rows (start\_time). Defaults to 0 (never).
systemcommands\_age | Duration | **Optional.** Max age for systemcommands table rows (start\_time). Defaults to 0 (never).
> **Supported units**
>
> Supported suffixes include ms (milliseconds), s (seconds), m (minutes), h (hours) and d (days).
> Check the [language reference](17-language-reference.md#duration-literals).
Data Categories:
Name | Description | Required by

View File

@ -3507,7 +3507,7 @@ mem_critical | **Required.** Specify the critical threshold as number interprete
#### sar-perf <a id="plugin-contrib-command-sar-perf"></a>
The [check_sar_perf.py](https://github.com/dnsmichi/check-sar-perf)
The [check_sar_perf.py](https://github.com/NETWAYS/check-sar-perf)
plugin collects performance metrics from Linux hosts using the `sar` binary available in the `sysstat` package.
Custom variables passed as [command parameters](03-monitoring-basics.md#command-passing-parameters):

View File

@ -1393,7 +1393,7 @@ Example for scheduling a downtime for all `ping4` services:
```bash
curl -k -s -S -i -u root:icinga -H 'Accept: application/json' \
-X POST 'https://localhost:5665/v1/actions/schedule-downtime' \
-d '{ "type": "Service", "filter": "service.name==\"ping4\"", "start_time": 1446388806, "end_time": 1446389806, "duration": 1000, "author": "icingaadmin", "comment": "IPv4 network maintenance", "pretty": true }'
-d '{ "type": "Service", "filter": "service.name==\"ping4\"", "start_time": 1446388806, "end_time": 1446389806, "author": "icingaadmin", "comment": "IPv4 network maintenance", "pretty": true }'
```
```json

View File

@ -176,6 +176,60 @@ C:\> cd C:\ProgramData\icinga2\var\log\icinga2
C:\ProgramData\icinga2\var\log\icinga2> Get-Content .\debug.log -tail 10 -wait
```
## Icinga starts/restarts/reloads very slowly
Icinga performs a lot of memory allocations, especially during startup.
Swapping out the allocator may increase the startup performance.
The following instructions assume you run Linux and systemd.
On RHEL or derivates add the EPEL repository first (if not already done).
Let your package manager search for package names containing "jemalloc".
Pick preferably one named "libjemalloc" followed by a number,
just "jemalloc" otherwise, and install it.
Run `ldconfig -p |grep libjemalloc`. It should print something similar to:
```
libjemalloc.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libjemalloc.so.2
```
I.e. a relative file name followed by an absolute one. Remember the latter.
Measure how long Icinga needs to load its config without and with libjemalloc:
```bash
time icinga2 daemon -C
time env LD_PRELOAD=/lib/x86_64-linux-gnu/libjemalloc.so.2 icinga2 daemon -C
```
Replace `/lib/x86_64-linux-gnu/libjemalloc.so.2` with the absolute path
you actually got from `ldconfig -p`!
Please do us a favor and share your results
[with us](https://community.icinga.com/t/icinga-reloads-config-slowly-try-jemalloc/11032).
If it's faster with libjemalloc, do the following to persist the change.
Run `systemctl edit icinga2.service`. This will open an editor.
Add the following, save the file and close the editor.
```
[Service]
Environment=LD_PRELOAD=/lib/x86_64-linux-gnu/libjemalloc.so.2
```
Replace `/lib/x86_64-linux-gnu/libjemalloc.so.2` with the absolute path
you actually got from `ldconfig -p`!
Restart Icinga. Verify whether your changes took effect and enjoy the speed:
```
# lsof -p `cat /var/run/icinga2/icinga2.pid` |grep libjemalloc
icinga2 7764 nagios mem REG 8,5 744776 2631636 /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
#
```
## Configuration Troubleshooting <a id="troubleshooting-configuration"></a>
### List Configuration Objects <a id="troubleshooting-list-configuration-objects"></a>
@ -1628,53 +1682,26 @@ In order to solve this problem, remove the mentioned files from `zones.d` and us
of syncing plugin binaries to your satellites and agents.
#### Zones in Zones doesn't work <a id="troubleshooting-cluster-config-zones-in-zones"></a>
#### Zones in Zones <a id="troubleshooting-cluster-config-zones-in-zones"></a>
The cluster config sync works in the way that configuration
put into `/etc/icinga2/zones.d` only is included when configured
outside in `/etc/icinga2/zones.conf`.
The cluster config sync works in a such manner that any `/etc/icinga2/zones.d/` subdirectory is included only when it is
named after a known zone by the local `Endpoint`.
If you for example create a "Zone Inception" with defining the
`satellite` zone in `zones.d/master`, the config compiler does not
re-run and include this zone config recursively from `zones.d/satellite`.
If you for example add some configs in to `zones.d/satellite` and forgot to define the `satellite` zone
in `zones.d/master` or outside in `/etc/icinga2/zones.conf`, the config compiler will not include
this config from the `zones.d/satellite` zone directory.
Since v2.11, the config compiler is only including directories where a
zone has been configured. Otherwise it would include renamed old zones,
zone has been configured. Otherwise, it would include renamed old zones,
broken zones, etc. and those long-lasting bugs have been now fixed.
A more concrete example: Masters and Satellites still need to know the Zone hierarchy outside of `zones.d` synced configuration.
Here are some working examples:
**Doesn't work**
**Example: Everything in `zones.conf`**
```
vim /etc/icinga2/zones.conf
object Zone "master" {
endpoints = [ "icinga2-master1.localdomain", "icinga2-master2.localdomain" ]
}
```
```
vim /etc/icinga2/zones.d/master/satellite-zones.conf
object Zone "satellite" {
endpoints = [ "icinga2-satellite1.localdomain", "icinga2-satellite1.localdomain" ]
}
```
```
vim /etc/icinga2/zones.d/satellite/satellite-hosts.conf
object Host "agent" { ... }
```
The `agent` host object will never reach the satellite, since the master does not have
the `satellite` zone configured outside of zones.d.
**Works**
Each instance needs to know this, and know about the endpoints first:
Each instance needs to know the `Zone` and `Endpoint` definitions for itself and all directly connected instances in order
to successfully establish a connection with each other. This can be achieved by placing all `Endpoint` and `Zone` definitions
of all Icinga 2 instances known by the local endpoint in this single file.
```
vim /etc/icinga2/zones.conf
@ -1682,24 +1709,41 @@ vim /etc/icinga2/zones.conf
object Endpoint "icinga2-master1.localdomain" { ... }
object Endpoint "icinga2-master2.localdomain" { ... }
object Endpoint "icinga2-satellite1.localdomain" { ... }
object Endpoint "icinga2-satellite2.localdomain" { ... }
```
Then the zone hierarchy as trust and also config sync inclusion is required.
```
vim /etc/icinga2/zones.conf
object Zone "master" {
endpoints = [ "icinga2-master1.localdomain", "icinga2-master2.localdomain" ]
}
object Endpoint "icinga2-satellite1.localdomain" { ... }
object Endpoint "icinga2-satellite2.localdomain" { ... }
object Zone "satellite" {
endpoints = [ "icinga2-satellite1.localdomain", "icinga2-satellite1.localdomain" ]
parent = "master"
}
```
**Example: Child zones in `zones.d/`**
An additional option that Icinga 2 offers is the possibility to outsource all *child* `Endpoint` definitions of the
local Icinga 2 instance to the `zones.d/` directory. As an example, we can place the satellite `Zone` and `Endpoint` definition
from the above example into `zones.d/` underneath a directory named exactly like the local endpoint `Zone` name, which
in our case is `master`.
```
mkdir /etc/icinga2/zones.d/master
vim /etc/icinga2/zones.d/master/satellite.conf
object Endpoint "icinga2-satellite1.localdomain" { ... }
object Endpoint "icinga2-satellite2.localdomain" { ... }
object Zone "satellite" {
endpoints = [ "icinga2-satellite1.localdomain", "icinga2-satellite1.localdomain" ]
parent = "master"
}
...
```
Once done, you can start deploying actual monitoring objects into the satellite zone.
```
@ -1708,10 +1752,12 @@ vim /etc/icinga2/zones.d/satellite/satellite-hosts.conf
object Host "agent" { ... }
```
That's also explained and described in the [documentation](06-distributed-monitoring.md#distributed-monitoring-scenarios-master-satellite-agents).
Keep in mind that the `agent` host object will never reach the satellite, when the master does not have the
`satellite` zone configured either in `zones.d/master` nor outside the `zones.d` directory. That's also explained and
described in the [documentation](06-distributed-monitoring.md#distributed-monitoring-scenarios-master-satellite-agents).
The thing you can do: For `command_endpoint` agents like inside the Director:
Host -> Agent -> yes, there is no config sync for this zone in place. Therefore
Host -> Agent -> yes, there is no config sync for this zone in place. Therefore,
it is valid to just sync their zones via the config sync.
#### Director Changes

View File

@ -204,8 +204,8 @@ Operator | Precedence | Examples (Result) | Descript
`&` | 9 | 7 & 3 (3) | Binary AND
`^` | 10 | 17 ^ 12 (29) | Bitwise XOR
<code>&#124;</code> | 11 | 2 &#124; 3 (3) | Binary OR
<code>&#124;&#124;</code> | 12 | true &#124;&#124; false (true), 0 &#124;&#124; 7 (7)| Logical OR
`&&` | 13 | true && false (false), 3 && 7 (7), 0 && 7 (0) | Logical AND
`&&` | 12 | true && false (false), 3 && 7 (7), 0 && 7 (0) | Logical AND
<code>&#124;&#124;</code> | 13 | true &#124;&#124; false (true), 0 &#124;&#124; 7 (7)| Logical OR
`=` | 14 | a = 3 | Assignment
`=>` | 15 | x => x * x (function with arg x) | Lambda, for loop
`?` | 16 | (2 * 3 > 5) ? 1 : 0 (1) | [Ternary operator](17-language-reference.md#conditional-statements-ternary)

View File

@ -1839,7 +1839,7 @@ The returned messages are synced directly to the sender's endpoint, no cluster b
> **Note**: EventCommand errors are just logged on the remote endpoint.
### event::UpdateExecutions <a id="technical-concepts-json-rpc-messages-event-updateexecutions"></a>
#### event::UpdateExecutions <a id="technical-concepts-json-rpc-messages-event-updateexecutions"></a>
> Location: `clusterevents.cpp`
@ -1873,7 +1873,7 @@ Message updates will be dropped when:
* Checkable does not exist.
* Origin endpoint's zone is not allowed to access this checkable.
### event::ExecutedCommand <a id="technical-concepts-json-rpc-messages-event-executedcommand"></a>
#### event::ExecutedCommand <a id="technical-concepts-json-rpc-messages-event-executedcommand"></a>
> Location: `clusterevents.cpp`

View File

@ -1766,13 +1766,13 @@ cd .\build\
-DBoost_INCLUDE_DIR=C:\local\boost_1_80_0-Win64 `
-DBISON_EXECUTABLE=C:\ProgramData\chocolatey\lib\winflexbison3\tools\win_bison.exe `
-DFLEX_EXECUTABLE=C:\ProgramData\chocolatey\lib\winflexbison3\tools\win_flex.exe `
-DICINGA2_WITH_MYSQL=OFF -DICINGA2_WITH_PGSQL=OFF ..
-DICINGA2_WITH_MYSQL=OFF -DICINGA2_WITH_PGSQL=OFF -DICINGA2_UNITY_BUILD=OFF ..
& "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" .\icinga2.sln
```
Building icinga2.sln via Visual Studio itself seems to require a reboot
after installing the build tools and building once via command line.
after installing the build tools.
#### Chocolatey

View File

@ -30,7 +30,7 @@ object Host NodeName {
vars.http_vhosts["http"] = {
http_uri = "/"
}
/* Uncomment if you've sucessfully installed Icinga Web 2. */
/* Uncomment if you've successfully installed Icinga Web 2. */
//vars.http_vhosts["Icinga Web 2"] = {
// http_uri = "/icingaweb2"
//}