{"id":8,"date":"2026-02-28T22:31:00","date_gmt":"2026-02-28T22:31:00","guid":{"rendered":"https:\/\/rpi.temporiti.net\/wordpress\/blog\/metriche-sistema-centralizzate\/"},"modified":"2026-05-30T14:05:26","modified_gmt":"2026-05-30T12:05:26","slug":"metriche-sistema-centralizzate","status":"publish","type":"post","link":"https:\/\/rpi.temporiti.net\/wordpress\/?p=8","title":{"rendered":"Esportare metriche di sistema centralizzate"},"content":{"rendered":"<p>Tenere una dozzina di host monitorati senza centralizzare le metriche \u00e8 come gestire una contabilit\u00e0 con post-it sparsi: funziona finch\u00e9 non serve davvero. Il mio stack attuale \u00e8 <a href=\"https:\/\/nicolargo.github.io\/glances\/\">Glances<\/a> come collector locale, InfluxDB come time series database e Grafana come dashboard. \u00e8 la terza iterazione del setup, dopo aver provato Telegraf+InfluxDB e Prometheus+node_exporter. Quello che lascio qui \u00e8 la versione che gira oggi.<\/p>\n<h2>Glances in modalit\u00e0 export<\/h2>\n<p>Glances \u00e8 nato come strumento &#8220;top-like&#8221; interattivo, ma supporta export verso una decina di backend, tra cui InfluxDB v2. L&#8217;idea: su ogni host gira <code>glances<\/code> come daemon che ogni dieci secondi pubblica le metriche verso un InfluxDB centrale.<\/p>\n<p>Installazione su Debian\/Ubuntu:<\/p>\n<pre><code class=\"language-bash\">\nsudo apt install glances\n<\/code><\/pre>\n<p>Per il supporto InfluxDB v2 mi serve la libreria Python:<\/p>\n<pre><code class=\"language-bash\">\nsudo apt install python3-influxdb-client\n<\/code><\/pre>\n<p>Su Mac uso brew:<\/p>\n<pre><code class=\"language-bash\">\nbrew install glances\npip3 install influxdb-client\n<\/code><\/pre>\n<p>Configurazione <code>\/etc\/glances\/glances.conf<\/code>, sezione InfluxDB v2:<\/p>\n<pre><code class=\"language-plaintext\">\n[influxdb2]\nhost=influx.example.local\nport=8086\nprotocol=http\norg=homelab\nbucket=metrics\ntoken=GENERATO_DA_INFLUXDB_UI\nprefix=glances\ntags=host:nome-host\n<\/code><\/pre>\n<p>Il token e l&#8217;org\/bucket li creo via UI di InfluxDB. Il tag <code>host<\/code> mi consente di filtrare in Grafana per macchina.<\/p>\n<h2>Lanciare Glances come servizio<\/h2>\n<p>Niente script custom, uso il file unit di systemd che il pacchetto fornisce e creo un override per attivare l&#8217;export:<\/p>\n<pre><code class=\"language-bash\">\nsudo systemctl edit glances.service\n<\/code><\/pre>\n<p>Aggiungo:<\/p>\n<pre><code class=\"language-plaintext\">\n[Service]\nExecStart=\nExecStart=\/usr\/bin\/glances --export influxdb2 -q -t 10\n<\/code><\/pre>\n<p><code>-q<\/code> disabilita la UI (\u00e8 un daemon), <code>-t 10<\/code> aggiorna ogni dieci secondi. Poi:<\/p>\n<pre><code class=\"language-bash\">\nsudo systemctl enable --now glances.service\n<\/code><\/pre>\n<h2>InfluxDB centrale<\/h2>\n<p>L&#8217;InfluxDB sta su un Raspberry Pi 5 con SSD USB (mai microSD per database). Installazione dai repo ufficiali InfluxData:<\/p>\n<pre><code class=\"language-bash\">\nwget -qO- https:\/\/repos.influxdata.com\/influxdata-archive_compat.key | gpg --dearmor | sudo tee \/etc\/apt\/trusted.gpg.d\/influxdata.gpg &gt; \/dev\/null\necho \"deb https:\/\/repos.influxdata.com\/debian stable main\" | sudo tee \/etc\/apt\/sources.list.d\/influxdata.list\nsudo apt update\nsudo apt install influxdb2\nsudo systemctl enable --now influxdb\n<\/code><\/pre>\n<p>Il primo setup, sulla porta 8086, definisce org <code>homelab<\/code>, bucket <code>metrics<\/code> con retention 30 giorni e token operatore. Il token operatore lo conservo offline, e creo un token write-only &#8220;glances&#8221; da distribuire sugli host: in questo modo se un host viene compromesso, l&#8217;attaccante pu\u00f2 scrivere metriche fasulle ma non leggere o cancellare quelle altrui.<\/p>\n<h2>Grafana sulla stessa macchina<\/h2>\n<p>Grafana sta nello stesso Pi InfluxDB, repo ufficiale, datasource InfluxDB con token read-only. Dashboard &#8220;Glances v2&#8221; importata dal marketplace ufficiale Grafana, ID 17424. Mi mostra in un colpo d&#8217;occhio CPU, RAM, load, IO, network, top processes per host.<\/p>\n<p>Su Grafana imposto allerting nativo per soglie semplici: <code>cpu_total > 80% per 10m<\/code>, <code>mem_used_pct > 90% per 5m<\/code>, <code>disk_used_pct > 85%<\/code>. Notifiche via Telegram bot personale e email Resend.<\/p>\n<h2>Un caso reale<\/h2>\n<p>Un sabato mattina, verso le 9:00, ho aperto la dashboard per controllare i grafici prima del caff\u00e8 e ho visto che l&#8217;host edge aveva avuto un picco di load avg 12.4 nelle quattro ore precedenti. CPU era stata al 100% per intervalli regolari. Ho guardato i top processes catturati da Glances: un cron mal configurato lanciava un import dati ogni cinque minuti invece che ogni cinque ore. Una virgola dimenticata nel crontab. Ho corretto e ho riallineato il job. Senza la cronologia centralizzata, il picco notturno me lo sarei perso, perch\u00e9 l&#8217;host era tornato in range per quando ho aperto la sessione SSH del mattino. Il bello di un time series database \u00e8 esattamente questo: ti racconta cosa \u00e8 successo quando tu non c&#8217;eri.<\/p>\n<h2>Cosa funziona bene<\/h2>\n<p>Glances \u00e8 semplicissimo da installare e configurare, copre subito CPU, RAM, IO, network, processi, sensori. InfluxDB v2 con retention policy non si gonfia mai oltre i 5-6 GB di storage. Grafana \u00e8 lo standard de facto e dashboard belle si trovano gi\u00e0 fatte.<\/p>\n<h2>Limiti<\/h2>\n<p>Glances usa un po&#8217; di RAM (50-80 MB per host) e su SBC molto vecchi (Raspberry Pi Zero) pu\u00f2 essere troppo. L&#8217;export ogni dieci secondi \u00e8 generoso per un homelab, ma se voglio cardinalit\u00e0 pi\u00f9 alta devo passare a Telegraf. Per metriche applicative custom Glances non basta: aggiungo Prometheus scraper su porte specifiche, dove serve.<\/p>\n<h2>In pratica<\/h2>\n<p>Lo stack Glances+Influx+Grafana \u00e8 il livello &#8220;infrastruttura di base&#8221; delle mie metriche. Sopra ci poggiano monitoring applicativi specifici (Observium per SNMP di rete, ping check serverless per uptime). Avere tre piani separati e indipendenti mi protegge dal classico problema &#8220;il monitoring \u00e8 gi\u00f9, quindi non so se \u00e8 gi\u00f9&#8221;: se Glances tace ma Observium grida, so subito da dove cominciare.<\/p>\n<hr>\n<blockquote>\n<p>Immagine generata con Cloudflare Workers AI \/ FLUX.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Tenere una dozzina di host monitorati senza centralizzare le metriche \u00e8 come gestire una contabilit\u00e0 con post-it sparsi: funziona finch\u00e9 non serve davvero. Il mio stack attuale \u00e8 Glances come collector locale, InfluxDB come time series database e Grafana come dashboard. \u00e8 la terza iterazione del setup, dopo aver provato Telegraf+InfluxDB e Prometheus+node_exporter. Quello che [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":189,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-8","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\/8","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=8"}],"version-history":[{"count":10,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions"}],"predecessor-version":[{"id":357,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions\/357"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/189"}],"wp:attachment":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}