ServiceNow Integration für Icinga

10 September, 2026

Dirk Wening
Dirk Wening
Technical Writer

von | Sep. 10, 2026

Zuletzt aktualisiert: 10.09.2026 · Lesezeit: 8-9 Minuten

Wenn Icinga einen kritischen Ausfall meldet, das aber niemand im Service-Desk mitbekommt, bleibt der Alarm wirkungslos liegen. Mit den offenen Repositories icinga-servicenow und icinga-servicenow-web verbindest du Icinga direkt mit ServiceNow: Notifications werden automatisch zu Incidents, ganz ohne manuelles Copy-Paste. Diese Anleitung zeigt dir, was du dafür brauchst und wie du beide Komponenten installierst und konfigurierst.

Die wichtigsten Punkte in 30 Sekunden

  • Zwei offene Repositories verbinden Icinga und ServiceNow: icinga-servicenow (Daemon) und icinga-servicenow-web (IcingaWeb2-Modul).
  • Icinga-Notifications werden automatisch in ServiceNow-Incidents umgewandelt, aktualisiert und wieder geschlossen.
  • Der Daemon läuft als eigener systemd-Dienst und braucht dafür keinen separaten Server, aber eine eigene SQL-Datenbank (MySQL, MariaDB, PostgreSQL oder SQLite).
  • Voraussetzung sind eine bestehende Icinga-Umgebung sowie eine ServiceNow-Instanz mit Lese-/Schreibrechten auf die Incident-Tabelle.

Warum Icinga und ServiceNow verbinden?

Stell dir vor, dein Icinga meldet einen kritischen Serverausfall, aber niemand aus dem Service-Desk merkt es, weil die Meldung ausschließlich in Icinga Web hängen bleibt. In vielen Unternehmen läuft das Ticketing über ServiceNow, das Monitoring aber über Icinga. Ohne Integration müssen Mitarbeitende Alarme manuell in Incidents übertragen, per Copy-Paste. Das führt zu Fehlerquellen, auch der Zeitverzug ist größer.

NETWAYS stellt dafür zwei Open Source Repositories bereit, die Icinga und ServiceNow direkt miteinander verbinden. Icinga-Notifications werden automatisch zu ServiceNow-Incidents.

ServiceNow und die Integration in Icinga

ServiceNow ist eine Cloud-Plattform für IT Service Management (ITSM). Unternehmen nutzen sie vor allem für Incident-, Change- und Asset-Management, also um Störungen, Änderungen und die eigene IT-Infrastruktur (CMDB) zentral zu verwalten. Anders als Icinga überwacht ServiceNow selbst keine Systeme, es verwaltet stattdessen die Prozesse und Tickets rund um den IT-Betrieb.

Genau daraus ergibt sich in der Praxis häufig eine Lücke. Icinga erkennt zuverlässig, wenn ein Host oder Service ausfällt, aber diese Information bleibt zunächst nur im Monitoring sichtbar. Damit ein Vorfall in ServiceNow als Incident auftaucht und dort dem Service-Desk zugewiesen, bearbeitet und dokumentiert werden kann, muss diese Information erst dorthin übertragen werden.

Die Integration schließt genau diese Lücke. Icinga-Notifications werden automatisch in ServiceNow-Incidents umgewandelt, aktualisiert und wieder geschlossen.

Damit lassen sich Monitoring und ITSM enger verzahnen, ohne dass jemand Alarme manuell zwischen beiden Systemen hin- und herträgt.

Vorstellung der Repos

Die beiden Repositories sind unabhängig von einander spielen aber super zusammen.

icinga-servicenow bildet das Herzstück, der Daemon wird in GO geschrieben. Er läuft als eigener Systemdienst und nimmt Notifications von Icinga entgegen. Er wandelt sie in ServiceNow-Incidents um, hält den eigenen Zustand in einer SQL-Datenbank (MySQL, PostgreSQL oder SQLite) fest und synchronisiert diesen Zustand regelmäßig mit ServiceNow.

icinga-servicenow-web ist ein Icingaweb2-Modul. Es liefert die grafische Oberfläche, um offene ServiceNow-Incidents direkt am Host oder Service in Icinga Web zu sehen, sowie die CLI (icingacli servicenow), mit der Notifications überhaupt erst an den Daemon geschickt werden.

Voraussetzungen der ServiceNow Integration für Icinga

Diese Integration setzt auf einer bestehenden Icinga-Umgebung auf. Wer noch keine hat, findet in unserer Artikelserie Grundinstallation Icinga die passenden Anleitung.

Für den Daemon

  • Der Daemon läuft als eigener systemd-Dienst und braucht dafür keinen separaten Server.
  • Go sollte in der Version 1.24.4 installiert sein
  • Eine Datenbank (MySQL, MariaDB oder PostgreSQL)
  • Zugangsdaten zu einer ServiceNow-Instanz mit einem Benutzer, der Lese-/Schreibrechte auf die Incident-Tabelle hat.

Für das Web-Modul

  • Eine laufende Icinga Web 2 Installation

Schritt 1: Datenbank für den Daemon einrichten

Klone zuerst das Repository, es enthält auch die Datenbank-Schemata, die wir gleich brauchen.

git clone https://github.com/NETWAYS/icinga-servicenow.git
cd icinga-servicenow

Der Daemon benötigt eine eigene Datenbank, um seinen Incident-Zustand zu speichern. Am Beispiel von MySQL:

mysql -u root -p
CREATE DATABASE servicenow CHARACTER SET utf8mb4;
CREATE USER 'servicenow'@'localhost' IDENTIFIED BY 'DeinSuperSicheresPasswort';
GRANT ALL PRIVILEGES ON servicenow.* TO 'servicenow'@'localhost';
EXIT;

Importiere anschließend das mitgelieferte Schema.

mysql -u servicenow -p servicenow < schema/mysql/schema.sql

Schritt 2: Daemon installieren und konfigurieren

Zu Beginn bauen wir das Binary.

go build -o icinga-servicenow ./cmd/icinga-servicenow

Verwende die mitgelieferte config.example.yml als Basis für die eigene config.yml.

database:
  type: mysql
  host: 127.0.0.1        
  port: 3306
  user: servicenow        
  password: DeinSuperSicheresPasswort
  name: servicenow

servicenow:
  url: "https://deine.service-now-adresse.com"
  user: "ServiceNow_Icinga"                   
  password: "SuperSicheresPasswort"                 

incident_table_endpoint: "/api/now/v2/table/incident"
incident_state_mapping:
  Problem: "1"
  Acknowledgement: "2"
  Recovery: "6"

Zum schnellen Testen lässt sich der Daemon direkt so starten:

./icinga-servicenow -config config.yml

Für den Dauerbetrieb erwartet der Daemon die Config standardmäßig unter /etc/icinga-servicenow/config.yml und bringt unter contrib/icinga-servicenow.service ein fertiges systemd-Unit-File mit, das die Binary unter /usr/bin/icinga-servicenow sowie einen Systembenutzer icinga-servicenow voraussetzt:

systemctl enable --now icinga-servicenow

Mit systemctl status icinga-servicenow lässt sich prüfen, ob der Dienst läuft und Datenbank sowie ServiceNow erfolgreich angepingt wurden.

Schritt 3: Web-Modul installieren

Das web-Modul wird wie ein gewöhnliches Icinga Web Modul eingebunden:

git clone https://github.com/NETWAYS/icinga-servicenow-web.git /usr/share/icingaweb2/modules/servicenow
icingacli module enable servicenow

Als nächstes wird das Konfigurationsverzeichnis angelegt:

install -d -m 2770 -o www-data -g icingaweb2 /etc/icingaweb2/modules/servicenow

Anschließend wird die config.ini mit der Daemon-Adresse gefüllt:

sudo vim /etc/icingaweb2/modules/servicenow/config.ini
[servicenow]
api_url = "https://icinga-servicenow-daemon:5910"
api_timeout = "10"
instance_url = "https://my.service-now.com"

[db]
resource = "servicenow_db"

Schritt 5: Icinga 2 mit dem Daemon verbinden

Damit Icinga bei Problemen automatisch eine Notification an den Daemon schickt, wird ein NotificationCommand benötigt. Das ist Icinga 2 eigene Konfigurationssprache, die in eine .conf-Datei gehört, zum Beispiel:

sudo vim /etc/icinga2/conf.d/servicenow-notifications.conf

Arbeitest du mit Zones, liegt die passende Stelle stattdessen unter:

sudo vim /etc/icinga2/zones/deine-zones/

Das NotificationCommand für Hosts wird hier nun abgelegt:

object NotificationCommand "servicenow-host-notification" {
  command = [ "/usr/bin/icingacli", "servicenow", "send", "notification" ]

  arguments += {
    "--host" = {
      required = true
      value = "$notification_hostname$"
    }
    "--output" = {
      required = true
      value = "$notification_output$"
    }
    "--state" = {
      required = true
      value = "$notification_state$"
    }
    "--type" = {
      required = true
      value = "$notification_type$"
    }
    "--name" = {
      required = true
      value = "$snow_name$"
    }
    "--template" = {
      value = "$snow_template$"
    }
    "--extra" = {
      value = "$snow_additional_fields$"
    }
  }

  vars += {
    notification_type = "$notification.type$"
    notification_hostname = "$host.name$"
    notification_output = "$host.output$"
    notification_state = "$host.state$"
    notification_name = "$snow.name$"
    notification_template = "$snow.template$"
    notification_extra = "$snow_additional_fields$"
  }
}

Dieses Command braucht noch ein Notification-Template, das festlegt, bei welchen Ereignistypen überhaupt benachrichtigt wird. Einfach im selben Dokument unten anreihen:

template Notification "snow-host-notification" {
  command = "servicenow-host-notification"

  types = [ Problem, Acknowledgement, Recovery, Custom,
            FlappingStart, FlappingEnd,
            DowntimeStart, DowntimeEnd, DowntimeRemoved ]
}

Das erstellte Template wird ohne einen Host noch nicht verwendet. Hier im Beispiel wird es direkt dem Host-Objekt zugeordnet.

apply Notification "snow-host-notification" to Host {
  import "snow-host-notification"

  assign where host.vars.snow_name
}

Nun speichern, die Konfiguration prüfen und Icinga 2 neu laden:

sudo icinga2 daemon -C
sudo systemctl restart icinga2

Praxisbeispiel der ServiceNow Integration für Icinga:

Schritt 1: Template beim Daemon anlegen

Bevor ein Template in einer Notification verwendet werden kann, muss es einmalig beim Daemon angelegt werden. Das Template legt fest, wie icinga-Variablen auf ServiceNow-Feldern abgebildet wird.

curl -X POST -H "Content-Type: application/json" http://localhost:5910/api/v1/template \
  -d '{
    "display_name": "mytemplate",
    "fields": {
      "ci_item": "$host.name$.example.localhost",
      "short_description": "$notification.output$",
      "caller_id": "sys_id_deines_servicenow_benutzers"
    }
  }'

In diesem Beispiel wird $host.name$ beim Erzeugen des Incidents automatisch durch den tatsächlichen Hostnamen ersetzt, $notification.output$ durch den Notification-Text. caller_id muss durch die Sys-ID eines echten Benutzers deiner eigenen ServiceNow-Instanz ersetzt werden.

Schritt 2: Notification unter Verwendung des Templates senden

Jetzt testen wir unser erstelltes Template:

icingacli servicenow send notification --state Critical --type Problem \
  --output "This host is on fire!" \
  --host Gans --name "generic" --template "mytemplate"

In Icinga bekommen wir unter dem Punkt Incidents, dann unser erstellter Incident angezeigt. Gleichzeitig wird automatisch in ServiceNow (Abb 2.) auch ein Incident erstellt.

ServiceNow Integration für Icinga: In icinga bekommen wir unter dem Punkt Incidents, dann unser erstellter Incident angezeigt.
ServiceNow Integration für Icinga: in ServiceNow (Abb 2.) wird ein Incident erstellt.
Abb.2

Fazit zur ServiceNow Integration für Icinga

Mit den beiden Repositories icinga-servicenow und icinga-servicenow-web lässt sich Icinga nahtlos an ServiceNow anbinden: Alarme werden automatisch zu Incidents, und offene Incidents sind direkt in Icinga Web sichtbar.

Wie hat Dir unser Artikel gefallen?