Wstęp
Jeśli chcesz mieć szybki wgląd w stan swojej sieci LAN oraz pracujących w niej urządzeń to ciekawym rozwiązaniem jest system Observium. Jest to aplikacja pozwalająca monitorować za pomocą protokołu SNMP różne urządzenia pracujące w sieci LAN jak i WAN. Protokół ten jest stosowany od wielu lat, a zatem działa na prawie każdym urządzeniu sieciowym oraz IoT.
Oprogramowanie Observium można zainstalować na Linux, Windows, w maszynie wirtualnej oraz w kontenerze Docker. W tym wpisie pokazane zostanie rozwiązanie bazujące na kontenerach Docker (na systemie Linux Ubuntu) oraz na kontenerach RouterOS. Instalacja Docker dla Linux jest opsiana tutaj.
Całość tego systemu składa się z wielu współpracujących programów ale najważniejsze to:
- programy SNMP do odpytywania urządzeń o ich stan
- baza danych (mySQL/mariaDB)
- interfejs WWW
Observium w Docker na Ubuntu
To rozwiązanie bazuje na dwóch kontenerach Docker.
- bazie danych mySQL
- pakiecie Observium
W sieci znajdziemy wiele gotowców uruchomienia stosu kontenerów (stosu mikrousług) ale dość ciekawym rozwiązanie jest pokazane tutaj. Mamy tutaj dwie opcje uruchomienie systemu:
- przygotować pliki konfiguracyjne kontenerów ręcznie
- wykorzystać gotowca ‚docker compose’
Ręczne przygotowanie kontenerów
W tym rozwiązaniu przygotujemy dwa pliki konfiguracyjne dla kontenera z bazą danych oraz kontenera Observium. Najpierw tworzymy katalog na dane (np w naszym katalogu domowym):
# mkdir -p observium-docker/{data, logs, rrd}
To polecenia utworzy katalog ‚observium-docker’ a w nim trzy katalogi: data, logs, rrd. Ważne aby znać pełną ścieżkę do tych katalogów ponieważ będziemy jej używać poniżej. W tym przykładzie zakładamy, że ta ścieżka to: ‚/home/yyy/docker/observium-docker’. W przypadku Twojej instalacji zdecyduj gdzie umieścisz katalog z całym projektem, zwłaszcza zwróć uwagę na nazwę katalogu domowego (Twój login).
Teraz przygotujemy plik na konfigurację kontenera z bazą danych: tworzymy plik np. za pomocą polecenia:
# nano observium_base.sh
Wpisujemy do niego polecenia:
docker run --name observium_base \ -v /home/yyy/observium-docker/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=zaq12wsx \ -e MYSQL_USER=observium \ -e MYSQL_PASSWORD=zaq12wsx \ -e MYSQL_DATABASE=observium \ -e TZ=$(cat /etc/timezone) \ mariadb
Polecenie ‚-v /home/yyy/observium-docker/data:/var/lib/mysql’ zamontuje pierwszy z podanych katalogów z fizycznego komputera do wnętrza kontenera do katalogu ‚/var/lib/mysql’. Ustal też swoje hasła do bazy dla roota i zwykłego użytkownika. Strefa czasowa zostanie pobrana z systemowego pliku /etc/timezone i dla nas to ‚Europe/Warsaw’. Nazwa bazy danych to ‚obserwium’ tak samo nazywa się zwykły użytkownik w bazie. Opcje je możesz dostosować do swoich potrzeba ale wymagane będzie skorzystanie z tych nazw w dalszym toku konfiguracji. Ostatni linia to nazwa kontenera jaki zostanie pobrany z skonfigurowanego w Twoim systemie huba Dockera.
Uwaga: domyślny port bazy danych pracuje na TCP 3306 zatem upewnij się, że na twoim systemie jest on wolny. Jeśli nie, to zmień go w kontenerze przez opcję: ‚-p 10000:3306’ czyli teraz kontener na Twoim komputerze otworzy port 10000 i przekieruje z niech ruch na port wewnętrzny do Dockera, do bazy danych na 3306. Ponieważ w podanym przykładzie na maszynie z naszym Dockerem już pracuje mySQL na porcie 3306 trzeba dodać jedną opcję do powyższego pliku (przed linię z ‚mariadb’):
-p 10000:3306 \
Podaj taki port (pierwszy w tym wpisie) jaki masz wolny, plik zapisz. Jakie porty masz aktualnie otwarte na komputerze sprawdzisz poleceniem np.: ‚netstat | less’ pod Linix albo ‚netstat | more’ pod Windows.
Plik zapisujemy i tworzymy kolejny z systemem Observium:
# nano observium.sh
Wpisujemy do nie go polecenia:
docker run --name observium --link observium_base:observium_base \ -v /home/yyy/observium-docker/logs:/opt/observium/logs \ -v /home/yyy/observium-docker/rrd:/opt/observium/rrd \ -e OBSERVIUM_ADMIN_USER=admin \ -e OBSERVIUM_ADMIN_PASS=zaq12wsx \ -e OBSERVIUM_DB_HOST=observium_base \ -e OBSERVIUM_DB_USER=observium \ -e OBSERVIUM_DB_PASS=zaq12wsx \ -e OBSERVIUM_DB_NAME=observium \ -e OBSERVIUM_BASE_URL=http://192.168.53.110:8888 \ -e TZ=$(cat /etc/timezone) \ -p 8888:80 \ mbixtech/observium:latest
Zauważ, że powtarzają się tu nazwy z poprzedniego pliku: katalog na dane, nazwa kontenera z bazą, nazwa bazy, nazwa uzytkownika bazy i hasło itp. Jak coś zmieniasz w pliku pierwszej konfiguracji (bazy) to musisz to ująć tez i tu. Podany adres IP to adres maszyny na której pracuje Twój Docker – dostosuj do do swojej konfiguracji. Podany port (8888) to port na jakim Docker nasłuchuje żądań klientów WWW. Linia ‚-p 888:80’ dokonuje przekierowania port 8888 z komputera fizycznego na port 80 pracujący wewnątrz Dockera. Na tym porcie zalogujemy sie do panelu WWW aplikacji Observium. Sprawdź czy masz ten port wolny np za pomocą:
# netstat -aon | grep '8888' (Linux) # netstat -aon | find '8888' (Windows)
Jak nie otrzymasz żadnego wyniku to możesz ten port użyć, jak coś się pokaże to daj inny. Teraz czas na uruchomienie kontenerów. Ważną kwestia jest kolejność: najpierw baza a potem Observium ponieważ Observium aktywnie korzysta z bazy i musi ona być zainicjalizowana jako pierwsza.
Uwaga do innego portu naszej bazy: ponieważ kontenery łączą się wewnętrzną magistralą Dockera (opcja –link) to w konfiguracji Observium nic nie trzeba zmieniać.
Jak już mamy pliki konfiguracyjne to czas na uruchomienie kontenerów. najlepiej w osobnych terminalach, a do tego przyda sie program screen lub tmux. Musimy jeszcze nadać uprawnienia do uruchamiania plików:
# chmod +x observium_base.sh
# chmod +x observium.sh
Otwieramy w nim dwa okna i w pierwszym uruchamiamy kontener z bazą a w drugim z Observium. Do uruchomienia będzie wymagane sudo, a pierwsze uruchomienie powoduje, że Docker pobiera kolejne warstwy kontenera co może chwilkę zająć. Wygląda to jak niżej:
Kiedy warstwy zostaną pobrane kontener powinien się uruchomić, chyba że mamy błędny plik. Efekt na konsoli powinien być jak niżej:
Czy to działa? Sprawdzisz za pomocą polecenia mysql (o ile masz je zainstalowane) ale jak mamy taki ekran to działa. Do bazy zalogujesz się za pomocą (tylko jak masz zainstalowany w systemie mySQL/mariaDB):
# mysql -u root -p -P 10000
Powinno dać taki efekt (to właściwy serwer ba bo widać w nim bazę dla Observium):
Teraz uruchamiamy drugi kontener (drugie okno tmux):
# sudo ./observium.sh
I czekamy na pobranie (to chwile potrwa bo około 400MB jest do pobrania). Jak się uruchomi poprawnie to mamy:
Uwaga: żadnego z tych okien nie zamykaj bo pracują w nim kontenery, można je uruchomić z opcją ‚-d’ i wtedy przejdą do tła a konsola zostanie zwolniona. Jeśli wszystko poszło dobrze to nasz Observium pracuje na adresie i porcie podanym w drugim pliku, zalogujemy się zatem:
Automatyczne przygotowanie kontenerów
Observium w kontenerze RouterOS
Konfiguracja SNMP
Linux
- Instalacja
Instalacja wymaga aktualizacji pakietów oraz instalacji:
# sudo apt update # sudo apt install snmp snmpd snmp-mibs-downloader
- Konfiguracja
Pojawi sie katalog /etc/snmp a w nim dwa pliki: dla klienta ‚snmp.conf’ oraz dla serwera ‚snmpd.conf’ My skonfigurujemy tu ten drugi aby można było odpytywać nasz komputer:
# sudo nano /etc/snmp/snmpd.conf
Domyślnie po instalacji usługa działa tylko na interfejsie pętli zwrotnej: szukamy linii z: ‚agentaddress 127.0.0.1,[::1]’ – to uruchamia usługe SNMP tylko na adresie pętli zwrotnej a my chcemy dostać się do parametrów SNMP z sieci LAN zatem komentujemy ta linie i wstawiamy:
# Dla IPv4 agentaddress udp:161 # rocommunity public 0.0.0.0/0 # Dla IPv6 agentaddress udp6:161 #rocommunity6 public ::/0
Linie zakomentowane to tak na wypadek gdyby w dalszej części pliku ich nie było (ale powinny być) i mówią o nazwie wspólnowy.
- Testowanie
Przeładujemy usługę SNMP:
# sudo systemctl reload snmpd
I możemy sprawdzić czy działa i na jakim porcie nasłuchuje:
# netstat -aon | less
Powinno być cos takiego:
Widać, że SNMP pracuje na protokole IPv4 i IPv6 na porcie 161. Od teraz możemy nasz host monitorować w Observium i nie tylko. za pomocą snmpwalk sprawdzimy co tam piszczy w naszej maszynie. Składania:
# snmpwalk -v 2c -c public 127.0.0.1
lub gdy pracujemy na innej maszynie (IP dostosuj do swojego):
# snmpwalk -v 2c -c public 192.168.55.1
- Maszyna za NATem
Windows
RouterOS
Tutaj nic nie trzeba instalować tylko włączyć. Na konsoli wygląda to tak (za pomocą WinBob menu IP/SNMP):
Klikamy w Enabled, ustalamy dane kontaktowe i lokalizacje (opcjonalnie) oraz ustalamy wersje (2 nie obsługuje szyfrowania, 3 już tak). Klikając w Communities jeszcze ustalamy nazwę wspólnoty (domyślnie jest: public). Tyle podstawowej (nieszyfrowanej) komunikacji. Ta opcja pozwala tylko czytać z urządzenia, co nam wystarczy. Czy działa. Sprawdzimy na Linux poleceniem:
# snmpwalk -v 2c -c public 192.168.55.1
Adres podaj z Twojej sieci. Jak działa przeleci po ekranie masa informacji.
Konfiguracja Observium
Sprzęt do Observium
Tutaj nic szczególnego nie potrzebujemy ponieważ całość nie zajmuje wiele zasobów. Przykładowa konfiguracja w tym wpisie pracuje na bardzo starym komputerku: płyta Mini-ITX Gigabyte GS-J1900N-D3V, wbudowany procesor (bez wentylatora zatem super cichy), 8 GB RAM DDR4, dysk SSD, dwa interfejsy LAN (wystarczy jeden). Taka prosta maszynka i można na niej, dla małej sieci, prowadzić monitoring parametrów i wiele więcej. Poniżej widok komputerka z kontenerami:
Zasilanie z zasilacz 12V 5A (buforowy) i jedziemy z różnymi tematami na Linux 🙂









