Alarme in Slack


Alarmprotkolleinträge können über Integrationsflows für eine aktive, sofortige Alarmierung mittels des Auslösers ALARM_LOG WAS CREATED/RESOLVED an Slack / Microsoft Teams oder andere Systeme für Alarmierungen genutzt werden.

Nachrichten per Webhook an Slack senden

In diesem Kapitel wird aufgezeigt wie folgende exemplarische Nachricht aus einem niotix-Alarmprotkoll-Eintrag in Slack ausgelöst werden kann:

Einrichten des Konnektors

Die Weiterleitung der Nachrichten an Slack erfolgt mittels Webhook. Die notwendige Konfiguration in Slack kann in der Slack Dokumentation nachvollzogen werden: Slack Dokumentation.

Ist die Einrichtung des Webhooks seitens Slack erfolgt kann die Url in einem “Webhook(Outgoing)” Konnektor als webhookURL verwendet werden.

Einrichten eines Transformation

Um eine gut strukturierte Nachricht zu erzeugen, kann eine Transformation verwendet werden welche die Daten aus dem ALARM_LOG WAS CREATED/RESOLVED-Event in dem von Slack erwarteten Format strukturiert. Beispiel für eine solche Transformation in JSONATA:

JSONATA-Beispiel
{
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": $.value.is_resolved ? ":green_circle: Resolved Alarmlog" : ":red_circle: New Alarmlog",
				"emoji": true
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "*Errormessage:* " & $.value.alarm_message
			}
		},
		{
			"type": "rich_text",
			"elements": [
				{
					"type": "rich_text_section",
					"elements": [
						{
							"type": "text",
							"text": "Virtual device information:"
						}
					]
				},
				{
					"type": "rich_text_list",
					"style": "bullet",
					"elements": [
						{
							"type": "rich_text_section",
							"elements": [
								{
									"type": "text",
									"text": "Id: "
								},
								{
									"type": "text",
									"text": $string($.value.alarm_origin.id)
								}
							]
						},
						{
							"type": "rich_text_section",
							"elements": [
								{
									"type": "text",
									"text": "Titel: "
								},
								{
									"type": "text",
									"text": $.value.alarm_origin.title
								}
							]
						},
						{
							"type": "rich_text_section",
							"elements": [
								{
									"type": "text",
									"text": "Account: "
								},
								{
									"type": "text",
									"text": $.meta.account_name & " (Id:" & $.meta.account_id & ")"
								}
							]
						},
						{
							"type": "rich_text_section",
							"elements": [
								{
									"type": "text",
									"text": "Address: "
								},
								{
									"type": "text",
									"text":  $.value.alarm_origin.address
								}
							]
						}
					]
				}
			]
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "*For more details open device in niotix*"
			},
			"accessory": {
				"type": "button",
				"text": {
					"type": "plain_text",
					"text": "Open",
					"emoji": true
				},
				"value": "click_me_123",
				"url": $.value.alarm_origin.link ,
				"style": "primary",
				"action_id": "button-action"
			}
		}
	]
}

Einrichten eines Filters

Sollen nicht alle Alarmlog-Einträge weitergeleitet werden, dann lassen sich über Filter die weiterzuleitenden Nachrichten einschränken. Beispiele:

  • Es sollen nur Schwellwert-Alarme aus einer bestimmten Smarten Grupp (mit Id 42) beachtet werden: "$.value.alarm_origin.id = 42 and $.value.log_category = 'packet-threshold'"
  • Es sollen nur Alarmprotkolleinträge aus eine bestimmten Gerätegruppe mit dem Level “Fehler” beachtet werden: "group42" in $value.alarm_origin.groups and $value.alarm_level = "error"

Integrationflow erstellen

Im letzten Schritt werden Transformation, Konnektor und optional der Filter in einem Integrationsflow mit dem Auslöser ALARM_LOG WAS CREATED/RESOLVED miteinander verbunden: