> ## Content Index
> Fetch the complete content index at: https://blog.firenetwork.it/llms.txt
> Use this file to discover other available public pages before exploring further.

# Monitorare gli errori di NGINX su Grafana
- URL: https://blog.firenetwork.it/monitorare-gli-errori-di-nginx-su-grafana/
- Published: 2025-07-25T16:39:52.000Z
- Updated: 2025-07-25T16:39:52.000Z
- Description: Monitora proattivamente gli errori NGINX su Grafana. Usa Telegraf e Prometheus per ottenere metriche chiare e prevenire i malfunzionamenti nel tuo HomeLab.
- Author: Samuele Gabbrielli
- Tags: Guide, Monitoraggio, Telegraf, Prometheus, Grafana, #Import 2026-03-12 20:23

Chi come me, si dedica all'HomeLabbing per diletto, ampliamento di conoscenze e soprattutto **per migliorare la propria vita digitale** sa benissimo (e lo scopre tramite *terapia d'urto*) che gestirsi le cose da soli significa anche dover aggiustare eventuali problemi contando solo sulle proprie forze.

Dopotutto, come diceva *Peter Parker*:

> "Da grandi poteri derivano grandi responsabilità"

Lo so, la citazione può sembrare completamente fuori luogo, ma gli HomeLabber mi capiranno: quando tutto funziona, **ci sentiamo veramente dei supereroi** (e per chi vive in casa nostra, lo siamo davvero).

Non esiste un modo per aggiustare automaticamente i problemi ancora prima che accadano, ma possiamo fare il possibile per accorgerci dei guasti prima che diventino invalidanti, soprattutto se utilizzate [**NGINX** come Load Balancer per server DNS](https://blog.firenetwork.it/nginx-creare-un-load-balancer-per-server-dns-2/).

Una delle soluzioni a questo problema potrebbe essere quello di monitorare costantemente i log di errore di NGINX tramite

```bash
tail -f /var/log/nginx/error.log

```

ma... così facendo non ci rimane tempo per dedicarci ad altro.

Purtroppo NGINX non espone metriche relative agli errori che riscontra, o perlomeno non al momento della scrittura di questo articolo, ma ho messo a punto un metodo per leggere queste metriche tramite **Telegraf** e visualizzarle quindi su **Grafana** tramite **Prometheus**.

Vediamo insieme come fare!

![](https://blog.firenetwork.it/content/images/2025/06/Immagine-WhatsApp-2025-06-26-ore-19.35.25_07626ed9.jpg) 

## Prerequisiti

Per seguire i passaggi indicati in questa guida avrete bisogno di:

- Un'istanza di **Grafana** e **Prometheus**, e di aver censito **Prometheus** come *DataSource* in **Grafana**
- Almeno un'istanza di **NGINX** da monitorare
- **Telegraf** installato sull'istanza di **NGINX** da monitorare
- (opzionalmente) Aver attivato lo *stub\_status\_module* di NGINX per monitorare altre metriche relative ad **NGINX**, come spiegato nella guida [Introduzione ad NGINX](https://blog.firenetwork.it/introduzione-ad-nginx/) durante la creazione del site *nginx\_metrics*.

Dovete inoltre avere attivato, nel vostro file *nginx.conf*, i log di errore.

Questo perché l'automatismo che andremo a configurare tramite Telegraf andrà periodicamente a leggere il file contenente i log di errori di NGINX, conterà quelli relativi agli ultimi 60 secondi, ed esporterà una metrica che indica il numero totale di errori avvenuti in quell'arco temporale.

La configurazione di **Telegraf** indicata nei passaggi successivi dà per scontato che abbiate lasciato l'impostazione di default */var/log/nginx/error.log*, ma potete cambiare questo puntamento variando il parametro relativo.

![](https://blog.firenetwork.it/content/images/2025/06/thisisengineering-zBLtU0zbJcU-unsplash.jpg) 

## Configurazione

Vediamo insieme come configurare il tutto, partendo dalla configurazione di **Telegraf** sul nodo **NGINX**, configurando il job di scraping su **Prometheus** ed infine visualizzando le metriche su **Grafana**.

## Telegraf

- Se non avete ancora installato **Telegraf** sulla vostra macchina **NGINX**, potete farlo seguendo la mia guida

[Installazione di TelegrafTelegraf è un software open source di InfluxData che raccoglie metriche da servizi e sistemi (compresa la macchina su cui viene installato) per poi esporle tramite un webserver e farle utilizzare da altri servizi.![](https://blog.firenetwork.it/content/images/icon/FireNetwork2-39.png)Firenetwork - BlogSamuele Gabbrielli![](https://blog.firenetwork.it/content/images/thumbnail/telegraf-7.png)](https://blog.firenetwork.it/telegraf-installazione/)

- Modificate il file di configurazione di **Telegraf**

```bash
sudo nano /etc/telegraf/telegraf.conf

```

- Aggiungete in fondo al file il seguente contenuto:

```toml
###############################################################################
# 1) INPUT: Nginx error log (solo livelli "error")
###############################################################################
[[inputs.tail]]
  files = ["/var/log/nginx/error.log"]
  from_beginning = false
  data_format = "grok"
  grok_patterns = ['%{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{TIME} \[%{LOGLEVEL:log_level}\] %{GREEDYDATA:message}']
  name_override = "debug_tail"

###############################################################################
# 2) PROCESSOR: trasforma il log "error" in error_count = 1 (int)
###############################################################################
[[processors.starlark]]
  namepass = ["debug_tail"]
  drop_original = true
  source = '''
def apply(metric):
    level = metric.fields.get("log_level", "").lower()
    if level == "error":
        metric.name = "nginx_errors"
        metric.fields.clear()
        metric.fields["error_count"] = int(1)
        return [metric]
    return []
'''

###############################################################################
# 3) AGGREGATORE: somma tutti gli error_count nell’ultimo minuto
###############################################################################
[[aggregators.basicstats]]
  namepass = ["nginx_errors"]
  period = "60s"
  drop_original = true
  stats = ["sum"]
  fieldpass = ["error_count"]

```

**Di default**, questa configurazione mostra in una metrica gli errori **che si sono verificati negli ultimi 60 secondi**. Se volete rendere più granulare questa metrica, potete cambiare il parametro `period` a `30s` o `15s`. Un valore più piccolo permette di avere una **maggiore granularità nel monitoraggio**, ma è **fondamentale** che questo valore sia **un multiplo** dell'intervallo di *scraping* impostato su **Prometheus**.

‼️

ATTENZIONE  
Fate attenzione a ****non indicare nello script un intervallo di tempo minore dell'intervallo di scraping** di Prometheus.  
Facendo così, ****perderete i dati** relativi a diversi intervalli di aggiornamento. Ad esempio, se Prometheus fa lo **scraping* ogni 60 secondi, impostare il parametro `period` a 30 secondi comporterà la perdita di metà dei dati.  
Idealmente, impostate un ****valore almeno equivalente all'intervallo di scraping**, e comunque ****un multiplo di quel numero**.

- Aggiungete l'utente *telegraf* al gruppo *adm* per permettergli di leggere il file di log

```bash
sudo usermod -aG adm telegraf

```

❓

È SICURO?  
Generalmente sì.  
Il gruppo **adm* nelle distribuzioni come ****Debian**, ****Ubuntu** e derivate ha accesso ****in lettura** a molti file di log, e principalmente si usa per fini di ****monitoraggio** ed ****auditing**. Di conseguenza, se l'utente **telegraf* dovesse venire compromesso, un attaccante potrebbe ****accedere a log sensibili**, come ****tentativi di accesso SSH** ed ****errori di autenticazione**.  
Tuttavia, per motivi di semplicità e dato il contesto "casalingo" di queste guide, sono abbastanza tranquillo nel suggerirvi di procedere in questo modo.

- Riavviate il servizio di telegraf per applicare le modifiche

```bash
sudo systemctl restart telegraf

```

## Prometheus

- Se non avete ancora installato **Prometheus**, potete farlo seguendo la mia guida

[Installazione di PrometheusPrometheus è un software open source (github) che immagazzina metriche in un Time-Series DataBase (TSDB) e permette di eseguire query sui dati.![](https://blog.firenetwork.it/content/images/icon/FireNetwork2-40.png)Firenetwork - BlogSamuele Gabbrielli![](https://blog.firenetwork.it/content/images/thumbnail/Prometheus-4.png)](https://blog.firenetwork.it/installazione-di-prometheus/)

Se non avete già integrato in **Prometheus** l'istanza di **Telegraf** sul nodo **NGINX**, modificate il file di configurazione *prometheus.yml* aggiungendo un nuovo *job di scraping* (vi consiglio di monitorare i nodi NGINX in un job a parte):

- Modificate il file *prometheus.yml*

```bash
sudo nano prometheus/prometheus.yml

```

- Aggiungete un nuovo *job* col seguente contenuto

```toml
  - job_name: 'NGINX'
    static_configs:
      - targets: ['Indirizzo.IP.di.NGINX:9273']

```

- Salvate il file e riavviate **Prometheus** per applicare le modifiche

```bash
sudo systemctl restart prometheus

```

- Controllate di non aver rotto niente 👼🏻

```bash
sudo systemctl status prometheus

```

- Controllate che i *target* del job **NGINX** siano funzionanti, accedendo all'interfaccia web di **Prometheus** `http://Indirizzo.IP.di.Prometheus:9090`

## Grafana

- Se non avete ancora installato **Grafana**, potete farlo seguendo la mia guida

[Installazione ed Utilizzo di GrafanaUna guida completa per installare e configurare Grafana su Ubuntu. Segui i passaggi dettagliati per collegare Prometheus e creare da zero la tua prima dashboard di monitoraggio, trasformando i dati grezzi in grafici chiari ed efficaci.![](https://blog.firenetwork.it/content/images/icon/FireNetwork2-41.png)Firenetwork - BlogSamuele Gabbrielli![](https://blog.firenetwork.it/content/images/thumbnail/Grafana-5.png)](https://blog.firenetwork.it/installazione-ed-utilizzo-di-grafana/)

- Dovrete inoltre aggiungere **Prometheus** come *DataSource* su **Grafana**. Potete trovare anche questo processo illustrato nella guida di **Installazione ed Utilizzo di Grafana**

Attendete qualche istante e dovreste poter già creare i vostri widget usando la nuova metrica **nginx\_errors\_error\_count\_sum**.

Se preferite, potete importare questa dashboard generica che ho creato, che utilizza le metriche provenienti dal *site* **nginx\_status** che abbiamo abilitato nella mia guida [Introduzione ad NGINX](https://blog.firenetwork.it/introduzione-ad-nginx/) e la metrica **nginx\_errors\_error\_count\_sum** appena configurata.

[NGINX\_Grafana\_templateUna Dashboard di Grafana che raccoglie tutte le metriche relative a NGINX.NGINX\_Grafana\_template.json25 KBdownload-circle](https://blog.firenetwork.it/content/files/2025/07/NGINX%5FGrafana%5Ftemplate.json "Download")

![](https://blog.firenetwork.it/content/images/2025/07/immagine-7.png)

uno screenshot della dashboard una volta importata su Grafana

![](https://blog.firenetwork.it/content/images/2025/07/benjamin-davies-FiZTaNTj2Ak-unsplash.jpg) 

## Conclusioni

In questo articolo, abbiamo visto come monitorare in modo efficace gli errori di NGINX, trasformando un task potenzialmente noioso come l'analisi dei log in un sistema di monitoraggio proattivo e visuale con Telegraf, Prometheus e Grafana.

I vantaggi di questo approccio sono molteplici:

- **Monitoraggio proattivo:** Ora che sappiamo quanti errori vengono registrati su NGINX, possiamo intervenire prima che i problemi diventino critici, riducendo i tempi di inattività, quando notiamo dei picchi nel numero di errori.
- **Visualizzazione centralizzata:** Abbiamo i dati relativi a tutte le istanze di NGINX in un'unica dashboard Grafana, per un'analisi facilitata.
- **Avvisi personalizzabili:** Grazie alle funzionalità di *alerting* di **Grafana**, possiamo ricevere notifiche automatiche in caso di anomalie.

Spero che questa guida vi sia stata utile per migliorare la stabilità e la gestione dei vostri server **NGINX**, sia che li utilizziate per progetti personali o per scopi più professionali.

Ora, **tocca a voi**! **Personalizzate** la configurazione, **create dashboard** che riflettano le vostre esigenze specifiche e combinate queste preziose metriche con altre informazioni chiave per avere una visione completa della salute del vostro sistema.

Continuate a **sperimentare** e a **migliorare** il vostro HomeLab, un passo alla volta!

---

![](https://blog.firenetwork.it/content/images/2025/06/Written-By-Human-Not-By-AI-Badge-white@2x-4.png)