Tento nástroj automaticky sbírá informace o hardwarových komponentách (moduly, karty, chassis) ze síťových zařízení pomocí SNMP protokolu a ukládá je do NetBoxu.
Jednoduše řečeno: Místo ručního zadávání informací o modulech v routerech/switchích do NetBoxu, tento nástroj je tam nahraje automaticky.
Nástroj detekuje platformu podle pole Platform v NetBoxu (název platformy, case-insensitive):
junos- Juniper JunOS routery a switche (použije se specializovaný JunOS handler)sros- Nokia SROS routery (použije se specializovaný SROS handler)- Všechny ostatní platformy - Cisco IOS/IOS-XE/NX-OS a jakékoliv jiné zařízení (použije se výchozí Cisco Entity MIB handler)
Pozor: Název platformy v NetBoxu musí být přesně junos nebo sros (malá písmena, case-insensitive). Pro Cisco zařízení můžeš použít libovolný název (např. cisco-ios, cisco-nxos, cisco), všechny se zpracují pomocí Cisco handleru.
Nástroj si z NetBoxu stáhne seznam zařízení, která mají:
- ✅ Status:
Active - ✅ Přiřazenou primární IPv4 adresu
- ✅ Vyplněnou platformu (Cisco/Juniper/Nokia)
- ✅ Volitelně: specifické tagy (pokud je nastavíš)
Pro každou hardwarovou komponentu (modul, chassis, port, power supply, atd.) se vytvoří nebo aktualizuje záznam Probe obsahující:
- Sériové číslo (hlavní identifikátor)
- Model name (název modelu)
- Hardware revision (HW verze)
- Firmware version (verze firmwaru)
- Software version (verze SW)
- Description (popis komponenty)
- Device Class (typ: chassis, module, port, sensor, atd.)
- Timestamp (kdy byla data nasbírána)
Pozor: Nástroj vyžaduje nainstalovaný inventory-monitor-plugin v NetBoxu!
# V NetBox prostředí nainstaluj plugin:
pip install netbox-inventory-monitor-pluginPoté přidej do configuration.py:
PLUGINS = [
'netbox_inventory_monitor',
]A restartuj NetBox.
- Přihlaš se do NetBoxu
- Jdi do Admin → Users → Tokens
- Vytvoř nový token s oprávněními pro čtení zařízení a zápis do plugin API
- Zkopíruj si token (už ho neuvidíš)
Pro každé zařízení, které chceš monitorovat, zkontroluj:
- ✅ Status: Active
- ✅ Primary IPv4: musí být vyplněná IP adresa dostupná z místa, kde běží script
- ✅ Platform: musí být nastavená platforma
- Pro Juniper:
junos(přesný název) - Pro Nokia:
sros(přesný název) - Pro Cisco: libovolný název (např.
cisco-ios,cisco, atd.)
- Pro Juniper:
Nástroj potřebuje SNMP přístup k zařízením. Podporuje SNMPv2c i SNMPv3.
- Potřebuješ znát community string (např.
publicneboprivate)
- Potřebuješ znát:
- Username (např.
monitoring-user) - Auth password a auth protocol (MD5/SHA)
- Privacy password a privacy protocol (DES/AES) - volitelné
- Security level (authNoPriv / authPriv)
- Username (např.
Tip: Ujisti se, že máš SNMP povolené na zařízeních a že je dostupné z místa, kde budeš spouštět script.
macOS:
brew install net-snmpUbuntu/Debian:
sudo apt-get install libsnmp-devRHEL/CentOS:
sudo yum install net-snmp-devel# Naklonuj repozitář
git clone <URL-repozitáře>
cd inventory_monitor_scripts
# Nainstaluj v dev módu
pip install -e .
# Nebo s test závislostmi:
pip install -e ".[test]"Vytvoř soubor .env v kořenovém adresáři projektu:
Tip: Pokud potřebuješ různé konfigurace pro různá prostředí (produkce, staging, dev), vytvoř více souborů (např. .env.production, .env.staging) a použij parametr --env-file při spouštění.
# === NetBox nastavení ===
NETBOX_API_TOKEN=tvůj_netbox_token_zde
NETBOX_INSTANCE_URL=https://netbox.example.com/
# Ověřování SSL (pro testování můžeš dát false)
NETBOX_VERIFY_SSL=true
# === SNMP přihlašovací údaje ===
# Pořadí, v jakém se mají zkoušet SNMP verze (nejdřív v3, pak v2)
SNMP_VERSION=3,2
# SNMPv2c
SNMP_COMMUNITY=public
# SNMPv3
SNMP_USER=monitoring-user
SNMP_AUTH=auth_password_zde
SNMP_AUTH_METHOD=SHA
SNMP_PRIVACY=privacy_password_zde
SNMP_PRIVACY_METHOD=AES
SNMP_SECURITY=authPriv
# === SNMP ladění výkonu ===
SNMP_TIMEOUT=1
SNMP_RETRIES=1
# === Filtrování zařízení (volitelné) ===
# Zpracovat pouze zařízení s těmito tagy:
NETBOX_TAGS=production,monitoring
# Vyloučit zařízení s těmito tagy:
NETBOX_TAGS__N=decommissioned,maintenance
# === Filtrování modelů (volitelné) ===
# Vyloučit moduly s těmito názvy z importu:
entPhysicalModelName_excludes=N/A,Unknown,Container
# === Paralelizace ===
PARALLEL_JOBS=50
# === Logování ===
LOG_LEVEL=INFOVzorový soubor: Podívej se na .env.sample v repozitáři.
# Zpracovat všechna zařízení v NetBoxu (podle filtrů)
python -m inventory_monitor.main
# Zpracovat jen jedno konkrétní zařízení
python -m inventory_monitor.main --device router-01
# Použít vlastní konfigurační soubor (např. pro různá prostředí)
python -m inventory_monitor.main --env-file .env.production
python -m inventory_monitor.main --env-file .env.staging --device test-router
# Použít jiné SNMP credentials pro jedno spuštění
python -m inventory_monitor.main --snmp-community jiný_community_string
# Nastavit detailnější logování
LOG_LEVEL=DEBUG python -m inventory_monitor.main --device switch-core-01
# Exportovat surová SNMP data do JSON souboru (data se STÁLE ukládají do NetBoxu)
python -m inventory_monitor.main --device router-01 --debug-dump debug.json-
Načtení konfigurace - načte
.envsoubor a CLI parametry -
Připojení k NetBoxu - stáhne si seznam zařízení podle filtrů
-
Paralelní zpracování - pro každé zařízení:
- Připojí se přes SNMP (nejdřív zkusí v3, pak v2)
- Načte hardware inventory (Entity MIB pro Cisco, specifické OID pro ostatní)
- Vyfiltruje nepotřebné komponenty
- Sloučí duplicitní záznamy podle sériového čísla
-
Nahrání do NetBoxu - pro každou komponentu se rozhoduje, jak zpracovat Probe:
Klíč pro hledání: Sériové číslo + Device ID
A) Probe s tímto SN neexistuje:
- → Vytvoří se nová Probe
B) Probe s tímto SN existuje - porovnají se přesně tato pole:
device_descriptor(název zařízení)site_descriptor(název site v NetBoxu)location_descriptor(název location v NetBoxu)part(entPhysicalModelName - název modelu)name(entPhysicalName - název komponenty)description(entPhysicalDescr - popis komponenty)category(entPhysicalClass - typ komponenty: chassis, module, port, atd.)
B1) Alespoň jedno z těchto polí se liší:
- → Vytvoří se nová Probe (zachová se historie změn - např. výměna modulu se stejným SN)
B2) Všechna pole jsou stejná:
- → Aktualizuje se existující Probe (pouze timestamp
time= čas poslední kontroly)
-
Logování - výsledky se ukládají do
logs/all.logalogs/errors.log
logs/all.log- všechny zprávy (INFO a vyšší)logs/errors.log- pouze chyby s detailními stacktrace
Logy se rotují při 10 MB a uchovávají se 1 týden.
# Detailní logování
LOG_LEVEL=DEBUG python -m inventory_monitor.main --device problematic-device
# Exportovat surová SNMP data pro analýzu
python -m inventory_monitor.main --device router-01 --debug-dump snmp_data.jsonProblém: "No SNMP response from device"
- ✅ Zkontroluj, že je SNMP povolené na zařízení
- ✅ Ověř, že je zařízení dostupné (ping)
- ✅ Zkontroluj SNMP credentials (community string / username+password)
Problém: "NetBox API error 401 Unauthorized"
- ✅ Zkontroluj, že je token platný
- ✅ Ověř, že má token správná oprávnění
Problém: "Žádná data z SNMP, ale zařízení odpovídá"
- ✅ Zkontroluj, že je v NetBoxu správně vyplněná platforma (
junospro Juniper,srospro Nokia) - ✅ Pro Cisco zařízení může být použit libovolný název platformy (výchozí handler)
- Mám nainstalovaný NetBox s inventory-monitor-plugin
- Mám API token z NetBoxu
- Mám SNMP přístup k zařízením (community string nebo SNMPv3 credentials)
- Zařízení v NetBoxu mají status Active, Primary IPv4 a správnou platformu
- Nainstaloval jsem systémové závislosti (
net-snmp) - Nainstaloval jsem Python balíček (
pip install -e .) - Vytvořil jsem
.envsoubor s konfigurací - Otestoval jsem na jednom zařízení:
python -m inventory_monitor.main --device test-device
- NetBox Plugin: https://github.com/ArnesSI/netbox-inventory-monitor (nebo kam je uložený)
- Dokumentace:
README.mdv tomto repozitáři - Vzorový config:
.env.sample
Pokud něco nefunguje, podívej se do logů (logs/errors.log) nebo spusť s LOG_LEVEL=DEBUG pro detailní výstup.