Po zainstalowaniu Kamailio i skonfigurowaniu podstawowych ustawień, kluczowym krokiem jest zapewnienie odpowiedniego monitorowania oraz debugowania ruchu SIP. Dzięki tym narzędziom będziesz w stanie lepiej zrozumieć, jak Kamailio przetwarza połączenia, identyfikować problemy oraz optymalizować działanie systemu.
W tym wpisie pokażę, jak włączyć i skonfigurować różne opcje monitorowania SIP w Kamailio, takie jak logowanie komunikatów SIP, wykorzystanie narzędzi do analizy ruchu sieciowego oraz aktywowanie trybu debugowania. Dzięki tym technikom będziesz mógł efektywnie śledzić i rozwiązywać potencjalne problemy w swojej infrastrukturze komunikacyjnej.
Niniejszy wpis to kontynuacja serii o Kamailio. Poprzedni artykuł znajdziesz w tym miejscu: Kamailio część 1: Instalacja Kamailio 6 na Debian 12 (z obsługą MySQL)
Spis treści
1) Wymagania wstępne
Oczywiście jest mnóstwo narzędzi, które umożliwiają monitorowanie pakietów SIP lub zbieranie logów z aplikacji. Dzisiaj skupimy swoja uwagę na kilku najprostszych narzędziach:
- tcpdump – narzędzie na przechwytywania i analizowania pakietów sieciowych (w tym komunikacji SIP)
- sngrep – narzędzie umożliwiające wyświetlanie przepływu komunikatów połączeń SIP z poziomu terminala
- rsyslog – usługa umożliwiająca zbieranie logów
Przyjrzyjmy się im bliżej.
2) tcpdump
Jeśli chcesz przechwycić ruch SIP i analizować go później w Wireshark, tcpdump
jest idealnym narzędziem do tego celu. Kamailio, jako potężny serwer SIP, wymaga dokładnej analizy pakietów w celu debugowania i optymalizacji.
Jeśli nie posiadasz jeszcze tcpdump, możesz je zainstalować za pomocą polecenia:
apt install tcpdump
Przykładowe polecenie może wyglądać następująco:
tcpdump -n -s0 port 5060 or port 5061 -vvv -w /path/to/sip_logs.pcap
Oto wyjaśnienie powyższego polecenia:
- -n – wyłącza rozpoznawanie nazw hostów, co przyspiesza przechwytywanie
- -s0 – ustawia rozmiar przechwytywanego pakietu na maksymalny (domyślnie tcpdump tnie pakiety do 65535 bajtów)
- port 5060 – przechwytuje ruch SIP dla protokołu UDP
- -vvv – umożliwia bardziej szczegółowy tryb wyświetlania pakietów
- -w /path/to/sip_logs.pcap – zapisuje przechwycone pakiety do pliku .pcap, który można później otworzyć w Wireshark
Oczywiście możliwości przechwytywania jest dużo więcej. Poniżej zamieszczamy kilka przykładów.
Przechwytywanie tylko wiadomości INVITE i REGISTER:
tcpdump -s0 -A port 5060 | grep -E 'INVITE|REGISTER'
Filtrowanie ruchu SIP od konkretnego klienta SIP (według adresu IP):
tcpdump src host 192.168.1.100 and port 5060
Zbieranie ruchu dla konkretnej domeny SIP:
tcpdump -s0 -A port 5060 | grep 'sip:example.com'
Monitorowanie pakietów SDP w zapytaniach SIP:
tcpdump -s0 -A port 5060 | grep 'm=audio'
Monitorowanie kilku protokołów jednocześnie (np. UDP/5060, TCP/5060, TLS/5061):
tcpdump port 5060 or port 5061
Oczywiście możliwości jest o wiele więcej. Tutaj chcemy po prostu zasygnalizować różne opcje wykorzystania narzędzia tcpdump.
Więcej informacji znajdziesz w oficjalnej dokumentacji.
3) sngrep
sngrep jest idealnym narzędziem do analizy ruchu SIP na żywo i badania historii połączeń VoIP. W przeciwieństwie do tcpdump, które przechwytuje wszystkie pakiety, sngrep skupia się na warstwie aplikacyjnej protokołu SIP, umożliwiając wygodne śledzenie sesji w czytelnej formie.
Najważniejsze funkcje sngrep:
✅ Przechwytuje i wyświetla wiadomości SIP w czasie rzeczywistym
✅ Wizualizuje kompletne sesje VoIP w formie drzewa połączeń
✅ Umożliwia filtrowanie pakietów według numerów, adresów IP i metod SIP
✅ Obsługuje eksport przechwyconych wiadomości do plików .pcap do dalszej analizy w Wireshark
✅ Pozwala na łatwe debugowanie rejestracji, negocjacji kodeków i problemów z sygnalizacją
Pakiet sngrep możesz skompilować ręcznie lub zainstalować bezpośrednio z repozytorium.
apt install sngrep
Poniżej zamieszczamy kilka przykładów.
Przechwytywanie wszystkich pakietów SIP:
sngrep
Monitorowanie i analiza rejestracji użytkowników SIP:
sngrep -f "sip.method == REGISTER"
Śledzenie wiadomości SIP na porcie 5060 i zapis do pliku:
sngrep -p 5060 sngrep -I /path/to/capture.pcap
Więcej informacji na temat tego narzędzia znajdziesz w oficjalnym repozytorium na stronie Githuba.
4) rsyslog i konfigurowania debugowania w Kamailio
Po przechwytywaniu pakietów SIP narzędziami takimi jak tcpdump i sngrep, kolejnym krokiem w diagnostyce Kamailio jest zbieranie i analiza logów bezpośrednio z naszej aplikacji. Kamailio domyślnie używa systemowego mechanizmu logowania, takiego jak syslog, który można łatwo skonfigurować z rsyslog do przechowywania i filtrowania logów w dedykowanych plikach.
Jeśli nie posiadasz jeszcze usługi rsyslog to najpierw ją zainstalujmy, dodajmy nowy plik logów, nadajmy odpowiednie uprawnienia i dodajmy usługę do autostartu.
apt install rsyslog
systemctl enable rsyslog
touch /var/log/kamailio.log
chown kamailio: /var/log/kamailio.log
Jeśli chcesz mieć dedykowany plik rsyslog dla Kamailio, przechwytywanie logów możesz ustawić w nowym pliku np. /etc/rsyslog.d/kamailio.conf
. Możesz tez po prostu dodać dodatkową linię na końcu /etc/rsyslog.conf
.
echo "local0.* -/var/log/kamailio.log" >> /etc/rsyslog.conf
Powyższe polecenie ma następujące parametry:
- local0.* – wszystkie poziomy logowania (*) dla
LOG_LOCAL0
mają być rejestrowane.LOG_LOCAL0
to specjalna kategoria logów, którą ustawiliśmy w Kamailio (log_facility=LOG_LOCAL0
wkamailio.cfg
) - -/var/log/kamailio.log – ścieżka do pliku, w którym będą zapisywane logi. „-” przed ścieżką oznacza, że rsyslog użyje buforowanego trybu zapisu (zmniejsza wpływ na wydajność systemu)
- >> /etc/rsyslog.conf – zapiszemy konfigurację do globalnego pliku konfiguracyjnego rsyslog
Po edycji pliku rsyslog.conf
należy zrestartować rsyslog, aby zmiany zaczęły działać:
systemctl restart rsyslog
Od teraz możesz śledzić logi Kamailio, najlepiej w osobnym oknie terminala.
tail -f /var/log/kamailio.log
Aby upewnić się, że Kamailio generuje odpowiednie logi, należy dostosować konfigurację w pliku kamailio.cfg
. Zależnie od konfiguracji plik może znajdować się pod adresem /etc/kamailio/kamailio.cfg
.
Odszukaj w nim miejsce odpowiadające za konfigurację debugowania.
Oto, co oznaczają poszczególne ustawienia logowania w pliku kamailio.cfg
:
- Poziom logowania (
debug=DBGLEVEL
)- 3 = DBG (Debug) – najbardziej szczegółowe logi (do debugowania)
- 2 = INFO – ogólne informacje o działaniu serwera
- 1 = NOTICE – ważniejsze komunikaty, ale jeszcze nie ostrzeżenia
- 0 = WARN (Warning) – ostrzeżenia o potencjalnych problemach
- -1 = ERR (Error) – błędy wymagające uwagi
- Logowanie na standardowe wyjście (
log_stderror=no
)- no – logi są zapisywane do syslog zamiast być wyświetlane w terminalu
- yes – logi będą drukowane w terminalu (lub można użyć polecenia
kamailio -E
)
- Diagnostyka pamięci
- memdbg=5 – poziom debugowania pamięci (5 = wysoka szczegółowość)
- memlog=5 – kontrola rejestrowania zdarzeń związanych z pamięcią
- Logowanie przez syslog/rsyslog (
log_facility=LOG_LOCAL0
)- LOG_LOCAL0 – określa kategorię logowania, co pozwala na filtrowanie logów w rsyslog (opisana powyżej linia
local0.* -/var/log/kamailio.log
)
- LOG_LOCAL0 – określa kategorię logowania, co pozwala na filtrowanie logów w rsyslog (opisana powyżej linia
- Format prefiksu w logach (
log_prefix="{$mt $hdr(CSeq) $ci} "
)- domyślny format logów zacznie się od informacji o typie wiadomości SIP (
$mt
), nagłówku CSeq ($hdr(CSeq)
) i identyfikatorze dialogu Call-ID, pozwalającym śledzić sesję SIP ($ci
). Możesz tutaj wrzucić dowolne zmienne, które uznasz za praktyczne. Ich listę możesz znaleźć np. na tej liście.
- domyślny format logów zacznie się od informacji o typie wiadomości SIP (
Dzięki tym ustawieniom można precyzyjnie kontrolować poziom logowania, formatowanie logów i sposób ich przechowywania. Jeśli chcesz więcej szczegółów – zwiększ debug=3
i ustaw log_stderror=yes
. Jeśli chcesz odciążyć system – ustaw debug=1
i zapisuj logi w dedykowanym pliku przez rsyslog.
Trzeba jednak zaznaczyć, że domyślnie ustawienie zmiennej debug
nie ma wartości liczbowej, a zmienną DBGLEVEL
. Jest ona zdefiniowana w kodzie nieco wcześniej i ma domyslną wartość 2.
Oczywiście możesz ustawić ją ręcznie. Może też wykorzystać definicję zmiennej WITH_DEBUG, żeby w szybszy sposób kontrolować poziom logowania. Wystarczy, że na początku kodu dodasz nową definicję.
#!define WITH_DEBUG
Dzięki temu bardzo szybko możesz zmienić poziom debugowania.
5) Śledzenie routingu z xlog()
Kamailio pozwala na dynamiczne logowanie zdarzeń w skryptach routingu za pomocą modułu xlog
. Jest to przydatne do debugowania i śledzenia przepływu wiadomości SIP w konfiguracji.
Przykładowy wpis może wyglądać następująco:
xlog("L_INFO", "Authenticating REGISTER - ask for password");
W efekcie w pliku kamailio.log
zaczną się pojawiać dodatkowe informacje.
Funkcja xlog([ [facility,] level,] format)
umożliwia zapisanie komunikatu do logów Kamailio w określonym poziomie szczegółowości. Najprostsza konfiguracja może się składać z trzech parametrów:
- facility – określa, do jakiej kategorii logów (syslog facility) zostanie przypisany komunikat
- level – poziom szczegółowości logowania (np. L_INFO, L_ERR)
- format – treść komunikatu, w której można używać zmiennych SIP
Przykładowe polecenie może wyglądać tak:
xlog("L_INFO", "Received SIP: $rm from $si");
Żeby sprawdzić wszystkie możliwe opcja wykorzystania xlog() lub alternatyw typu xdbg(format), xinfo(format), xnotice(format), xwarn(format), xerr(format), xbug(format), xcrit(format), xalert(format) polecam przejrzeć dokument https://kamailio.org/docs/modules/6.0.x/modules/xlog.html
W tej części serii zaprezentowaliśmy, jak uruchomić monitorowanie SIP i debugowanie ruchu w Kamailio. Dzięki aktywacji odpowiednich funkcji logowania i narzędzi debugujących, zyskujesz pełną kontrolę nad analizą komunikatów SIP i możesz łatwo diagnozować problemy z połączeniami. Monitorowanie to kluczowy element w zarządzaniu dużymi instalacjami Kamailio, a jego wdrożenie pozwala na szybsze wykrywanie błędów i optymalizację działania systemu. Możliwości oczywiście są o wiele większe, a nalepszym przyjacielem oczywiście będzie Kamailio Cookbook.
W kolejnym poście zainstalujemy Siremis – graficzny interfejs do Kamailio.
Jeżeli chciałbyś monitorować wszystko, co dzieje się na Twojej centrali, wypróbuj nasze autorskie oprogramowanie VoiperoManager.
Instalacja i konfiguracja zajmuje kilka minut, a system możesz mieć całkowicie za darmo.
Przeczytaj, co potrafi nasz system VoiperoManager w zakresie monitorowania na żywo i raportowania systemów VoIP opartych na Asterisku.