Beiträge durchsuchen

Themenreihe FreePBX 15/Asterisk 16-Tips & Tricks-Teil 5.2. Überwachen der Amtsleitungen

 

Gerade in einem Geschäftsumfeld ist eine ständige telefonische Erreichbarkeit ein nicht zu unterschätzendes Wettbewerbskriterium. Wenn Vertrieb oder Support oder andere Notrufnummern für längere Zeit nicht erreichbar sind, kann sich das ganz schnell zu einer kritischen Situation entwickeln.

Aber wie bekommt man denn mit, ob die Amtsleitungen noch verfügbar oder bereits gestört sind? Eigentlich nur dadurch, wenn mann selbst versucht jemand anzurufen und merkt, dass es nicht funktioniert oder sich ein externer Anrufer über einen anderen Weg meldet un Ihnen diese Störung mitteilt. Bis dahin können aber schon viele erfolglos versucht haben Sie zu erreichen und Sie haben dadurch eventuell sogar Geschäfte oder mindesten das Vertrauen ihrer kunden in Ihre Zuverlässigkeit verloren.

Um das zu vermeiden ist es sinnvoll die Verfügbarkeit der Amtsleitungen automatisch in einem kürzeren Zeitintervall zu überprüfen .

Dieses Video zeigt ihnen wie Sie eine solche Amtsleitungsüberwachung einrichten.

Für die Funktion wird dieses Script benötigt: csg-trunk-monitor2.zip (230 Downloads)

16 Kommentare zu Themenreihe FreePBX 15/Asterisk 16-Tips & Tricks-Teil 5.2. Überwachen der Amtsleitungen

  1. Hallo!
    Tolle Themenreihe. Leider lässt sich die Script-ZIP-datei aus Teil 5.2 nicht öffnen. Bitte aktualisieren. Danke.

      1. Hallo,
        da ich weitere Meldungen bekommen habe, dass der Link nicht funktioniert, habe ich das noch mal mit verschiedenen Browsern getestet. Tatsächlich war es so, dass der Link mit einigen Browsern nicht funktioniert hat (z. B. Firefox und Edge). Ich habe das Problem jetzt gelöst. Jetzt sollte der Download mit allen Browsern funktionieren.
        Grüße

  2. Hallo,
    in Ihrem Script wird aber immer nur eine Leitung berücksichtigt. Also wenn ich mehrere Trunks habe, dann müssten alle Leitungen ausfallen, bis eine Meldung versendet wird. Daher find ich es besser wenn man nach “Unknown\|Unreachable\|Forbidden\|Rejected\|Unregistered” sucht und dann den if-Befehl auf gleich (ohne !) setzt.
    Grüße

  3. Hallo,
    ich schaue mit Begeisterung diese Video-Reihe und ich bin mir auch sicher, dass ich ohne die Videos meine FreePBX noch nicht so weit hätte.
    Deshalb an dieser Stelle vielen Dank für die tolle Reihe.

    Speziell zu diesem Video habe ich aber 3 Anmerkungen:

    1. Zum Speicherort des Skriptes:
    Eigene Skripte werden in Linux normalerweise unter “/usr/local/bin” bzw. “/usr/local/sbin” abgelegt. Diese Verzeichnisse bleiben vom System unangetastet und sie sind im Suchpfad noch vor “/usr/sbin”, die Skripte werden also auch dort sicher gefunden. Eine Ablage von eigenen Skripten unter “/usr/sbin” ist in Linux meines Erachtens keine gute Idee.

    2. Zum Eintrag in der Crontab
    Das Skript wird unter dem User “root” ausgeführt, die FreePBX läuft aber unter dem User “asterisk”. Deshalb ist es aus meiner Sicht besser, wenn auch in der Crontab das Skript unter dem User “asterisk” ausgeführt wird. Die crontab des User “asterisk” ändert man im Terminal (!) mit “crontab -e -u asterisk”.
    Der User kann dann im Eintrag weggelassen werden. Für den Aufruf des Skriptes sollte in der crontab der komplette Pfad angegeben werden und die Ausgabe sollte auf “/dev/null” umgeleitet werden.
    Mein Eintrag in der crontab des Users “asterisk” (im Terminal mit “crontab -e -u asterisk”) sieht so aus, damit funktioniert der Aufruf:
    */15 * * * * /usr/local/sbin/csg-trunk-alert > /dev/null 2>&1

    3. Zum Skript selbst:
    Wie hop schon geschrieben hat fragt das Skript ja eigentlich keine fehlerhaften Trunks ab sondern nur funktionierende (“Status = Registered”). Das Skript verschickt als erst dann eine Mail, wenn tatsächlich kein einziger Trunk mehr registriert ist.
    Der umgekehrte Fall ist aber auch nicht schwieriger, hier mein Skript (basierend auf dem Beispiel), das schon beim ersten ausgefallenen Trunk eine Mail verschickt (entspricht genau dem, was hop schon geschrieben hat, das habe ich aber erst danach gesehen):

    #!/bin/bash
    peername=MYTELCO
    runtest=[ /usr/sbin/asterisk -rx “pjsip show registrations” ] | grep “Unknown\|Unreachable\|Unregistered\|Forbidden\|Rejected”
    if [[ $? = 0 ]]; then
    echo “Mindestens ein Trunk ist ausgefallen”
    echo “Mindestens ein Trunk ist ausgefallen-bitte prüfen” | mail -s “FreePBX-Trunk ausgefallen” -rAbsendermail Empfängermail
    else
    echo “Alles in Ordnung”
    fi

    Viele Grüße,

    Dieter

    1. Hallo,
      ich hatte schon länger vor das Script zu ändern, bin leider nur noch nicht dazu gekommen. Ich habe die letzten beiden Posts zu diesem Beitrag jetzt als Anlass genommen, dass auch endlich mal zu machen. Also danke nochmals für den kleinen Anschubser. Alles andere, dh. Crontab, Speicherort usw. habe ich gelassen wie bisher, da es auf die Funktion keinen Einfluss hat. Es ist ja jedem Leser unbenommen den Hinweisen in Deinem Kommentar zu folgen.
      Also nochmals danke.
      Ich bitte aber um eines: Fangt bitte jetzt keine Diskussion über das Für und Wider des einen oder anderen Speicherortes oder des Ausführens von crontab unter root oder einem Benutzer an. Das hier ist kein Linux-Forum. Hier geht es um die FreePBX.
      Grüße

  4. Hallo Gemeinde, hallo Hr. Griebsch,
    ich habe ebenfalls mehrere Hauptleitungen registriert. Zum Test habe ich nicht wie bei Ihnen im Video die Amtsleitung deaktiviert (da diese bei mir dann nicht angezeigt wird wenn ich pjsip show registrations mache, sondern absichtlich einen falschen Benutzernamen angegeben. Nun steht diese eine Leitung auf Rejected… Ich lasse das Script ausführen (also das abgeänderte Script vom März) und das Script meldet “Alles in Ordnung”… wo könnte der Fehler liegen?

    Hier nochmal das Script:
    #!/bin/bash
    peername=MYTELCO
    runtest=[ /usr/sbin/asterisk -rx “pjsip show registrations” ] | grep “Unknown\|Unreachable\|Unregistered\|Forbidden\|Rejected”
    if [[ $? = 0 ]]; then
    echo “Mindestens ein Trunk ist ausgefallen”
    echo “Mindestens ein Trunk ist ausgefallen-bitte prüfen” | mail -s “FreePBX-Trunk ausgefallen” -rinfo@XXXXXXXXX info@XXXXXXXXX
    else
    echo “Alles in Ordnung”
    fi

    Über Feedback würde ich mich freuen… Herzlichen Dank

    1. In dem Script sind einige Zeichen falsch. Die Anführungszeichen (“) müssen gegen Hochkommas (‘) ausgetauscht werden.
      Ich habe das Script auch entsprechend geändert und wieder zum Download bereitgestellt.

      Grüsse

  5. Sehr guter Beitrag und Blog.
    Wir haben das Script für uns angepasst, da uns folgendes gestört hat:
    – Trunk Status “Unavailable” wird nicht berücksichtigt.
    – bei einem Trunk Ausfall wird alle 15 Minuten eine E-Mail versendet.
    – Es wird keine E-Mail versendet wenn der Trunk wieder online ist.
    – Es wird in der E-Mail nicht mitgeteilt welcher Trunk offline ist.

    Unsere Änderung:
    Wenn ein Trunk dauerhaft offline ist, wird nach dem Versand einer Ausfallmeldung per E-Mail eine definierte Wartezeit gewartet bevor erneut eine E-Mail versendet wird.
    Sind alle Trunks wieder online wird ebenfalls eine E-Mail versendet.
    Die Ausfallmeldung per E-Mail beinhaltet die Namen der Trunks die ausgefallen sind.
    Die Prüfung der Trunks erfolgt auch auf “Unavailable”.

    Es muss noch eine Status Datei angelegt und entsprechende Rechte vergeben werden, sowie den Pfad zur Datei im Script angepasst werden:

    Hier unser angepasster code:
    #!/bin/bash

    statusdatei=”Pfad/zur/Datei.txt”
    status=$(cat $statusdatei)
    fehler=0
    pjsipfehler=””
    wartezeit=26
    # Wartezeit ist abhaengig davon wie oft das script ausgefuehrt wird und wie oft eine E-Mail versendet werden soll
    # wartezeit = 60 / [cronjob alle x min] * [E-Mail max. alle x Stunden] + 2
    #(cronjob alle 15 min, E-Mail max. alle 6 Stunden = 60 / 15 * 6 + 2)

    /usr/sbin/asterisk -rx ‘pjsip show registrations’ | grep ‘Unknown\|Unreachable\|Unregistered\|Forbidden\|Rejected\|Unavailable’
    if [[ $? = 0 ]]; then
    fehler=1
    echo “Mindestens ein pjsip Trunk ist ausgefallen”
    pjsipfehler=”$(/usr/sbin/asterisk -rx ‘pjsip show registrations’ | grep ‘Unknown\|Unreachable\|Unregistered\|Forbidden\|Rejected\|Unavailable’ | cut -d ‘/’ -f1)”
    else
    echo “pjsip Trunks – Alles in Ordnung”
    fi

    if [[ $fehler = 1 && $status -le 1 ]]; then
    echo -e “Folgende pjsip Trunks sind ausgefallen:\n$pjsipfehler” | mail -s ‘FreePBX-Trunks ausgefallen’ -rAbsender Empfänger
    echo “2” > $statusdatei

    elif [[ $fehler = 0 && $status != 0 ]]; then
    echo -e “Alle pjsip Trunks sind online” | mail -s ‘FreePBX-Trunks alle erreichbar’ -rAbsender Empfänger
    echo “0” > $statusdatei

    elif [[ $status != 0 && $status -lt $wartezeit ]]; then
    status=$(($status+1))
    echo “$status” > $statusdatei
    fi

    if [[ $status -ge $wartezeit ]]; then
    echo “1” > $statusdatei
    fi

  6. bischen bockig ist das allerdings dann doch noch.

    Irgendwie vermutlich eine blöde Windows-Formatierung mit versteckt.
    ich sehe:
    /usr/local/sbin/csg-trunk-alert
    “pjsip Trunks – Alles in Ordnung”
    erreichbar’ contains invalid character ‘\342’

    –> das hat was mit white-spaces zu tun.
    Ausserdem wird “0” (mit Anführungszeichen) in die Statusdatei geschrieben. Das kann nicht mit -ge verglichen werden.

  7. Das sind Fehler im Skript von Michael. Nicht von Hr. Griebsch.
    Ich arbeite aus Prinzip nicht mit Windows-Rechnern, sondern nur unter Linux mit ssh und nano.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.