[Frage] Ausfall von SIP-Leitungen signalisieren?

sunnyman

Mitglied
Mitglied seit
13 Jan 2006
Beiträge
248
Punkte für Reaktionen
0
Punkte
16
Hallo Forum,

man kennt das. Nicht immer klappt das Zusammenspiel von Asterisk und SIP-Providern 100%ig, aber auch bei professionellen SIP-Providern kann es ja durchaus passieren, dass die Verbindung mal ausfällt. Am Telefon sehe ich das aber nicht, da die SIP-Registrierung zum Asterisk ja immer schön stabil ist.

Gibts in Asterisk eine integrierte Mechanik, die man nutzen kann beim Ausfall einer Leitung (also wenn bsp. ein Peer in den Status UNREACHABLE rutscht) Aktionen auszulösen? Bei mir ist aktuell Asterisk 11 im Einsatz.
 

glotzi

Neuer User
Mitglied seit
26 Nov 2004
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
R

rentier-s

Guest
Vorausgesetzt qualify ist an, feuert Asterisk das AMI Event PeerStatus. Um das zu überwachen, brauchst Du einen AMI Listener Daemon, ich benutze PAMI.

Ob es für die Änderung des Registrierungsstatus direkt ein AMI Event gibt weiß ich nicht auswendig.

Alternativ jede Minute ein Skript laufen lassen, das `asterisk -rx sip show registry` oder per AMI SIPpeerstatus auswertet.
 

woprr

Aktives Mitglied
Mitglied seit
10 Jun 2007
Beiträge
2,997
Punkte für Reaktionen
7
Punkte
38
Zuletzt bearbeitet:
R

rentier-s

Guest
(Wie) kriegt man damit den Status "Provider nicht erreichbar"? Ich dachte da kommt zB. INUSE und dergleichen, also würde die LED am BLF leuchten, sobald jemand extern telefoniert?
 

woprr

Aktives Mitglied
Mitglied seit
10 Jun 2007
Beiträge
2,997
Punkte für Reaktionen
7
Punkte
38
Weiss nicht. Twinkle hat bei den Buddies mit 0xxxxxxx nen smiley, bei 0-Lineausfall ein rotes Kreuz angezeigt.
 

sunnyman

Mitglied
Mitglied seit
13 Jan 2006
Beiträge
248
Punkte für Reaktionen
0
Punkte
16
Danke für eure Tipps. Bei dem Rechner für den ich es konkret brauche handelt es sich um meine Heiminstallation von einem Rapberry Pi (Model B, also Version 1 wohlgemerkt :) ). Daher sind die Ressourcenmonster wie die großen Monitoring-Klötze nix.
PAMI habe ich mir angeschaut, aber das scheint mir für diesen Zweck auch etwas mit Kanonen auf Spatzen geschossen zu sein. Zumindest eine recht hohe Lernkurve, sich erstmal in das Framework und auch in die Handhabung mit dem Paketmanager einzuarbeiten.

Ich werde es wohl ähnlich der zweiten von rentier vorgeschlagenen Lösung umsetzen und mir ein Skript basteln das ich per cron aufrufen lasse.Hier http://the-asterisk-book.com/1.6/asterisk-manager-api.html gibt es eine schöne Lösung mittels expect, so werde ich das dann auch umsetzen.

Ich warte also mal bis zum nächsten Ausfall um dann genau nachzuschauen wie sich die Fehlersituation darstellt. Ich werde berichten und das Skript hier dann ggf. posten.
 

sparkie

Aktives Mitglied
Mitglied seit
13 Nov 2005
Beiträge
1,592
Punkte für Reaktionen
19
Punkte
38
als kleine Einstiegshilfe mein eigenes Trivial-Script mit dem ich per cronjob einen SIP Server (auf Raspberry 3) ueberwache. Das Script rufe ich direkt per cronjob auf. Wenn es keine Vorfaelle gibt wird nichts ausgegeben. Ansonsten gibt es eine Email mit Status so wie halt bei cronjobs ueblich.
Wenn man DEBUG=1 setzt, dann wird immer der Status ausgegeben.
Code:
#!/bin/sh

cat > $0_$$.awk << !

BEGIN {
    system("rm $0_$$.awk")

    DEBUG = 0              # set this for some debug output
    MACH = "sip-server-ip" # remote machine name
    OKS_CHECK =  5         # how many 'status=ok' peers are required
    REGS_CHECK = 7         # how many 'Registered hosts' are required
    
    CMD = "ssh -o ConnectTimeout=5 " MACH " /usr/sbin/asterisk -nrx \\\\\"sip show peers\\\\\"\\\; /usr/sbin/asterisk -nrx \\\\\"sip show registry\\\\\" 2>&1"
    while (CMD | getline line > 0) {
        SAVE[CNT++] = line
        if (match(line, " OK ")) ++OKS_FOUND
        if (match(line, " Registered ")) ++REGS_FOUND
    }
    if (DEBUG \
     || OKS_FOUND < OKS_CHECK \
     || REGS_FOUND < REGS_CHECK) {
        for (i = 0; i < CNT; ++i) print SAVE[i]
        print "----------------------------"
        print "OKS_FOUND: "  OKS_FOUND  + 0 "/" OKS_CHECK
        print "REGS_FOUND: " REGS_FOUND + 0 "/" REGS_CHECK
        print "----------------------------"
    }
}
!
exec awk -f $0_$$.awk
 
Zuletzt bearbeitet: