- Icinga’s suppression applies first. Downtimes, acknowledgements, notification periods, and
timeswindows are all evaluated before incident.io sees anything. An object in a scheduled downtime does not page anyone. - Nothing changes until you opt in. Installing the integration sends no alerts. You choose which hosts and services participate with
vars.incident_io = true.
Before you start
Notifications only ever fire from the master zone, so satellites and agents need nothing installed and need no egress. Icinga’s config sync distributes
.conf files but not executables, so each master needs the package.
Instructions
1
Create the alert source
- Head over to the Alerts section in your incident.io dashboard.
- Select the sources tab at the top of the page.
- Press the New alert source button.
-
Search for HTTP, then click continue to create the alert source. Name it something you will recognize, such as
Icinga 2. - Leave the source type as Default. The integration already sends incident.io’s standard alert schema, so you do not need a transform expression.
- Copy the URL and bearer token shown on the setup page. You will paste both into Icinga in step 3.
2
Install the integration on each master
Download the This installs the notification handler to
.deb or .rpm from the releases page and install it on every master in your master zone:/usr/bin/incident-io-icinga and its Icinga configuration to /etc/icinga2/conf.d/. Use whatever configuration management already installs packages on your masters, so a new master does not come up missing it.3
Add your credentials
On each master, create the credentials file from the example the package ships:Fill in the URL and token from step 1, and the base URL of your Icinga Web 2 install:
IncidentIoIcingaWebUrl puts a link back to the object on every alert, so a responder can go from the page to the check in one click. IncidentIoIcingaWebStyle decides which Icinga Web 2 front end that link points at: use icingadb for Icinga DB Web, or monitoring for the older monitoring module. If you are unsure, open a host in Icinga Web 2 and look at the path in your browser.4
Choose which objects alert
Mark the hosts and services you want paged on. A host set to Set
true covers its services too:vars.incident_io = false on an individual service to carve it out again. To route your whole estate, change the assign where clauses in /etc/icinga2/conf.d/incident-io-notifications.conf to assign where true.5
Validate and reload
IncidentIoUrl is undefined, the credentials file from step 3 has not been created yet.Confirm it works
Build a payload without sending anything, to check the handler runs:incident-io-icinga, so journalctl -t incident-io-icinga tells you what happened to a notification that did not arrive.
Route alerts with Icinga metadata
Every alert carries ametadata object, which you can use to build alert attributes and route alerts to the right team. You get these without configuring anything:
You can add anything else Icinga knows. Name existing custom variables to promote them, or set an explicit dictionary:
check_source is worth calling out for distributed setups. It names the satellite that executed the check, so where your satellites map to datacenters, you can route EU checks to EU on-call.
Once alerts are arriving, create an alert route to filter, group, and escalate them, or to automatically create incidents.
FAQs
Do alerts resolve on their own?
Do alerts resolve on their own?
Yes. Icinga sends a
RECOVERY notification when a check comes good, and the integration resolves the alert it opened. This works because the deduplication key is built only from the host and service names, never from the state, timestamp, or the node that sent it.Will two HA masters send me duplicate alerts?
Will two HA masters send me duplicate alerts?
No. Icinga’s notification component runs with
enable_ha = true by default, so exactly one master owns notifications at a time and failover is automatic. Even if that assumption broke, both masters would produce the same deduplication key, so incident.io would collapse them into a single alert.What happens during a scheduled downtime?
What happens during a scheduled downtime?
Icinga suppresses notifications for objects in downtime, so nothing is sent. If a downtime starts while an alert is already open, incident.io resolves it, so planned maintenance does not leave an alert hanging. The alert fires again if the problem is still there when the downtime ends.
Do I need to install anything on satellites or agents?
Do I need to install anything on satellites or agents?
No. Notifications only fire from the master zone. Satellites and agents keep running checks and need no egress to incident.io.
The link on my alerts leads to a 404
The link on my alerts leads to a 404
IncidentIoIcingaWebStyle is set to the wrong front end. Icinga DB Web serves objects under /icingadb/, and the older monitoring module under /monitoring/. Open a host in Icinga Web 2, check which path your browser shows, and set the matching value.We manage Icinga with Director. Does that work?
We manage Icinga with Director. Does that work?
The repository ships a Director configuration basket under
contrib/, which creates the Icinga objects through the Director UI. Director cannot install the handler itself, so you still need the package on every master.How is this different from the Nagios integration?
How is this different from the Nagios integration?
Use this one for Icinga 2, and the Nagios integration for Nagios Core. Icinga 2 has its own configuration language and notification model, so it gets a notification command that understands host and service objects, custom variables, and satellites, rather than a Nagios plugin.