{"id":7,"date":"2026-02-25T22:30:00","date_gmt":"2026-02-25T21:30:00","guid":{"rendered":"https:\/\/rpi.temporiti.net\/wordpress\/blog\/monitoraggio-rete-snmp\/"},"modified":"2026-05-30T14:36:19","modified_gmt":"2026-05-30T12:36:19","slug":"monitoraggio-rete-snmp","status":"publish","type":"post","link":"https:\/\/rpi.temporiti.net\/wordpress\/?p=7","title":{"rendered":"Monitoraggio di rete con SNMP senza diventare matti"},"content":{"rendered":"<p>SNMP \u00e8 uno di quei protocolli vecchi (RFC 1157 \u00e8 del 1990) che continuano a funzionare bene proprio perch\u00e9 fanno una cosa sola: leggere contatori e variabili da apparati di rete. Per il mio homelab ho provato vari NMS prima di fermarmi su <a href=\"https:\/\/www.observium.org\/\">Observium Community<\/a>, e dopo qualche tentativo sbagliato ho una configurazione che gira da oltre un anno senza farmi impazzire.<\/p>\n<h2>Il mio setup<\/h2>\n<p>Faccio girare Observium su un Raspberry Pi 5 8GB casalingo, con Debian (Raspberry Pi OS Lite 64-bit, ARM64). Lo storage \u00e8 un SSD da 480 GB attaccato via USB 3.0, perch\u00e9 una microSD generica sotto MariaDB ha vita breve, lo so per esperienza diretta. Tutto ci\u00f2 che \u00e8 <code>\/var\/lib\/observium<\/code>, <code>\/var\/lib\/mysql<\/code> e <code>\/var\/lib\/observium\/rrd<\/code> finisce sull&#8217;SSD via bind mount. Sul Pi resta solo il sistema operativo, su una microSD ad alta affidabilit\u00e0 classe A2. La rete \u00e8 ethernet gigabit, niente Wi-Fi per un servizio di monitoring che dipende dalla connettivit\u00e0.<\/p>\n<p>Observium su ARM64 funziona dai pacchetti community. Le dipendenze le installo dai repo Debian, prima di tutto:<\/p>\n<pre><code class=\"language-bash\">\nsudo apt update\nsudo apt install apache2 mariadb-server php php-mysql php-gd php-snmp \\\n  php-curl php-mbstring snmp snmpd fping mtr-tiny rrdtool whois ipmitool\n<\/code><\/pre>\n<p>Poi clone del repository community:<\/p>\n<pre><code class=\"language-bash\">\nsudo mkdir -p \/opt\/observium\ncd \/opt\nsudo git clone https:\/\/git.observium.org\/observium.git observium\n<\/code><\/pre>\n<p>In <code>\/opt\/observium\/config.php<\/code> configuro utente DB dedicato (mai root MariaDB), password forte e <code>$config['snmp']['version']<\/code> a <code>2c<\/code> come default, con SNMPv3 dove possibile.<\/p>\n<p>Il bootstrap iniziale crea lo schema e la prima dashboard:<\/p>\n<pre><code class=\"language-bash\">\ncd \/opt\/observium\nsudo .\/discovery.php -u\n<\/code><\/pre>\n<p>Apache serve <code>\/opt\/observium\/html\/<\/code> su una vhost interna, accessibile solo dalla LAN, mai esposta su internet pubblica.<\/p>\n<h2>Agenti SNMP sui device<\/h2>\n<p>Su ogni host Linux che voglio monitorare, installo <code>snmpd<\/code>:<\/p>\n<pre><code class=\"language-bash\">\nsudo apt install snmpd\n<\/code><\/pre>\n<p>In <code>\/etc\/snmp\/snmpd.conf<\/code> configuro una community string read-only con nome lungo e casuale (mai &#8220;public&#8221;), e limito l&#8217;accesso all&#8217;indirizzo del Pi monitoring:<\/p>\n<pre><code class=\"language-plaintext\">\nrocommunity SECRETSTRINGLUNGAACASO 203.0.113.10\nsysLocation studio\nsysContact admin@example.org\n<\/code><\/pre>\n<p>E faccio il bind solo sull&#8217;interfaccia che serve, non su 0.0.0.0:<\/p>\n<pre><code class=\"language-plaintext\">\nagentAddress udp:203.0.113.20:161\n<\/code><\/pre>\n<p>Riavvio:<\/p>\n<pre><code class=\"language-bash\">\nsudo systemctl restart snmpd\n<\/code><\/pre>\n<p>Sugli switch managed configuro la community via web UI o console, sempre v2c con community casuale per il read e v3 con username\/password dove l&#8217;hardware lo permette. Niente RW community su nessun device, mai.<\/p>\n<h2>Aggiungere device a Observium<\/h2>\n<p>Dal Pi monitoring aggiungo un host:<\/p>\n<pre><code class=\"language-bash\">\ncd \/opt\/observium\nsudo .\/add_device.php 203.0.113.20 SECRETSTRINGLUNGAACASO v2c\n<\/code><\/pre>\n<p>Observium scopre interfacce, sensori, processi e li polla a cadenze diverse (default cinque minuti per i grafici, un minuto per gli alert). Dopo qualche ora la dashboard mostra throughput, errori, sensori di temperatura, e gli alert si attivano sulle soglie predefinite.<\/p>\n<h2>Un caso reale<\/h2>\n<p>Una sera, intorno alle 20:30, ho ricevuto un alert email da Observium per packet loss del 12% sull&#8217;interfaccia uplink dello switch principale. Latenza ping verso il gateway saliva oltre i 200 ms a tratti. Sono entrato sulla dashboard e ho visto il grafico storico: il packet loss era iniziato circa un&#8217;ora prima, in coincidenza con un picco di traffico verso WAN. Ho controllato il duplex sulla porta: half duplex invece di full. Un negoziato sbagliato dopo un riavvio dello switch del piano sopra. Cambio manuale del duplex a full, riavvio interfaccia, latenza tornata a 1-2 ms. Senza Observium avrei dato la colpa al provider e perso una mezz&#8217;ora a fare reload sul router. La cronologia SNMP, in questi casi, vale pi\u00f9 di mille tcpdump.<\/p>\n<h2>Cosa funziona bene<\/h2>\n<p>Observium scopre automaticamente quasi tutto: interfacce, VLAN, sensori, processi monitorabili. La storia su RRD \u00e8 leggerissima e si conserva per anni anche su SSD modesti. L&#8217;alerting via mail funziona, \u00e8 essenziale, e quando un device sparisce ricevo notifica in pochi minuti.<\/p>\n<h2>Limiti<\/h2>\n<p>Il pacchetto community \u00e8 in modalit\u00e0 &#8220;stable but slowly maintained&#8221;, e la UI ha sapore 2015. La Professional Edition costa, ma per un homelab la Community basta. SNMP \u00e8 un protocollo verboso e non particolarmente sicuro: niente community RW, niente esposizione su WAN, e dove possibile SNMPv3 con autenticazione e cifratura.<\/p>\n<h2>In pratica<\/h2>\n<p>SNMP + Observium \u00e8 la mia base storica di metriche di rete: throughput, errori, sensori. Glances + InfluxDB + Grafana gestiscono le metriche di sistema applicative. Sono due piani diversi che insieme mi danno una visione completa dell&#8217;homelab. SNMP non \u00e8 bello, \u00e8 efficace, ed \u00e8 uno dei pochi strumenti che ti permettono di rispondere alla domanda &#8220;cosa stava succedendo alla rete tre mesi fa alle 22?&#8221; senza dover scrivere nulla in pi\u00f9.<\/p>\n<hr>\n<blockquote>\n<p>Immagine generata con Cloudflare Workers AI \/ FLUX.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>SNMP \u00e8 uno di quei protocolli vecchi (RFC 1157 \u00e8 del 1990) che continuano a funzionare bene proprio perch\u00e9 fanno una cosa sola: leggere contatori e variabili da apparati di rete. Per il mio homelab ho provato vari NMS prima di fermarmi su Observium Community, e dopo qualche tentativo sbagliato ho una configurazione che gira [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":190,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-7","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-monitoring"],"_links":{"self":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":11,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7\/revisions"}],"predecessor-version":[{"id":356,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7\/revisions\/356"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/190"}],"wp:attachment":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}