Slajd 1/22
Konteneryzacja i orkiestracja systemów NMS
Cel slajdu: Przedstawienie paradygmatu konteneryzacji aplikacji monitoringu sieci, architektury silnika Docker oraz orkiestracji za pomocą Docker Compose.

Nowoczesne metody wdrażania infrastruktury monitoringu

Tradycyjna, manualna instalacja systemów NMS na poziomie systemu operacyjnego ustępuje miejsca konteneryzacji, gwarantującej powtarzalność, izolację usług oraz błyskawiczne aktualizacje.

  • Zakres modułu: Wdrożenie produkcyjnego stosu LibreNMS w środowisku Docker i Docker Compose na serwerze Linux Ubuntu 24.04 LTS
  • Dekompozycja na mikrousługi: Separacja bazy MariaDB, pamięci podręcznej Redis, bufora RRDcached, serwera WWW Nginx oraz dyspozytora zadań Dispatcher
  • Trwałość i bezpieczeństwo: Zarządzanie wolumenami trwałymi (volumes), bezpieczne zarządzanie sekretami (.env) oraz standardy CIS Docker Benchmark
  • Infrastruktura towarzysząca: Konteneryzacja demona syslog-ng, snmptrapd, narzędzia archiwizacji Oxidized oraz stosu Prometheus/Grafana
Konteneryzacja NMS: Metoda wdrażania systemu monitorowania sieci, w której wszystkie komponenty pracują w izolowanych kontenerach współdzielących jądro systemu operacyjnego hosta.
Konteneryzacja systemów NMS Konteneryzacja i orkiestracja systemów NMS Docker Engine • Izolacja procesów • Przestrzenie nazw (namespaces) • Limity zasobów cgroups Współdzielone jądro Linux Docker Compose • Stos mikroserwisów • Plik docker-compose.yml • Izolowane sieci mostkowe Zarządzanie deklaratywne Stos LibreNMS • Kontener Web / API • Baza MariaDB + Redis • Poller Dispatcher Sidecars: trap & syslog Cel modułu: Od instalacji monolitycznych do infrastruktury jako kod (IaC) • Wdrożenie kompletnego, odpornego na awarie systemu NMS z wykorzystaniem oficjalnych obrazów OCI. • Separacja danych trwałych (wolumeny RRD i bazy SQL) od bezstanowych kontenerów obliczeniowych. • Automatyzacja skalowania horyzontalnego pollerów i bezprzestojowych aktualizacji oprogramowania.
Slajd 2/22
Spis treści prezentacji 5
Cel slajdu: Przedstawienie struktury zagadnień modułu piątego obejmującego wdrożenie stosu NMS w kontenerach Docker.

Układ materiału i plan wykładu

Materiał prowadzi od podstaw technologii kontenerowej, przez konfigurację wielousługowego pliku compose.yml, po zaawansowane procedury Disaster Recovery i automatyzację Ansible.

  • Blok 1: Fundamenty konteneryzacji i Docker: Wirtualizacja VM a kontenery, architektura Dockera, polecenia CLI i składnia pliku compose.yml
  • Blok 2: Architektura stosu LibreNMS w kontenerach: Konfiguracja MariaDB, Redis, RRDcached, zmienne .env, rozruch i diagnostyka kontenerów
  • Blok 3: Trwałość, skalowanie i usługi pomocnicze: Wolumeny dyskowe, procedury aktualizacji, skalowanie pollerów (Dispatcher), Syslog i Oxidized
  • Blok 4: Sieć, bezpieczeństwo i eksploatacja: Tryby sieciowe (bridge vs host), utwardzanie CIS, kopie zapasowe, Prometheus w Dockerze i dobre praktyki
Plan dydaktyczny modułu 5: Praktyczne opanowanie narzędzi konteneryzacji na potrzeby budowy wysoce dostępnego, skalowalnego i łatwego w utrzymaniu środowiska NMS.
Plan prezentacji 5 Plan prezentacji 5: Konteneryzacja NMS (55 slajdów) 1. Fundamenty Docker i Stos LibreNMS • Wirtualizacja vs kontenery (cgroups/ns) • Docker Compose, YAML, MariaDB, Redis, .env 2. Skalowanie, Sieci i Bezpieczeństwo • Dispatcher, Syslog-ng, SNMP Traps, Oxidized • Docker Networks, bridge vs host, rootless, sekrety 3. Wdrożenie Produkcyjne i Sizing • Podman, Kubernetes, sizing serwera • Management VLAN, konfiguracja MikroTik/Cisco 4. Laboratoria i Nowoczesne Trendy • Prometheus + Grafana w Compose, NetBox • 6 ćwiczeń praktycznych krok po kroku Struktura dydaktyczna modułu: Od teorii przestrzeni nazw jądra Linux, przez konfigurację Compose i bezpieczeństwo, aż po praktyczne laboratoria wdrożeniowe, disaster recovery, słownik i pytania kontrolne.
Slajd 3/22
Paradygmat konteneryzacji: Docker a maszyny wirtualne w monitoringu sieci
Cel slajdu: Zrozumienie fundamentalnych różnic architektonicznych pomiędzy pełną wirtualizacją sprzętową (VM) a konteneryzacją na poziomie jądra Linuksa.

Współdzielenie jądra a hipernadzorca: narzut zasobowy i elastyczność

Maszyny wirtualne emulują kompletny sprzęt i uruchamiają własne jądro OS (Guest OS), podczas gdy kontenery izolują procesy użytkownika przy użyciu mechanizmów jądra gospodarza.

  • Narzut zasobowy (Overhead): Kontenery startują w ułamku sekundy i zużywają ułamek pamięci RAM wymaganej przez VM; brak konieczności alokacji pamięci dla wielu instancji jądra
  • Mechanizmy jądra Linuksa: Przestrzenie nazw (Namespaces: PID, NET, IPC, MNT, UTS) zapewniające izolację widoku oraz grupy kontrolne (cgroups) limitujące zasoby CPU/RAM
  • Obraz kontenera (Image) a Kontener (Container): Obraz to niezmienna, wielowarstwowa matryca (read-only); kontener to uruchomiona instancja obrazu z cienką warstwą zapisu
  • Korzyści dla monitoringu NMS: Spójność środowiska (eliminacja problemu 'u mnie działa'), izolacja konfliktowych wersji bibliotek PHP/Python oraz bezproblemowe aktualizacje
Kontener Docker: Lekki, izolowany proces systemowy uruchomiony w przestrzeni użytkownika, współdzielący jądro systemu Linux z innymi kontenerami i systemem hosta.
Wirtualizacja vs Konteneryzacja Architektura: Wirtualizacja sprzętowa (VM) vs Konteneryzacja Maszyny Wirtualne (KVM / ESXi) App 1 (NMS) Guest OS (Ubuntu) App 2 (DB) Guest OS (Debian) Hypervisor (Typu 1 lub 2) System Host / Jądro Sprzęt Fizyczny (CPU, RAM, Dysk) Kontenery Docker Engine Kontener NMS Web Tylko binaria i libs Kontener MariaDB Tylko binaria i libs Docker Engine (cgroups + namespaces) Wspólne Jądro Linux (Host Kernel) Sprzęt Fizyczny (CPU, RAM, Dysk) Porównanie parametrów technicznych: • Narzut pamięciowy: VM marnuje 1-2 GB RAM na każdy Guest OS; Kontener zużywa 0 MB dodatkowego RAM. • Czas startu: Maszyna wirtualna = 30-90 sekund; Kontener Docker = < 1 sekunda (zwykły proces systemowy). • Wydajność I/O dysku i sieci: W kontenerze brak emulacji urządzeń wirtualnych – natywna szybkość jądra.
Slajd 4/22
Instalacja silnika Docker i podstawy zarządzania kontenerami z poziomu CLI
Cel slajdu: Opanowanie instalacji silnika Docker Engine na serwerze Linux oraz podstawowych poleceń wiersza poleceń do zarządzania cyklem życia kontenerów.

Wdrożenie repozytorium oficjalnego i elementarz poleceń Docker CLI

Instalacja silnika Docker na serwerze Ubuntu LTS wymaga dodania oficjalnego repozytorium Docker i pobrania pakietów docker-ce oraz wtyczki docker-compose-plugin.

  • Pakiety instalacyjne: docker-ce (silnik), docker-ce-cli (klient CLI), containerd.io (środowisko wykonawcze) oraz wtyczka docker-buildx-plugin
  • Nadzór nad kontenerami: docker ps -a (lista kontenerów), docker run (uruchomienie), docker stop (zatrzymanie), docker rm (usunięcie)
  • Inspekcja i logi: docker logs -f <kontener> (podgląd strumienia logów w czasie rzeczywistym), docker exec -it <kontener> bash (wejście do powłoki)
  • Zarządzanie zasobami: docker stats (ciągły monitoring zużycia procesora, pamięci RAM i operacji sieciowych/dyskowych przez kontenery)
Docker Engine: Podstawowe oprogramowanie typu klient-serwer składające się z demona (dockerd), interfejsu API oraz klienta CLI, zarządzające tworzeniem i uruchamianiem kontenerów.
Polecenia Docker CLI Podstawowe polecenia wiersza poleceń Docker CLI # 1. Pobieranie obrazu z rejestru Docker Hub: $ docker pull librenms/librenms:latest # 2. Uruchomienie kontenera w tle (-d) z mapowaniem portu (-p): $ docker run -d --name test-nms -p 8000:8000 librenms/librenms:latest # 3. Wyświetlenie listy aktywnych kontenerów: $ docker ps # (użyj -a, aby zobaczyć również zatrzymane) # 4. Podgląd logów aplikacji w czasie rzeczywistym (-f): $ docker logs -f --tail=50 test-nms # 5. Wykonanie polecenia wewnątrz działającego kontenera (-it): $ docker exec -it test-nms lnms --version # 6. Monitorowanie zużycia zasobów (CPU, RAM, Sieć I/O): $ docker stats --no-stream # 7. Zatrzymanie i usunięcie kontenera: $ docker stop test-nms && docker rm test-nms
Slajd 5/22
Orkiestracja wielokontenerowa: architektura i składnia Docker Compose (compose.yml)
Cel slajdu: Zrozumienie deklaratywnego definiowania złożonych aplikacji wielokontenerowych za pomocą pliku konfiguracyjnego compose.yml.

Deklaratywny opis infrastruktury w standardzie YAML

Zamiast ręcznie wpisywać dziesiątki skomplikowanych poleceń docker run, całą architekturę wielousługową NMS definiuje się w jednym pliku konfiguracyjnym compose.yml.

  • Sekcja services: Definicja kontenerów składowych (np. db, redis, rrdcached, librenms); określenie obrazów, polityki restartu (restart: unless-stopped) i portów
  • Relacje zależności (depends_on): Definiowanie kolejności rozruchu; kontener LibreNMS czeka na zainicjalizowanie i gotowość bazy danych MariaDB
  • Sekcje networks i volumes: Deklaracja wspólnej sieci wirtualnej łączącej kontenery oraz nazwanych wolumenów dyskowych zapewniających trwałość bazy i wykresów
  • Polecenia operacyjne Compose: docker compose up -d (uruchomienie całego stosu w tle), docker compose down (zatrzymanie), docker compose pull (pobranie nowych wersji)
Docker Compose: Narzędzie orkiestracji umożliwiające definiowanie i uruchamianie wielokontenerowych aplikacji Docker za pomocą deklaratywnego pliku formatu YAML.
Struktura docker-compose.yml Anatomia pliku konfiguracyjnego docker-compose.yml # Główny szkielet specyfikacji Compose (Compose File Specification): services: librenms: image: librenms/librenms:latest container_name: librenms_app restart: always ports: [ "8000:8000" ] volumes: [ "nms_rrd:/opt/librenms/rrd", "nms_data:/data" ] environment: [ "DB_HOST=db", "DB_NAME=librenms" ] depends_on: [ db, redis ] volumes: # Definicja trwałych wolumenów danych nms_rrd: { driver: local } nms_data: { driver: local } networks: # Definicja izolowanej podsieci mostkowej nms_net: { driver: bridge, ipam: { config: [{ subnet: 172.28.0.0/16 }] } }
Slajd 6/22
Architektura wielousługowego stosu LibreNMS w kontenerach
Cel slajdu: Szczegółowa dekompozycja oficjalnego stosu LibreNMS Docker na współpracujące kontenery mikrousług.

Modułowy podział zadań w oficjalnym stosie kontenerowym

Oficjalny stos LibreNMS Docker dzieli monolit na wyspecjalizowane kontenery, z których każdy realizuje ściśle określone zadanie systemowe.

  • Kontener bazy danych (db): Serwer MariaDB zoptymalizowany pod kątem intensywnego zapisu metadanych i inwentaryzacji sieci
  • Kontener pamięci podręcznej (redis): Baza klucz-wartość w pamięci RAM; realizuje mechanizm blokad rozproszonych i kolejkowania zadań dla pollerów
  • Kontener bufora metryk (rrdcached): Demon buforujący zapisy do plików RRD w pamięci operacyjnej przed zrzuceniem na dysk
  • Kontener aplikacji głównej (librenms): Serwer webowy Nginx i PHP-FPM; prezentacja GUI, obsługa zapytań użytkowników oraz API REST
  • Kontenery dyspozytora (dispatcher): Procesy w języku Python cyklicznie pobierające zadania odpytywania węzłów sieciowych z kolejki Redis
Stos LibreNMS Docker: Zbiór współpracujących kontenerów realizujących kompletną funkcjonalność systemu NMS w architekturze mikrousługowej.
Stos kontenerowy LibreNMS Architektura oficjalnego stosu LibreNMS w kontenerach librenms (Główna Aplikacja) • Nginx + PHP-FPM 8.3 • Web GUI, REST API, Crons Port :8000 -> Host db (MariaDB 10.11) • Tabela urządzeń, alertów • Kodowanie utf8mb4 Wolumen: db_data redis (Broker Zadań) • Pamięć podręczna RAM • Kolejki odpytywania Blokada wyścigów (Lock) dispatcher (Poller) Pobiera zadania z Redis Wielowątkowe SNMP snmptrapd (Trapy) Nasłuch UDP 162 Zapis do eventlog syslog-ng (Dziennik) Nasłuch UDP/TCP 514 Centralizacja logów Oficjalne repozytorium projektu: https://github.com/librenms/docker Architektura Sidecar: Kontenery zadaniowe (dispatcher, snmptrapd) współdzielą wolumen /opt/librenms/rrd z kontenerem aplikacji webowej przez montowanie 'volumes_from'.
Slajd 7/22
Usługi bazodanowe i pamięci podręcznej stosu: MariaDB, Redis i RRDcached
Cel slajdu: Poznanie parametrów optymalizacyjnych dla usług składowania danych w środowisku kontenerowym.

Konfiguracja baz danych i pamięci podręcznej pod kątem wysokiej wydajności I/O

Wydajność systemu NMS zależy bezpośrednio od konfiguracji podsystemu bazodanowego i eliminacji wąskich gardeł operacji wejścia/wyjścia (I/O) na dyskach.

  • Optymalizacja MariaDB: Kodowanie znaków utf8mb4, mechanizm tabel InnoDB, parametr innodb_file_per_table=1, dopasowanie innodb_buffer_pool_size do wielkości RAM
  • Rola serwera Redis: Przechowywanie kolejki zadań IPC (Inter-Process Communication); obsługa tysięcy operacji na sekundę przy minimalnym opóźnieniu
  • Strojenie demona RRDcached: Parametry -w 1800 -z 1800 -f 3600 opóźniają fizyczny zapis do plików .rrd o 30 minut, łącząc setki małych zapisów w jeden duży blok
  • Współdzielenie gniazda unix socket: Komunikacja kontenera LibreNMS z RRDcached poprzez współdzielony wolumen lub dedykowany port TCP 42217
Demon RRDcached w kontenerze: Wyspecjalizowana usługa redukująca obciążenie dysku twardego serwera NMS poprzez agregowanie próbek pomiarowych w pamięci RAM.
Redis i RRDcached w Compose Architektura pamięci podręcznej: Redis i RRDcached Usługa Redis (In-Memory Broker) • Przechowywanie kolejek zadań pollerów • Blokady wielowątkowe (Distributed Locks) • Ekstremalnie niski czas dostępu (RAM) Brak zapisu na dysk: ultra-wydajność Port wewnętrzny: :6379 Usługa RRDcached (Bufor I/O) • Agregacja wpisów metryk w pamięci RAM • Zapis sekwencyjny dużymi partiami (Flush) • Redukcja operacji losowych IOPS o 85% Ochrona nośników SSD przed zużyciem Gniazdo UNIX lub TCP :42217 # Konfiguracja rrdcached w pliku docker-compose.yml: rrdcached: image: librenms/rrdcached:latest environment: [ "WRITE_TIMEOUT=1800", "WRITE_JITTER=1800", "WRITE_THREADS=4" ] volumes: [ "./rrd_data:/data/db" ] # Bufor przetrzymuje dane w RAM do 30 minut, eliminując lawinowy zapis dyskowy.
Slajd 8/22
Konfiguracja kontenera głównego LibreNMS i separacja zmiennych środowiskowych (.env)
Cel slajdu: Opanowanie zasad bezpiecznego konfigurowania aplikacji kontenerowej poprzez pliki zmiennych środowiskowych .env.

Bezpieczeństwo poświadczeń i parametryzacja w pliku librenms.env

Zgodnie z metodologią Twelve-Factor App, konfiguracja aplikacji i poświadczenia dostępowe nie mogą być zaszyte w obrazie, lecz przekazywane w zmiennych środowiska.

  • Plik .env (Zmienne globalne Compose): Zawiera wersje obrazów, porty wystawiane na zewnątrz, hasła bazy danych (MYSQL_PASSWORD, MYSQL_ROOT_PASSWORD)
  • Plik librenms.env (Zmienne aplikacji): Parametry specyficzne dla LibreNMS: DB_HOST, DB_NAME, DB_USER, strefa czasowa TZ=Europe/Warsaw, klucz aplikacji APP_KEY
  • Izolacja sekretów: Pliki .env muszą mieć restrykcyjne uprawnienia systemowe (chmod 600) i być bezwzględnie dodane do .gitignore
  • Automatyczna migracja bazy: Kontener główny podczas pierwszego startu automatycznie wykonuje migracje schematu bazy danych (artisan migrate)
Plik .env: Plik konfiguracyjny w formacie klucz=wartość, wykorzystywany przez Docker Compose do wstrzykiwania zmiennych konfiguracyjnych i haseł do kontenerów.
Zmienne w pliku .env Konfiguracja środowiskowa w pliku .env (The 12-Factor App) # Przykładowy plik konfiguracyjny .env (uprawnienia chmod 600): TZ=Europe/Warsaw # Precyzyjna strefa czasowa dla wykresów i logów PUID=1000 # Identyfikator UID użytkownika hosta dla plików RRD PGID=1000 # Identyfikator GID grupy hosta dla plików RRD # Konfiguracja dostępu do bazy MariaDB: MYSQL_DATABASE=librenms MYSQL_USER=librenms MYSQL_PASSWORD=SilneHasloBazy123! # Ustawienia optymalizacyjne LibreNMS: MEMORY_LIMIT=2048M # Limit pamięci RAM dla procesu PHP MAX_INPUT_VARS=10000 # Wymagane dla edycji dużych reguł alertowych CACHE_DRIVER=redis # Użycie kontenera Redis jako backendu cache SESSION_DRIVER=redis # Bezpieczne sesje użytkowników w Redis LIBRENMS_WEATHERMAP=true # Automatyczna aktywacja wtyczki Weathermap # Plik .env NIGDY nie może zostać wypchnięty do publicznego repozytorium Git!
Slajd 9/22
Wdrożenie, rozruch krok po kroku i diagnostyka operacyjna stosu
Cel slajdu: Przeprowadzenie kompletnej procedury uruchomienia stosu kontenerowego oraz diagnostyka ewentualnych błędów startowych.

Procedura rozruchu stosu i analiza stanów kontenerów

Wdrożenie stosu w kontenerach wymaga zachowania ścisłej kolejności czynności instalacyjnych oraz weryfikacji zdrowia (healthcheck) poszczególnych usług.

  • Krok 1: Pobranie obrazów i rozruch: Wykonanie polecenia docker compose up -d w katalogu z plikami compose.yml i .env
  • Krok 2: Weryfikacja statusów usług: Sprawdzenie czy wszystkie kontenery mają stan Up (healthy) poleceniem docker compose ps
  • Krok 3: Analiza dzienników zdarzeń: Sprawdzenie logów inicjalizacji bazy i serwera WWW: docker compose logs -f librenms
  • Krok 4: Utworzenie pierwszego administratora: Wykonanie polecenia wewnątrz kontenera: docker compose exec librenms setup-first-run lub przez GUI instalatora
Mechanizm Healthcheck: Wbudowany w Docker mechanizm cyklicznego testowania poprawności działania usługi wewnątrz kontenera (np. zapytanie HTTP lub ping SQL).
Diagnostyka stanu kontenerów Diagnostyka i weryfikacja stanu kontenerów NMS $ docker compose ps NAME IMAGE COMMAND SERVICE STATUS PORTS librenms_app librenms/librenms:latest "/init" librenms Up 2 hours (healthy) 0.0.0.0:8000->8000/tcp librenms_db mariadb:10.11 "docker-entrypoint.s…" db Up 2 hours (healthy) 3306/tcp librenms_redis redis:7.2-alpine "docker-entrypoint.s…" redis Up 2 hours 6379/tcp librenms_dispatcher librenms/librenms:latest "/init" dispatcher Up 2 hours 8000/tcp # Uruchomienie narzędzia walidacyjnego wewnątrz kontenera aplikacji: $ docker compose exec librenms validate.php ==================================== [OK] Database connection successful [OK] Database Schema is current [OK] MySQl Engine is optimal (InnoDB) [OK] Active Poller Wrapper is running [OK] RRDTool is available and configured ====================================
Slajd 10/22
Trwałość danych (Wolumeny Docker) i cykl aktualizacji kontenerów
Cel slajdu: Zrozumienie koncepcji trwałości danych w wolumenach Dockera oraz procedur bezprzerwowej aktualizacji oprogramowania NMS.

Wolumeny nazwane, separacja danych od logiki i procedury update

Kontenery są z definicji ulotne (ephemeral); usunięcie kontenera nie może spowodować utraty bazy danych, plików RRD ani konfiguracji systemu.

  • Wolumeny nazwane (Named Volumes): Trwałe przestrzenie dyskowe zarządzane przez Docker w /var/lib/docker/volumes/ (np. db_data, rrd_data)
  • Bindowanie katalogów (Bind Mounts): Mapowanie konkretnych katalogów z dysku gospodarza (np. ./rrd:/opt/librenms/rrd) ułatwiające bezpośredni dostęp
  • Cykl aktualizacji kontenerów: 1. Pobranie nowych obrazów: docker compose pull; 2. Przeładowanie stosu: docker compose up -d
  • Brak przestoju (Zero-downtime): Docker najpierw pobiera nowy obraz, a następnie natychmiast podmienia kontener; wolumeny bazy i metryk pozostają nienaruszone
Wolumen Docker (Volume): Mechanizm trwałego składowania danych poza cyklem życia kontenera, gwarantujący zachowanie informacji po jego restarcie lub zniszczeniu.
Wolumeny Docker w NMS Architektura pamięci trwałej: Docker Volumes vs Bind Mounts Montowanie katalogów (Bind Mounts) • Składnia: ./rrd_data:/opt/librenms/rrd • Bezpośredni katalog na hoście • Łatwy dostęp z poziomu skryptów bash • Wymaga ręcznej kontroli PUID/PGID Wygodne w laboratoriach i małych NMS Wolumeny nazwane (Named Volumes) • Składnia: nms_rrd:/opt/librenms/rrd • W pełni zarządzane przez Docker Engine • Wyższa wydajność I/O na macOS/Windows • Automatyczne uprawnienia i izolacja Standard produkcyjny Enterprise # Trzy krytyczne obszary danych w systemie LibreNMS: 1. Baza danych SQL (/var/lib/mysql): Inwentarz węzłów, użytkownicy, historia zdarzeń eventlog. 2. Baza metryk RRD (/opt/librenms/rrd): Pliki szeregów czasowych z wykresami ruchu i obciążenia. 3. Katalog stanu aplikacji (/data): Unikalny klucz APP_KEY, certyfikaty SSL, definicje wtyczek. Brak zamontowania któregokolwiek z tych zasobów spowoduje utratę danych przy aktualizacji obrazu.
Slajd 11/22
Skalowanie horyzontalne pollerów: kontenery Dispatcher i narzędzie lnms CLI
Cel slajdu: Poznanie zasad skalowania procesów odpytujących oraz posługiwania się konsolowym narzędziem lnms wewnątrz kontenera.

Rozproszenie pollerów w kontenerach i zarządzanie z CLI

Dzięki konteneryzacji skalowanie mocy odpytywania sprowadza się do zwielokrotnienia kontenerów dyspozytora zadań (Dispatcher) korzystających ze wspólnej kolejki Redis.

  • Skalowanie kontenerów: Polecenie docker compose up -d --scale dispatcher=4 uruchamia 4 równoległe kontenery odpytujące
  • Dyspozytor w Pythonie (dispatcher.py): Autonomiczny demon pobierający z bazy listę zadań, zlecający zapytania SNMP i zapisujący wyniki w RRDcached
  • Narzędzie lnms CLI: Konsolowy interfejs zarządzania; uruchamianie poleceniem docker compose exec librenms lnms <komenda>
  • Operacje CLI przez lnms: lnms device:add <IP> (dodanie węzła), lnms config:set <parametr>, lnms migrate (ręczna migracja bazy)
Narzędzie lnms: Oficjalne narzędzie wiersza poleceń frameworka LibreNMS pozwalające na pełną administrację systemem z poziomu powłoki Linuksa.
Skalowanie kontenerów Dispatcher Skalowanie horyzontalne pollerów: Kontenery Dispatcher Kolejka Redis • Zadania pollowania • Lista device_id Blokady wyścigów Port :6379 (RAM) dispatcher_1 (Worker) Wątki: 16 | UDP 161 dispatcher_2 (Worker) Wątki: 16 | UDP 161 dispatcher_3 (Worker) Wątki: 16 | UDP 161 Sieć Korporacyjna • Przełączniki L2/L3 • Routery brzegowe • Punkty dostępowe Wi-Fi Zrównoleglone zapytania # Skalowanie liczby procesów roboczych jedną komendą w Compose: $ docker compose up -d --scale dispatcher=4 System natychmiast powołuje 4 odrębne kontenery pollerów, dzieląc pulę 20 000 OID. Czas trwania cyklu odpytywania spada z 420 s (opóźnienie) do 45 s bez modyfikacji bazy. Współdzielony wolumen nms_rrd montowany jest równolegle we wszystkich instancjach.
Slajd 12/22
Usługi pomocnicze w kontenerach: Syslog (syslog-ng), SNMP Traps i kopie Oxidized
Cel slajdu: Integracja usług asynchronicznych i narzędzi archiwizacji konfiguracji w ramach wspólnego stosu Docker Compose.

Rozszerzenie stosu o nasłuch zdarzeń i wersjonowanie konfiguracji

Kompletne środowisko NMS w Dockerze rozszerza bazowy stos o kontenery odbiornika logów Syslog, pułapek SNMP Traps oraz demona archiwizacji urządzeń Oxidized.

  • Kontener syslog-ng: Nasłuchuje na porcie UDP/TCP 514; parsuje komunikaty urządzeń i zapisuje je bezpośrednio do tabeli syslog w bazie MariaDB
  • Kontener snmptrapd: Odbiera pułapki SNMP na porcie UDP 162; przekazuje zdekodowane powiadomienia do panelu zdarzeń LibreNMS
  • Kontener Oxidized: Skonfigurowany w pliku compose; cyklicznie pobiera konfiguracje przełączników i routerów przez SSH, integrując się z API LibreNMS
  • Repozytorium Git w kontenerze: Automatyczny zapis kopii zapasowych w lokalnym repozytorium Git na wolumenie trwałym
Kontener usług pomocniczych (Sidecar Container): Wzorzec projektowy polegający na dołączeniu wyspecjalizowanego kontenera realizującego dodatkową funkcję (np. logowanie lub backup) obok kontenera głównego.
Mikroserwis syslog-ng Centralizacja logów Syslog w mikroserwisie syslog-ng Źródła Syslog • Przełączniki Cisco • Routery MikroTik • Serwery Linux Port UDP / TCP 514 syslog-ng (Sidecar) • Nasłuch na porcie 514 • Parsowanie RFC 5424 • Buforowanie w RAM Wstrzykiwanie do bazy Tabela syslog • device_id powiązane • Priorytet i severity • Widok w GUI NMS Alerty Regex w NMS # Konfiguracja mikroserwisu syslog-ng w compose.yml: syslog-ng: image: librenms/librenms:latest container_name: librenms_syslogng ports: [ "514:514/udp", "514:514/tcp" ] environment: [ "SIDECAR_SYSLOGNG=1" ] # Oficjalny obraz uruchamia demona syslog-ng dzięki zmiennej SIDECAR_SYSLOGNG=1.
Slajd 13/22
Konfiguracja sieci kontenerowych (Docker Networking): tryb bridge a host_mode
Cel slajdu: Przeanalizowanie specyfiki sieciowej kontenerów w kontekście odbioru pakietów UDP i telemetrii sieciowej.

Zarządzanie adresacją, mapowanie portów i analiza trybu host

Wybór trybu sieciowego w środowisku Docker decyduje o wydajności odbierania milionów pakietów telemetrycznych oraz prawidłowej identyfikacji adresów IP nadawców.

  • Dedykowana sieć Bridge: Domyślny tryb Compose; izolowana podsieć wirtualna (np. 172.20.0.0/16); porty są mapowane (np. 8000:80/tcp) przez reguły iptables
  • Problem NAT w trybie Bridge: W niektórych konfiguracjach translacja adresów zaciera rzeczywisty adres źródłowy pakietu UDP (np. Syslog), utrudniając identyfikację węzła
  • Tryb network_mode: host: Kontener współdzieli bezpośrednio stos sieciowy i adresy IP serwera fizycznego; zerowy narzut wydajnościowy translacji pakietów
  • Rekomendacja architektoniczna: Zastosowanie trybu bridge dla baz danych (bezpieczeństwo) oraz trybu host lub precyzyjnego mapowania UDP dla odbiorników Syslog i Traps
Tryb sieciowy host (Docker): Konfiguracja, w której kontener nie otrzymuje własnego wirtualnego interfejsu sieciowego, lecz korzysta bezpośrednio z kart sieciowych serwera gospodarza.
Bridge vs Host Network Analiza architektoniczna: network_mode: host vs bridge Tryb Domyślny: bridge • Pełna izolacja sieciowa • Brak kolizji portów między usługami • Wbudowany DNS service discovery • Narzut NAT (conntrack) przy >10k OID/s • Pakiety ICMP fping wymagają CAP_NET_RAW Zalecany dla 95% wdrożeń NMS Tryb Bezpośredni: host • Zerowy narzut sieciowy (Zero Overhead) • Maksymalna szybkość dla fping i SNMP • Natywne odbieranie broadcastów L2 • Całkowity brak izolacji portów! • Port 8000 zajmuje port fizycznego hosta Stosowany w ultraszybkich pollerach ISP # Kiedy warto rozważyć tryb network_mode: host? 1. Skrajnie duża sieć: > 50 000 odpytywanych interfejsów na minutę, gdzie tablica conntrack ulega saturacji. 2. Odbiór pakietów rozgłoszeniowych autoodkrywania (CDP/LLDP RAW sockets) bezpośrednio z karty sieciowej. Architektura hybrydowa: Baza MariaDB i Redis w sieci bridge, a tylko dispatcher w trybie host.
Slajd 14/22
Bezpieczeństwo kontenerów: standardy CIS, Docker Rootless i zarządzanie sekretami
Cel slajdu: Poznanie zasad utwardzania środowiska kontenerowego zgodnie ze standardami Center for Internet Security (CIS Benchmark).

Utwardzanie silnika Docker i ochrona poświadczeń produkcyjnych

Serwer NMS posiada poświadczenia dostępowe do wszystkich urządzeń w firmie; skompromitowanie kontenera NMS stwarza krytyczne zagrożenie dla całej infrastruktury.

  • Standard CIS Docker Benchmark: Zbiór zaleceń audytowych: regularne aktualizacje obrazów bazowych, ograniczenie uprawnień demona dockerd, audyt konfiguracji (docker-bench-security)
  • Tryb Docker Rootless: Uruchomienie demona Docker i kontenerów w przestrzeni zwykłego użytkownika bez uprawnień roota; zapobiega eskalacji uprawnień w przypadku ucieczki z kontenera
  • Zasada najniższych uprawnień (Non-root user): Konfiguracja dyrektywy USER librenms w plikach Dockerfile kontenerów aplikacyjnych
  • Zarządzanie sekretami (Docker Secrets): Przechowywanie haseł bazodanowych i kluczy SNMPv3 w zaszyfrowanych strukturach zamiast jawnych plików tekstowych
Docker Rootless: Tryb pracy silnika Docker eliminujący konieczność uruchamiania demona z uprawnieniami superużytkownika root na serwerze gospodarza.
Bezpieczeństwo kontenerów CIS Standardy bezpieczeństwa kontenerów NMS (CIS Benchmark) 1. Tryb Rootless • Demon dockerd bez root • User namespaces jądra • Przełamanie kontenera Brak uprawnień na hoście 2. Ograniczanie Praw • cap_drop: [ "ALL" ] • cap_add: [ "NET_RAW" ] • no-new-privileges:true Minimalne uprawnienia 3. Skanowanie Podatności • Docker Scout / Trivy • Analiza CVE bibliotek • Weryfikacja bazy NVD Zgodność z NIS 2 # Zabezpieczenie kontenera aplikacji w docker-compose.yml: security_opt: - no-new-privileges:true # Blokuje eskalację uprawnień przez bity SUID cap_drop: [ "ALL" ] # Odrzuca wszystkie uprawnienia jądra Linux cap_add: [ "NET_RAW", "NET_BIND_SERVICE" ] # Zezwala wyłącznie na ICMP fping i port <1024 Zgodność ze standardem Center for Internet Security (CIS Docker Benchmark v1.6).
Slajd 15/22
Alternatywne środowiska uruchomieniowe: Podman oraz klasteryzacja Kubernetes
Cel slajdu: Przedstawienie alternatywnych technologii konteneryzacji bezdemonicznej (Podman) oraz orkiestracji w klastrach Kubernetes.

Architektura bezdemoniczna Podman i orkiestracja w K8s

Poza technologią Docker inżynierowie mają do dyspozycji bezdemoniczny silnik Podman oraz przemysłowy standard orkiestracji Kubernetes.

  • Technologia Podman (Pod Manager): W pełni kompatybilny zamiennik Dockera (Red Hat); architektura bez centralnego demona (Daemonless) z domyślnym trybem Rootless
  • Narzędzie podman-compose: Obsługa standardowych plików compose.yml w środowisku Podman bez zmian w strukturze projektu
  • Systemy NMS w klastrze Kubernetes: Zastosowanie kontrolerów StatefulSet dla baz danych (MariaDB, RRD) oraz Deployment dla bezstanowych pollerów i panelu WWW
  • Zalety orkiestracji K8s: Automatyczne samonaprawianie (Self-healing), skalowanie horyzontalne pollerów w zależności od obciążenia oraz scentralizowane zarządzanie sekretami
Środowisko Podman: Nowoczesne, bezdemoniczne narzędzie do uruchamiania kontenerów zgodnych ze standardem OCI (Open Container Initiative) bezpośrednio w przestrzeni użytkownika.
Kubernetes w architekturze NMS Orkiestracja klasy Enterprise: System NMS w klastrze Kubernetes Kubernetes Cluster (Orkiestracja Skalowania) Deployment (Web UI) Replicas: 2 (HPA) Ingress / Service :80 StatefulSet (MariaDB) Pojedynczy Master PVC (RWO Block Storage) Dispatcher Pody Skalowanie automatyczne Współdzielony Ceph/NFS # Największe wyzwanie NMS w Kubernetes: Persystencja plików RRDtool • Pliki .rrd wymagają trybu zapisu wielowęzłowego (ReadWriteMany - RWX). • Protokół NFS wprowadza zbyt duże opóźnienia blokad i niszczy wydajność zapisu RRD. • Rozwiązanie: Rezygnacja z RRDtool na rzecz bazy Prometheus TSDB lub VictoriaMetrics w K8s. Wdrożenie LibreNMS w K8s realizuje się za pomocą oficjalnych wykresów Helm (Helm Charts).
Slajd 16/22
Architektura sieci zarządzania (Management VLAN) i wymiarowanie zasobów serwera
Cel slajdu: Zaplanowanie dedykowanej sieci zarządzania oraz wyznaczenie parametrów sprzętowych pod produkcyjny serwer kontenerowy.

Izolacja ruchu telemetrycznego i kalkulacja zasobów serwera

Serwer kontenerowy NMS musi być wpięty do dedykowanego, bezpiecznego segmentu sieci zarządzania, a jego zasoby obliczeniowe dobrane z bezpiecznym zapasem.

  • Wydzielona sieć zarządzania (Management VLAN): Odseparowana podsieć logiczna (np. VLAN 99, 10.99.0.0/24) łącząca wyłącznie porty zarządzające urządzeń aktywnych i serwer NMS
  • Restrykcyjna polityka zapory: Całkowity zakaz routingu z podsieci użytkowników i Internetu do Management VLAN; dostęp wyłącznie przez szyfrowany tunel VPN/WireGuard
  • Wymiarowanie zasobów sprzętowych: Do 100 urządzeń: 4 rdzenie vCPU, 8 GB RAM, 100 GB SSD NVMe; do 1000 urządzeń: 8-16 rdzeni vCPU, 32 GB RAM, 500 GB NVMe w RAID-1
  • Kluczowy parametr IOPS: Zapis wykresów RRD generuje tysiące losowych operacji wejścia/wyjścia na sekundę; dyski mechaniczne HDD są całkowicie nieodpowiednie pod serwer NMS
Management VLAN: Logicznie wyizolowana sieć wirtualna IEEE 802.1Q dedykowana wyłącznie do komunikacji administracyjnej, telemetrycznej i diagnostycznej urządzeń sieciowych.
Management VLAN 802.1Q Integracja sieciowa: Dedykowany Management VLAN (802.1Q) Serwer NMS (Host) Karta fizyczna: eth0 Tag IEEE 802.1Q Podinterfejs eth0.99 IP: 10.99.0.10/24 VLAN 99: Zarządzanie Trunk Switch Rdzeniowy L3 Port Gi1/0/1 (Trunk) SVI: Interface Vlan99 Brama: 10.99.0.1 ACL: Tylko IP NMS! Izolacja od użytkowników Urządzenia LAN Switche dostępowe Routery brzegowe Adresacja w VLAN 99 Brak dostępu z biura # Konfiguracja podinterfejsu 802.1Q w systemie Linux (/etc/netplan/01-netcfg.yaml): vlans: eth0.99: { id: 99, link: eth0, addresses: [ 10.99.0.10/24 ] } # Pakiety SNMP z kontenera wychodzą bezpośrednio z interfejsu eth0.99 z tagiem VLAN 99. Ruch telemetryczny jest w 100% odizolowany od sieci użytkowników biurowych (VLAN 10, 20). Standard IEEE 802.1Q gwarantuje fizyczną separację płaszczyzny zarządzania (Management Plane).
Slajd 17/22
Konfiguracja agentów SNMP (Cisco, MikroTik, Linux) do współpracy ze stosem kontenerowym
Cel slajdu: Zestawienie poprawnych konfiguracji agentów na urządzeniach sieciowych pod kątem komunikacji z serwerem kontenerowym.

Przykłady konfiguracji agentów na platformach Cisco, MikroTik i Linux

Prawidłowa konfiguracja urządzeń aktywnych gwarantuje, że pakiety telemetryczne dotrą do serwera kontenerowego i zostaną bezbłędnie zdekodowane.

  • MikroTik RouterOS: /snmp community set [find default=yes] disabled=yes; /snmp community add name=nms_mon addresses=10.99.0.10/32 read-access=yes
  • Przełączniki Cisco IOS: snmp-server community nms_mon RO 10; access-list 10 permit 10.99.0.10; snmp-server location Serwerownia-DC1
  • Serwery Linux (snmpd.conf): agentAddress udp:10.99.0.50:161; rocommunity nms_mon 10.99.0.10; restart demona systemctl restart snmpd
  • Konfiguracja nadawania Syslog: Skierowanie strumienia zdarzeń na adres IP serwera kontenerowego (port UDP 514)
Access Control List w SNMP: Reguła filtrująca w urządzeniu sieciowym zezwalająca na wykonywanie zapytań SNMP wyłącznie ze wskazanego adresu IP serwera NMS.
Konfiguracja MikroTik pod Docker Konfiguracja SNMP w MikroTik RouterOS pod serwer Docker # 1. Konfiguracja wspólnoty SNMP v2c z blokadą źródłowego adresu IP: [admin@MikroTik] > /snmp community add name=NmsCorpCommunity addresses=10.99.0.10/32 read-access=yes remove [find name=public] # BEZWZGLĘDNIE usuń domyślną wspólnotę public! # 2. Aktywacja agenta SNMP i konfiguracja parametrów kontaktu: [admin@MikroTik] > /snmp set enabled=yes contact="NOC-Team" location="DC-Warszawa-R1" \ trap-target=10.99.0.10 trap-community=NmsCorpCommunity trap-version=2 # 3. Zabezpieczenie na zaporze ogniowej Firewall (Filter Rules): [admin@MikroTik] > /ip firewall filter add chain=input action=accept protocol=udp dst-port=161 src-address=10.99.0.10 \ comment="Zezwol na odpytywanie z kontenera LibreNMS" add chain=input action=drop protocol=udp dst-port=161 comment="Blokuj pozostale SNMP" # 4. Włączenie wysyłki logów zdarzeń Syslog do kontenera syslog-ng: [admin@MikroTik] > /system logging action add name=docker-syslog target=remote remote=10.99.0.10 [admin@MikroTik] > /system logging add topics=critical,error,warning action=docker-syslog
Slajd 18/22
Strategia tworzenia kopii zapasowych wolumenów i procedura odzyskiwania awaryjnego (Disaster Recovery)
Cel slajdu: Opracowanie i przetestowanie procedury tworzenia kopii zapasowych wolumenów Dockera oraz odtworzenia serwera od zera po katastrofie.

Archiwizacja bazy, wolumenów RRD oraz scenariusz Disaster Recovery

Awaria serwera NMS nie może oznaczać utraty wielomiesięcznej historii pomiarowej; procedura DR musi umożliwiać postawienie nowego serwera w kilkanaście minut.

  • Zrzut bazy MariaDB (mysqldump): Wykonanie spójnego zrzutu z poziomu kontenera: docker compose exec -T db mysqldump -u root -p... librenms > backup.sql
  • Kopia wolumenów RRD i konfiguracji: Archiwizacja katalogu ./rrd oraz plików compose.yml i .env do archiwum tar.gz z wysyłką na zewnętrzny serwer NAS
  • Scenariusz odtworzenia awaryjnego (DR): 1. Nowy serwer z zainstalowanym Dockerem; 2. Sklonowanie plików konfiguracyjnych; 3. Rozpakowanie wolumenów RRD; 4. Import bazy SQL
  • Czas powrotu do sprawności (RTO): Odtworzenie pełnego środowiska kontenerowego z kopii zapasowej zajmuje poniżej 15 minut (Recovery Time Objective)
RTO (Recovery Time Objective): Maksymalny dopuszczalny czas, w jakim system informatyczny musi zostać w pełni przywrócony do działania po wystąpieniu awarii.
Procedura Disaster Recovery od zera Oś czasu Disaster Recovery: Odtworzenie NMS od zera Krok 1 (0-3 min) Świeży host OS • Instalacja Docker • Klonowanie repozytorium • Przywrócenie .env • Pobranie backupów Pobrane pliki: db.sql.gz, rrd.tar.gz Krok 2 (3-7 min) Baza MariaDB • compose up -d db • Oczekiwanie na socket • Import SQL: zcat db.sql.gz | mariadb -u ... Status bazy: Odtworzone tabele Krok 3 (7-11 min) Wolumen RRD • Rozpakowanie tar.gz • Korekta uprawnień: chown -R 1000:1000 • Weryfikacja katalogów Status plików: Bazy RRD gotowe Krok 4 (11-13 min) Start i Walidacja • compose up -d • Test validate.php • Polling w tle • Port 8000 dostępny RTO < 15 min System w pełni sprawny
Slajd 19/22
Konteneryzacja nowoczesnej telemetrii: Prometheus, snmp_exporter i Grafana
Cel slajdu: Przedstawienie wdrożenia alternatywnego stosu telemetrycznego Prometheus/Grafana w kontenerach Docker Compose.

Równoległy stos telemetryczny nowej generacji w Compose

W nowoczesnych organizacjach LibreNMS jest często uzupełniany przez stos Prometheus + Grafana, realizujący ultraszybką telemetrię łączy szkieletowych.

  • Usługa snmp_exporter w kontenerze: Obraz prom/snmp-exporter; plik konfiguracyjny snmp.yml z wygenerowanymi profilami OID dla przełączników
  • Konfiguracja Prometheus (prometheus.yml): Definicja zadania (scrape_job) odpytującego eksporter z interwałem np. scrape_interval: 15s
  • Wizualizacja w Grafana: Kontener grafana/grafana; automatyczne podłączenie źródła danych Prometheus przez mechanizm Provisioning
  • Synergia rozwiązań: LibreNMS odpowiada za inwentaryzację, topologię i logi Syslog, a Prometheus/Grafana za wyświetlanie pulpitów operacyjnych wysokiej częstotliwości
Scraping (Prometheus): Proces cyklicznego pobierania metryk przez serwer Prometheus poprzez wysyłanie zapytań HTTP GET do zdefiniowanych eksporterów.
Prometheus i Grafana w Dockerze Architektura stosu Prometheus + Grafana + SNMP Exporter Środowisko Docker Compose (Sieć wewnętrzna bridge) Prometheus TSDB • Port HTTP: 9090 • Model: Scrape Pull • Silnik szeregów czasowych snmp_exporter • Port HTTP: 9116 • Tłumacz OID -> Metryki • Moduły z pliku snmp.yml Grafana Dashboard • Port Web UI: 3000 • Język zapytań: PromQL • Dynamiczne panele NOC Alertmanager • Port HTTP: 9093 • Grupowanie i wyciszanie • Webhooki, Slack, SMS Sieć LAN / Urządzenia Switch Core Cisco SNMP v2c/v3 (UDP 161) Router BGP MikroTik SNMP v2c/v3 (UDP 161) SNMP GET
Slajd 20/22
Źródło prawdy (NetBox w Dockerze) oraz automatyzacja wdrożeń z narzędziem Ansible
Cel slajdu: Wdrożenie systemu NetBox w środowisku kontenerowym oraz automatyzacja instalacji stosu NMS za pomocą skryptów Ansible Playbook.

Infrastructure as Code: automatyzacja rozruchu i inwentaryzacji

Zastosowanie narzędzi Infrastructure as Code (IaC) pozwala na w pełni zautomatyzowane wdrażanie identycznych instancji monitoringu na wielu węzłach brzegowych.

  • NetBox Docker: Gotowy stos Docker Compose dla NetBox (aplikacja Django, baza PostgreSQL, kolejki Redis); centralna baza adresacji IPAM i zasobów DCIM
  • Automatyzacja z Ansible: Playbook instalujący silnik Docker, klonujący repozytorium z plikami Compose, generujący plik .env i uruchamiający stos
  • Dynamic Inventory: Ansible pobiera listę urządzeń sieciowych bezpośrednio z API NetBox i automatycznie konfiguruje ich odpytywanie w LibreNMS
  • Standaryzacja środowisk: Całkowita eliminacja ręcznej konfiguracji 'klikanej'; cała infrastruktura monitoringu opisana w kodzie w repozytorium Git
Infrastructure as Code (IaC): Podejście inżynierskie polegające na zarządzaniu infrastrukturą teleinformatyczną za pomocą plików definicyjnych podlegających kontroli wersji.
Wdrożenie z Ansible Automatyzacja wdrożenia stosu NMS za pomocą Ansible (IaC) deploy_nms.yml (Ansible Playbook) - name: Wdrozenie stosu NMS hosts: nms_servers tasks: - name: Utworzenie katalogu projektu file: path=/opt/nms state=directory - name: Wdrozenie konfiguracji .env template: src=.env.j2 dest=/opt/nms/.env - name: Uruchomienie kontenerow community.docker.docker_compose_v2: project_src: /opt/nms state: present pull: missing Zalety podejścia Infrastructure as Code 1. Pełna powtarzalność wdrożenia Brak ręcznych błędów konfiguracyjnych 2. Kontrola wersji w repozytorium Git Śledzenie każdej zmiany parametrów .env 3. Szyfrowanie haseł z Ansible Vault Bezpieczne przechowywanie kluczy i haseł Idempotencja: wielokrotne uruchomienie
Slajd 21/22
Diagnostyka problemów (Troubleshooting) i zbiór dobrych praktyk eksploatacji
Cel slajdu: Poznanie najczęstszych problemów występujących w skonteneryzowanych systemach NMS oraz sprawdzonych zasad ich eksploatacji.

Metodyka usuwania usterek w kontenerach i złote zasady

Zarządzanie NMS w kontenerach wymaga opanowania specyficznych metod diagnostycznych łączących analizę warstwy sieciowej, bazodanowej i uprawnień Dockera.

  • Problem uprawnień do wolumenów: Niezgodność identyfikatorów UID/GID (np. błąd zapisu do katalogu rrd); rozwiązanie: chown -R 1000:1000 ./rrd
  • Restart w pętli (CrashLoopBackOff): Inspekcja logów kontenera bazy danych (docker compose logs db); najczęstsza przyczyna: brak pamięci RAM (OOM Killer)
  • Limitowanie zasobów w compose.yml: Wymóg definiowania limitów pamięci (mem_limit) i procesora (cpus) zapobiegający zawieszeniu serwera gospodarza
  • Automatyczna rotacja logów Dockera: Konfiguracja sterownika json-file z opcjami max-size: "50m" i max-file: "3" chroni dysk przed zapełnieniem
OOM Killer (Out of Memory Killer): Mechanizm jądra Linuksa bezwzględnie uśmiercający proces zużywający najwięcej pamięci w sytuacji krytycznego wyczerpania pamięci RAM.
Dobre praktyki eksploatacji Dobre praktyki eksploatacji kontenerów NMS w produkcji Niezawodność i Zasoby 1. Sztywne limity RAM i CPU Definicja `mem_limit` i `cpus` w Compose Chroni hosta przed Linux OOM Killer 2. Dedykowane Healthchecki Weryfikacja gniazda SQL i kodu HTTP 200 Automatyczny restart zawieszonych usług 3. Pamięć podręczna RRDcached Buforowanie losowych zapisów w RAM Redukcja IOPS dysków SSD o 85-90% ✓ Wymuszone restart: unless-stopped Bezpieczeństwo i Operacje 4. Zasada 12-Factor App Sekrety i hasła wyłącznie w zmiennych .env Nigdy nie zapisuj haseł w obrazach Dockera 5. Uruchamianie bez uprawnień root Zastosowanie no-new-privileges:true Odrzucenie zbędnych uprawnień jądra Linux 6. Automatyzacja kopii i rotacja Codzienny zrzut MariaDB i archiwum RRD Wypychanie szyfrowanych kopii poza serwer ✓ Testowanie odtworzenia co kwartał
Slajd 22/22
Słownik terminów konteneryzacji, pytania kontrolne i literatura
Cel slajdu: Podsumowanie modułu piątego, usystematyzowanie pojęć konteneryzacji oraz weryfikacja wiedzy poprzez pytania i zadania wdrożeniowe.

Leksykon pojęciowy modułu 5 i weryfikacja kompetencji

Zakończenie modułu konteneryzacji; student powinien potrafić samodzielnie uruchomić, skonfigurować, zabezpieczyć i zaktualizować wielousługowy stos NMS w środowisku Docker Compose.

  • Pytania teoretyczne: 1. Czym różni się wirtualizacja sprzętowa (VM) od konteneryzacji procesów (Docker)? 2. Dlaczego wolumeny nazwane są niezbędne w stosie NMS? 3. Jakie ryzyko niesie brak limitów pamięci dla kontenerów?
  • Zadania laboratoryjne: 1. Uruchom oficjalny stos LibreNMS w Docker Compose; 2. Sprawdź obciążenie kontenerów poleceniem docker stats; 3. Wykonaj kopię bazy danych z poziomu CLI
  • Słownik pojęć: Docker, Docker Compose, compose.yml, Container, Image, Volume, Bind Mount, Bridge Network, Host Mode, Dispatcher, lnms, RRDcached
  • Dokumentacja i źródła: Dokumentacja Docker (docs.docker.com); LibreNMS Docker Repository (github.com/librenms/docker); CIS Docker Benchmark (cisecurity.org)
Kompetencje modułu 5: Praktyczna biegłość we wdrażaniu, administrowaniu, skalowaniu i tworzeniu kopii zapasowych skonteneryzowanych platform telemetrii sieciowej.
Pytania kontrolne Pytania kontrolne i powtórzenie materiału (Weryfikacja wiedzy) Pytanie 1: RRDcached a sieć NFS Dlaczego wolumen /data/rrd nie powinien być montowany przez NFS bez bufora RRDcached? Odp: Ogromny narzut losowych operacji IOPS blokuje wątki I/O i zawiesza odpytywanie. Pytanie 2: network_mode host vs bridge Kiedy dla kontenera NMS należy wybrać network_mode: host zamiast domyślnego bridge? Odp: Przy >500 węzłach, by uniknąć narzutu SNAT i nasycenia tablicy conntrack jądra. Pytanie 3: Brak limitu mem_limit Jakie ryzyko niesie brak limitów pamięci RAM w definicji usług w docker-compose.yml? Odp: Wyciek pamięci może aktywować OOM Killera, który zabije krytyczny proces hosta. Pytanie 4: Rola Redis w Dispatcherze Jaką rolę pełni broker Redis w architekturze ze skalowanymi kontenerami pollerów? Odp: Kolejkuje zadania i zarządza blokadami (locks), zapobiegając duplikacji odpytań.