Es gibt zwei Möglichkeiten um check_mk dazu zu verwenden bei Problem Events Zammad Tickets zu öffnen und bei Recovery Events diese wieder zu schließen.
Notification E-Mails an den Zammad E-Mail Kanal
Eine Möglichkeit ist, in der WATO Configuration unter dem Menüpunkt Users einen User mit der E-Mail Adresse des gewünschten E-Mail Kanals anzulegen und diesen in der gewünschten Contact Group aufzunehmen.
Der Login für diesen User kann disabled werden.
In der Zammad GUI muss unter dem Menüpunkt Integration die check_mk Integration aktiviert und nach Bedarf angepasst werden.
Wenn check_mk an die angegebene E-Mailadresse einen Problem Alert sendet, eröffnet Zammad ein Ticket und schließt es wieder, wenn von check_mk die Recovery Meldung kommt.
Tickets via curl POST erzeugen
Die andere Möglichkeit ist, einen eigenen Notification Typ zu konfigurieren.
Da sich die Service Beschreibung der Service Notification von der
Host Notification unterscheidet, empfiehlt es sich zwei verschiedene
Tpyen zu Konfiguieren.
Dazu müssen die Scripte im entsprechenden omd Verzeichnis der jeweiligen
site
mit folgendem Inhalt erstellt werden:
Service Notification
/opt/omd/site/SITENAME/local/share/check_mk/notifications/zammad-service
#!/bin/bash
# Zammad Service Notification
# Filter Zammad URL
zammad_url=$(echo $NOTIFY_PARAMETER_1 | cut -d '/' -f 1,2,3,4,5)
# Create Ticket
ticket_id=$( curl -X POST -F "event_id=$NOTIFY_SERVICEPROBLEMID" -F "host=$NOTIFY_HOSTNAME ($NOTIFY_HOSTALIAS)" -F "service=$NOTIFY_SERVICEDESC" -F "state=$NOTIFY_SERVICESTATE" -F "text=$NOTIFY_SERVICEOUTPUT" $NOTIFY_PARAMETER_1 | jq '.ticket_id' )
if [ $NOTIFY_SERVICESTATE != "OK" ]; then
# Build i-doit query
idoit_query='{"jsonrpc":"2.0","method":"cmdb.objects.read","params":{"filter": {"title": "'$NOTIFY_HOSTNAME'"},"apikey":"'$NOTIFY_PARAMETER_5'"},"id":1}'
# Search i-doit Object
idoit_obj_id=$( curl -u $NOTIFY_PARAMETER_6:$NOTIFY_PARAMETER_7 --data "${idoit_query}" --header "Content-Type: application/json" {$NOTIFY_PARAMETER_4}/src/jsonrpc.php | jq '.result | .[0] | .id' )
# Filter i-doit Object id
temp="${idoit_obj_id%\"}"
idoit_obj_id="${temp#\"}"
# Build Ticket update query
update_query='{"title":"'$NOTIFY_HOSTNAME' ('$NOTIFY_HOSTALIAS') Service '$NOTIFY_SERVICEDESC' is '$NOTIFY_SERVICESTATE'", "preferences" : { "idoit": {"object_ids": ["'${idoit_obj_id}'"]}}}'
# Update Ticket
update=$( curl -u $NOTIFY_PARAMETER_2:$NOTIFY_PARAMETER_3 -H "Content-Type: application/json" -H "X-On-Behalf-Of: ${NOTIFY_PARAMETER_2}" -X PUT -d "${update_query}" ${zammad_url}/tickets/${ticket_id} )
# If "Update Ticket" not work use this
#update=$( curl -u $NOTIFY_PARAMETER_2:$NOTIFY_PARAMETER_3 -H "Content-Type: application/json" -X PUT -d "${update_query}" ${zammad_url}/tickets/${ticket_id} )
fi
exit 0
Host Notification
/opt/omd/site/SITENAME/local/share/check_mk/notifications/zammad-host
#!/bin/bash
# Zammad Host Notification
# Filter Zammad URL
zammad_url=$(echo $NOTIFY_PARAMETER_1 | cut -d '/' -f 1,2,3,4,5)
# Create Ticket
ticket_id=$( curl -X POST -F "event_id=$NOTIFY_HOSTPROBLEMID" -F "host=$NOTIFY_HOSTNAME ($NOTIFY_HOSTALIAS)" -F "service=$NOTIFY_SERVICEDESC" -F "state=$NOTIFY_HOSTSTATE" -F "text=$NOTIFY_HOSTOUTPUT" $NOTIFY_PARAMETER_1 | jq '.ticket_id' )
# Build i-doit query
idoit_query='{"jsonrpc":"2.0","method":"cmdb.objects.read","params":{"filter": {"title": "'$NOTIFY_HOSTNAME'"},"apikey":"'$NOTIFY_PARAMETER_5'"},"id":1}'
# Search i-doit Object
idoit_obj_id=$( curl -u $NOTIFY_PARAMETER_6:$NOTIFY_PARAMETER_7 --data "${idoit_query}" --header "Content-Type: application/json" {$NOTIFY_PARAMETER_4}/src/jsonrpc.php | jq '.result | .[0] | .id' )
# Filter i-doit Object id
temp="${idoit_obj_id%\"}"
idoit_obj_id="${temp#\"}"
# Build Ticket update query
update_query='{"preferences" : { "idoit": {"object_ids": ["'${idoit_obj_id}'"]}}}'
# Update Ticket
update=$( curl -u $NOTIFY_PARAMETER_2:$NOTIFY_PARAMETER_3 -H "Content-Type: application/json" -H "X-On-Behalf-Of: ${NOTIFY_PARAMETER_2}" -X PUT -d "${update_query}" ${zammad_url}/tickets/${ticket_id} )
# If "Update Ticket" not work use this
#update=$( curl -u $NOTIFY_PARAMETER_2:$NOTIFY_PARAMETER_3 -H "Content-Type: application/json" -X PUT -d "${update_query}" ${zammad_url}/tickets/${ticket_id} )
exit 0
Damit diese Scripte funktionieren, muss der JSON Processor jq
installiert sein.
und ausführbar gemacht werden:
# chmod +x local/share/check_mk/notifications/zammad-service local/share/check_mk/notifications/zammad-host
Danach muss check_mk neu gestartet werden:
# omd restart site
Nun stehen die Notification Typen Zammad Service und Zammad Host in der WATO Oberfläche zur Verfügung.
Auch für diese Methode sollte ein Zammad User ohne Login verwendet werden, allerdings ohne E-Mailadresse.
Nun kann in der WATO Oberfläche unter dem Menüpunkt Notifications eine neue Notification Rule konfiguriert werden. Bei der Notification Method wählt man zammad-service aus, wählt im Dropdown die Option Call with the following Parameters und trägt in darunterligenden Feldern der Reihe nach folgende Parameter ein:
- URL von Zammad inkl. Authentifizierungstoken, wie er bei der Konfiguration der check_mk Integration in Zammad angezeigt wurde;
- Zammad User (E-Mail)
- Zammad Pass
- i-doit URL (ohne /src/json.php)
- i-doit API Key
- i-doit User
- idoit Pass
In der Sektion Contact Selection sorgt die markierte Checbox The following users und die Einschränkung auf den User Zammad dafür, dass das Script nur einmal aufgerufen wird, statt für jeden zu benachrichtigenden User.
Damit nur Service Notification's erstellt werden, wählt man unter Conditions "Match service event type" aus.
Für die Host Notification kann die Service Notification kopiert werden, man wählt als Notificaton Method zammad-host aus und konfiguiert als Condition "Match host event type".