Wenn ein Bereitschaftshabender eine Alarmierungs-Nachricht bekommt, ist es wichtig, dass er diese sofort versteht.
Das Problem:
Informationen, die von Tools (zum Beispiel Monitoring Tools, Facility Management, usw.) sind oft recht kryptisch und nicht selbsterklärend.
Dadurch werden Alarmierungs-Texte manchmal schwer lesbar und schwer verständlich:
- Alert on XC3o84-CCP-DEC07, Error code: 1254, Timestamp: 1421920446797, Location: 52.4027477,13.0641529
- Ticket TCK42564422 assigned to analyst cz1447.
- NtpClient was unable to …. NtpClient will try again in 3473457 minutes ….
- STOP: 0x00000F4 (0x0000000000000003, 0xFFFFFA8008BB7B30, 0xFFFFFA80008BB7E10, 0xFFFFF800031E88B0)
- An error occurred while creating an error report.
Das ist der Fall, wenn Alarmierungs-Nachrichten per SMS oder per Email empfangen werden und es wird noch schwerer verständlich, wenn diese Nachrichten in einem Telefonanruf automatisch vorgelesen werden.
Solche Informationen sind gut für Maschinen, aber nicht für Menschen.
- Was bedeutet Error Code 1254?
- Ist die Severity 3 hoch oder niedrig?
- Welchr Server hattte noch mal die IP-Adresse 192.168.2.105?
- Wer ist der User “cz1447”? Und wie kann ich ihn kontaktieren?
Die Lösung:
Wie können wir diese „Maschinen-Sprache“ nun in etwas übersetzen, dass verständlicher ist? Die Lösung, die Enterprise Alert hier anbietet heißt Alert Enrichment. Hiermit lassen sich Informationen zum Alarmierungs-Text hinzufügen oder ersetzen, bevor die Nachricht an den Nutzer gesendet wird.
Eine Möglichkeit hierfür ist Scripting. Enterprise Alert bietet mit dem Scripting Host Add-On die Möglichkeit in Alarmierungs-Workflows einzugreifen. Dies geschieht mit eigenen Skripten (Java Script oder Visual Basic Script). Diese Skripte können über eine Normale Alarmierungsrichtlinie angesprochen werden (im Reiter “Ziel” unter “Durch angepassten Benachrichtigungsablauf” (“Mehr Optionen”).
Das Skript selber kann unter “System” –> “Scripting Host” erstellt werden.
Dann kann der Alarmierungs-Workflow durch das Skript übernommen werden. Ein sehr einfaches Skript kann zum Beispiel, wie folgt, aussehen:
function OnNewEvent (eventObject) { var strExternalId = „“; var objTicket; var strBuilding = eventObject.getProperty(„Building“); var strServer = eventObject.getProperty(„Server“); var strErrorCode = eventObject.getProperty(„ErrorCode“); var strSeverity = eventObject.getProperty(„Severity“); // Send the alert message // Priority: 0: low priority, 1: major priority, 2: critical priority objTicket = EAScriptHost.TicketCreate(„rczachara“, „FF“, 2, „Alert in building: “ + strBuilding + „, on server: “ + strServer + „, severity: “ + strSeverity + „, error code: “ + strErrorCode); if (objTicket == null) { EAScriptHost.LogError(„Ticket not created“); } objTicket.SetProperty(„externalTicketId“, strExternalId); // Set the notification type to User alert // 0 = Automatic, 1: User alert, 2: Team Broadcast, 3: Team Broadcast to a schedule, 4: Team Escalation, 5: Team Escalation to a schedule, 6: Subscription Feed objTicket.SetProperty(„notificationType“, „1“); // Now send the ticket to Enterprise Alert for processing if (objTicket.Send() == false) { EAScriptHost.LogError(„Ticket not dispatched to Enterprise Alert“); } } |
Der Alarmierungs-Text sieht in diesem Beispiel wie folgt aus:
Alert in building: Berlin Office, on server: 192.168.2.105, severity: 2, error code: 1254
Wie kann dieser Text nun lesbarer gestaltet werden? Zum Beispiel kann die Severity Number durch beschreibende Worte ersetzt werden:
// Replace severity if (strSeverity == „1“) strSeverity = „low“; else if (strSeverity == „2“) strSeverity = „medium“; else if (strSeverity == „3“) strSeverity = „high“; |
Oder der Server-Name kann per “nslookup” ergänzt werden:
// Replace the IP address by the server name var obShell = new ActiveXObject(„WScript.shell“); var e = obShell.Exec(„%comspec% /c nslookup “ + + “ 2>&1 „) while(!e.StdOut.AtEndofStream) { var line = e.StdOut.ReadLine(); strServer = line.replace(„Server: „, „“);break; } |
Oder es können Zusatzinformationen aus einer Datenbank eingefügt werden:
// Add site information var strResult; // Get database connection var strDbConnectionString = „Driver=SQL Server Native Client 11.0;Server=sqlserver;Trusted_Connection=No;UID=SA;PWD=Derdack!;Database=EnterpriseAlert“; var oConn = DbGetConnection(strDbConnectionString); if (oConn) { if (DbCheckConnection(oConn)) {// Make the SQL query var rsUsers = DbGetRS(oConn, „SELECT Description FROM [MMEA].[dbo].[DemoSites] WHERE Site LIKE ‚%“ + strBuilding + „‚;“); if (!rsUsers.EOF) { strResult = rsUsers.Fields.Item(„Description“).Value;// Add the additional information strBuilding = strBuilding + “ (“ + strResult + „)“; } // Close the database connection oConn.Close();} } |
Am Ende könnte der Alarmierungs-Text dann weitaus lesbarer aussehen:
Alert in building: Berlin Office (The key is at the reception.), on server: SQLSERVER2, severity: medium, error code: 1254 (Low disk space.)
Weitere Beispiele für Alert Enrichment sind zum Beispiel die folgenden:
• Senden von One-Time Passwörtern
• Hinzufügen von Kontaktinformationen
• Hinzufügen von Links zu Tickets oder Informationen in einer KB
• Formatierung von Error-Codes
• Hinzufügen von örtlichen Information
• Formatierung des Alarmierungs-Textes in Abhängigkeit vom Alarmierungs-Kanal
• Hinzufügen von Informationen jeglicher Art
• ….
Alert Enrichment hilft dem Nutzer kritische Situationen besser und schneller zu verstehen und kann erste Hinweise auf eine mögliche Lösung geben.
Weitere Informationen finden sich auch in folgendem Video: https://vimeo.com/118599348.