Szukaj

Kamailio część 2: Uruchomienie monitorowania SIP i debugowania ruchu

Kamailio część 2: Uruchomienie monitorowania SIP i debugowania ruchu

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 w kamailio.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)
  • 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.

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.

Share this post

Masz pytania lub potrzebujesz oferty?

Skontaktuj się z naszym doradcą.

Popularne wpisy

Powiązane posty

Projekt wystartował!

Monitorowanie i raportowanie Twojego serwera VoIP