Monitoring und Alerting

Einrichtung von Alerts

Über Alerts lassen sich für ausgewählte Channel und Fehlerzustände Benachrichtigungsemail konfigurieren. Die Email wird ausgelöst, sobald der Fehler in dem Channel auftritt. Wenn besipeilsweise eine FTP-destination nicht verfügbar ist, wird für jede nicht zustellbare Nachricht eine Email erzeugt. Das Gleiche passiert, wenn per Polling von einem Quellkonnektor gelesen wird und auf diesen nicht zugegriffen werden kann. Es ist daher nur eine Frage der Zeit, bis das eigene Postfach mit Alert-Emails überflutet wird. Alerts sollte man daher nur zurückhaltend bei großen Polling-Intervallen (1 x in 24 h) oder bei geringem Datenaufkommen (1 Nachricht pro Tag) einsetzen.

Ab Version 3 ist es nun auch möglich, den Füllstand einer Queue für eine spezielle destination zu überwachen. Für jede destination kann man einen Schwellwert angeben, bei der alert ausgelöst wird.

alert_queue_limit

Wird dieser Schwellwert und über- oder unterschritten, kann man dafür ein Alert definieren

alert_queue

Wenn nun der Schwellwert überschritten wurde, wird die Meldung

ERROR MESSAGE: Q-Treshold: message count exceeds alert threshold :5

ausgegeben, ist der Schwellwert unterschritten, lautet die Meldung

ERROR MESSAGE: Q-Treshold: message count below alert threshold :2

 

Queue Überwachung bei Version < 3

Bei Version 2 fehlt diese Funktion noch, hier muss man sich die Überwachung selber bauen: Innerhalb eines Channels kann per JavaScript die Anzahl der Nachrichten in der Queue ermittelt werden, die nicht zu einem Zielsystem kommuniziert werden konnte. Hierzu wird folgendes Code template definiert:

// Anzahl der Nachrichten in der Queue im Postprpcessor Skript ermitteln und email versenden.
//
// $Id$

function checkQueue(emCC) {

    if (typeof (emCC) === 'undefined') emCC = '';

    // This is the bit that does the heavy lifting
    var controller = Packages.com.mirth.connect.server.controllers.ChannelStatisticsController.getInstance();
    var channelName = Packages.com.mirth.connect.server.controllers.ChannelController.getInstance().getDeployedChannelById(channelId).getName();
    var stats = controller.getStatistics(channelId);

    var queuedMessages = Number(globalChannelMap.get('queuedMessages')); // letzter Durchlauf
    var qAlarm = 20;
    // This is the limit of queued messages prior to triggering the alert
    // Einstellungen für email:
    var smtpConn = SMTPConnectionFactory.createSMTPConnection();
    //Opens email connection using email settings in your Mirth Connect Settings.
    var emSubj = 'mirthConnect@' + globalMap.get('hostname') +': ';
    var emBody = '';
    var emTo = 'mirth@nocom.org'; // This is the email address you want to send the alert to.  Multiple emails can be separated with a comma
    // var emCC = ''; // This is any cc emails you want to include
    var emFrom = 'mirth@nocom.org'; // This is the “From” address
    var emSign = '--\n' + 'Mirth-Service\n' +
        'Telefon +49 228 287-00000\n' +
        'mailto:mirth@nocom.org\n';

    // I include all these so you can see what’s available
    var mSent = stats.getSent();
    var mReceived = stats.getReceived();
    var mQueued = stats.getQueued();
    var mError = stats.getError();

    // Limit erstmals überschritten
    if ((queuedMessages  qAlarm)) {
        globalChannelMap.put('queuedMessages', mQueued.toString());
        emSubj = emSubj + 'NEW alert for channel ' + channelName +
            ': ';
        emSubj = emSubj + mQueued.toString() + ' messages in queue';
        emBody = 'Queued messages detected on channel ' + channelName +
            '.\n' + 'Current number of queued messages is ' +
            mQueued.toString() +
            '.\n' + 'Mirth Connect server '
              + globalMap.get('hostname') + '.\n' +
            '***********************************************************************\n' +
            'Information fuer den Betreiber des Zielsystems:\n' +
            'Diese Meldung bedeutet, dass die o.g. Anzahl von Nachrichten vom Kommunikationsserver fuer Ihr\n' +
            'Zielsystem nicht uebermittelt werden konnte. Bitte ueberpruefen Sie die Verfuegbarkeit des Zielsystems.\n' +
            emSign;

        smtpConn.send(emTo, emCC, emFrom, emSubj, emBody);
        return;
    }
    // Limit mehrmals überschritten
    else if ((queuedMessages &gt; qAlarm) &amp;&amp; (mQueued &gt; qAlarm)) {
        globalChannelMap.put('queuedMessages', mQueued.toString());
        return;
    }
    // Limit erstmals wieder unterschritten
    else if ((queuedMessages &gt; qAlarm) &amp;&amp; (mQueued &lt;= qAlarm)) {
        globalChannelMap.put('queuedMessages', mQueued.toString());
        emSubj = emSubj + 'CLOSED alert for channel ' + channelName +
            ': ';
        emSubj = emSubj + mQueued.toString() + ' messages in queue';
        emBody = 'Queued messages detected on channel ' + channelName +
            '.\n' + 'Current number of queued messages is ' + mQueued.toString() +
            '.\n' + 'Mirth Connect server ' + globalMap.get('hostname') + '.\n' +
            '***********************************************************************\n' +
            'Information fuer den Betreiber des Zielsystems:\n' +
            'Diese Meldung bedeutet, dass die Nachrichten zu Ihrem Zielsystem wieder uebermittelt werden.\n' +
            emSign;
        smtpConn.send(emTo, emCC, emFrom, emSubj, emBody);
        return;
    }
    // Limit unterschritten
    else if ((queuedMessages &lt;= qAlarm) &amp;&amp; (mQueued &lt;= qAlarm)) {
        globalChannelMap.put('queuedMessages', mQueued.toString());
        return;
    }

}

Wenn mehr als 20 Nachrichten in der Queue stehen, wird einmalig eine Email verschickt, ist die Zahl wieder unterschritten, erfolgt der Versand einer weiteren Email.

Diese Funktion wird im Nachrichten Postprocessor aufgerufen:

// This script executes once after a message has been processed

checkQueue();

return;