Strona główna > Dalej żwawo siostry wiedźmy > Nagios, gammu i Huawei 1820 (USB)

Nagios, gammu i Huawei 1820 (USB)

23/09/2011

Od czasu do czasu walczę z systemami monitorującymi. Za każdym razem sytuacja wygląda idealnie do czasu gdy trzeba zacząć wysyłać powiadomienia SMS o awariach. Tutaj zawsze jest pod górę, zawsze coś jest ‚nie tak’. W 2006 roku zmagałem się z modemem Sony Ericsson GC89 (PCMCIA). Tym razem zderzyłem się z Huawei 1820 (USB).

Zabawa była dość prosta w zakresie instalacji i konfiguracji systemu (Debian 6), nagiosa (kompilowany, używam wersji 1.4 historycznie, oraz 3.2 jako docelowej) i gammu (paczkowane z dystrybucji). Pierwotne testy wypadały zadowalająco: SMS’y wychodziły, docierały i wszystko było w porządku. Po wdrożeniu na produkcji zonk! – powiadomienia SMS przestały działać.

Sprawdziłem wszystko co chciałem i mogłem. Modem wieszał się na sztywno, niedeterministycznie w przedziale od dwóch do ośmiu godzin, a próba jego reanimacji kończyła się każdorazowo komunikatem:

Error opening device. Unknown, busy or no permissions.

Jedynym rozwiązaniem było albo wypięcie i wpięcie modemu (gdy się było na miejscu), albo restart maszyny (gdy się przebywało poza firmą i zabrakło ‚zdalnej ręki’ kolegów z działu).

Problem z wysyłką powiadomień SMS okazał się na tyle skomplikowany, iż rozwiązanie go zajęło trochę czasu. Poniżej opisuję zmiany, które przyczyniły się do udrożnienia powiadomień.

1. Zamiana gammu na gammu-smsd.

Wymóg był oczywisty i wynikał z metodologii obsługi urządzeń USB (Huawei) w systemie. Ponadto Nagios musiał wysyłać powiadomienia w sposób pozwalający na przekazanie ich do odbiorców niezależnie od potencjalnych błędów modemu/systemu/demona – stąd przejście z gammu na gammu-smsd, którego mechanizmy kolejkowania zostały napisane naprawdę dobrze.

Tutaj uwaga: paczkowane gammu-smsd w Debianie 6 zawiera poważne błędy, które uniemożliwiają wysyłkę powiadomień w przypadku problemów z SMSC (czyli w moim przypadku: zawsze).

Na szczęście można obejść ten problem instalując paczki przygotowane dla Ubuntu. Wystarczy dodać poniższe repozytorium i zaktualizować system:

deb http://ppa.launchpad.net/nijel/ppa/ubuntu natty main

Dla leniwych podaję jeszcze zawartość pliku /etc/gammu-smsdrc

[gammu]
port = /dev/ttyUSB0
connection = at

[smsd]
PIN = ****
service = files
logfile = /var/log/smsd.log
maxretries = 2
debuglevel = 1
# commtimeout = 30

# kolejkowanie
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

2. Utrzymanie ciągłości działania modemu Huawei 1820 (USB).

Nie chcę opisywać ile dobrych rad wujka Google przetestowałem zanim doszedłem do rozwiązania, które sprawdza się na produkcji. Powiem, że było ich sporo, a moim głównym problemem okazały się zmiany wprowadzone w jądrze Linuksa od wersji 2.6.31, które praktycznie nieomal wykluczają modemy USB Huawei (i inne) z pracy ciągłej w systemie. Nieomal. Obejście problemu, które zastosowałem wygląda następująco:

2.1 Resetujemy podłączenie modemu USB.

Potrzebujemy do tego programu, który tworzymy sami w kilku krokach. Najpierw źródło (zapisać pod dowolną nazwą: u mnie reset.c):

Tu był kod, ale wordpress.com poszatkował go niemiłosiernie.

Obecnie plik reset.c do pobrania w formacie PDF (wiem, że to wredne rozwiązanie).

Następnie kompilacja i dodanie do systemu np. w /usr/local/sbin:

cc reset.c -o /usr/local/sbin/usbreset

Plikowi nadajemy prawa do wykonywania metodą ulubioną. Powstały tą metodą program restartuje urządzenia bazując na lokalizacji urządzenia. Metoda wywołania:

/usr/local/sbin/usbreset /dev/bus/usb/001/002

– gdzie 001 i 002 pobieramy via lsusb co w moim przypadku oznaczało:

Bus 001 Device 002: ID 12d1:14ac Huawei Technologies Co., Ltd.

2.1 Dodajemy zadanie cykliczne.

W moim przypadku wywołuję cyklicznie, w odstępach godzinnych (minimalny czas pracy ciągłej modemu Huawei 1820 na produkcji oscyluje w granicach 150 minut, ale jestem nadgorliwy), taki oto skrypt (/usr/local/sbin/huawei.sh):

Tu był kod, ale wordpress.com poszatkował go niemiłosiernie.

Obecnie plik huawei.sh do pobrania w formacie PDF (wiem, że to wredne rozwiązanie).

3. I jeszcze konfiguracja powiadomienia w Nagiosie.

W moim przypadku dodałem dwa wpisy w misccommand.cfg:

# definicje SMS
define command {
  command_name notify-host-by-sms
  command_line /usr/bin/printf "%b" "$DATE$ $TIME$ $SERVICEDESC$ $HOSTNAME$ $HOSTADDRESS$ $SERVICESTATE$ $HOSTOUTPUT$" | gammu-smsd-inject TEXT "$CONTACTPAGER$"
}

define command {
  command_name notify-service-by-sms
  command_line /usr/bin/printf "%b" "$DATE$ $TIME$ $SERVICEDESC$ $HOSTNAME$ $HOSTADDRESS$ $SERVICESTATE$ $SERVICEOUTPUT$" | gammu-smsd-inject TEXT "$CONTACTPAGER$"
}

– przy założeniu, że numer SMS odbiorcy deklarowany jest zmienną pager w define contact w deklaracjach kontaktów w Nagiosie oraz ustawiono metodę powiadamiania jako:

host_notification_commands notify-host-by-sms
service_notification_commands notify-service-by-sms

I to by było na tyle. Szczególne podziękowania dla Piotra za wysłuchiwanie przez ostatnie pół roku moich, przydługich momentami, monologów na temat obsługi urządzeń USB w systemach Linuksowych, oraz uczynienie uniwersalnym skryptu do restartów modemu.

  1. 30/08/2013 o 10:53

    Męczyłem się z tym modem Huawei’a też gdzieś od roku, dzięki za świetnego fixa :)

  2. 11/08/2014 o 09:59

    Właśnie testuję wysyłkę powiadomień z modemu Huawei E173 (ID 12d1:1c05 Huawei Technologies Co., Ltd.). Ciekawostką przyrodniczą jest fakt, że modem NIE WYMAGA (i NIE LUBI) resetów USB, oraz, że działa w trybie ciągłym bez nich (przez 4 dni testów nie zawisł ani razu). Wrzucam mu właśnie obciążenie wysyłką produkcyjną. Zobaczymy czy wytrzyma. Jeśli tak poszukam przyczyn takiego zachowania.

    Porównawczo model E353 nie daje się zastosować w żaden sposób do wysyłki SMS’ów. Nie pomaga mu nic, także:

    rmmod usb-storage
    modprobe usbserial vendor=0x12d1 product=0xXXXX

    – łącznie ze stosownymi zmianami w pliku:

    /lib/udev/rules.d/40-usb_modeswitch.rules

    Model E353 nie podłącza żadnego seriala bo nie i już.

  3. 12/08/2014 o 08:54

    Po kolejnym dniu testów stwierdzam, że do monitoringu z Nagiosem i powiadomieniami SMS Huawei E173 nadaje się wyśmienicie. I teraz pytanie: Ale jak to? Na to pytanie będę musiał znaleźć odpowiedź albowiem system bazowy (Debian 6) występuje w dokładnie tej samej wersji. Jądro się zmieniło … może tam? Nie wiem.

  1. No trackbacks yet.
Możliwość komentowania jest wyłączona.
%d blogerów lubi to: