In un’infrastruttura IT affidabile ed efficiente, il monitoraggio continuo dei servizi è fondamentale.
Tra i servizi critici per molte organizzazioni c’è Postfix, uno dei mail server più diffusi e apprezzati per la sua stabilità e configurabilità.
Tuttavia, per mantenere sotto controllo il suo funzionamento e diagnosticare eventuali problemi in tempo reale, è essenziale disporre di strumenti di osservabilità moderni.
In questo articolo esploreremo come integrare Postfix con Grafana, utilizzando Loki e Promtail per raccogliere, indicizzare e visualizzare i log del server.
Vedremo passo dopo passo come configurare questo stack per ottenere una panoramica chiara e dinamica dell’attività di Postfix, migliorando così la capacità di monitoraggio e risposta agli incidenti.
PREREQUISITI
- Server Postfix attivo sul server POSTFIX-SERVER
- Cartella dei log Postifix -> /var/log/mail.log
- Server Grafana installato sul server GRAFANA-SERVER
- Entrambi sono Ubuntu 24.04.
- Vuoi visualizzare i log di Postfix in Grafana usando Loki e promtail.
INSTALLAZIONE DI PROMTAIL SU POSTFIX-SERVER
Scaricare i binari di Promtail con i seguenti comandi:
0
1
2
3
4
|
cd /opt
wget https://github.com/grafana/loki/releases/latest/download/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
chmod +x promtail-linux-amd64
sudo mv promtail-linux-amd64 /usr/local/bin/promtail
|
Verificare che il file scaricato sia un eseguibile con il comando:
0 |
file /usr/local/bin/promtail
|
Dovremmo vedere un output simile al seguente:
0 |
/usr/local/bin/promtail: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=06b5623e0d1f2dc4f1066b7b1d808f19019f80f1, for GNU/Linux 3.2.0, stripped
|
CONFIGURAZIONE DI PROMTAIL SU POSTFIX-SERVER
Creare la cartella promtail con il comando:
0 |
mkdir -p /etc/promtail
|
Creare il file di configurazione /etc/promtail/config.yml con il comando:
0 |
nano /etc/promtail/config.yml
|
All’interno del file di configurazione incollare il seguente listato:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /var/log/positions.yaml
clients:
- url: http://IP-SERVER-GRAFANA:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
host: VM-SRV-UBU-SMTP
__path__: /var/log/mail.log
|
NOTA BENE: inserire al posto di IP-SERVER-GRAFANA l’IP o l’FDQN del server Grafana dove installeremo Loki
ATTENZIONE: Assicurarsi che il file /var/log/mail.log esista (di solito è lì per i log Postfix). Se usa rsyslog, verificare che sia configurato per scrivere in quel file.
Salvare e chiudere il file di configurazioni
CREAZIONE DEL SERVIZIO SYSTEMD PER PROMTAIL SU POSTFIX-SERVER
Creare il file /etc/systemd/system/promtail.service con il comando:
0 |
sudo nano /etc/systemd/system/promtail.service
|
All’interno del file di configurazione incollare il seguente listato:
0
1
2
3
4
5
6
7
8
9
|
[Unit]
Description=Promtail
After=network.target
[Service]
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/config.yml
Restart=always
[Install]
WantedBy=multi-user.target
|
Salvare e chiudere il file di configurazione.
ABILITAZIONE E AVVIO DEL SERVIZIO PROMTAIL SU POSTFIX-SERVER
Eseguire i seguenti comandi per abilitare e avviare il servizio relativo a Promtail:
0
1
2
|
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable --now promtail
|
Per verificare lo stato di Promtail eseguire il comando:
0 |
sudo systemctl status promtail
|
Se è tutto OK dovremmo visualizzare il seguente output:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
● promtail.service - Promtail
Loaded: loaded (/etc/systemd/system/promtail.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-05-19 18:57:08 CEST; 2h 16min ago
Main PID: 1660 (promtail)
Tasks: 8 (limit: 2260)
Memory: 86.5M (peak: 87.0M)
CPU: 17.170s
CGroup: /system.slice/promtail.service
└─1660 /usr/local/bin/promtail -config.file=/etc/promtail/config.yml
mag 19 21:12:40 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:12:40.295254312Z caller=filetargetmanager.go>
mag 19 21:12:50 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:12:50.294611814Z caller=filetargetmanager.go>
mag 19 21:12:50 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:12:50.294855864Z caller=filetargetmanager.go>
mag 19 21:12:50 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:12:50.295558029Z caller=filetargetmanager.go>
mag 19 21:13:00 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:13:00.294518656Z caller=filetargetmanager.go>
mag 19 21:13:00 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:13:00.294543671Z caller=filetargetmanager.go>
mag 19 21:13:00 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:13:00.298430412Z caller=filetargetmanager.go>
mag 19 21:13:10 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:13:10.294938075Z caller=filetargetmanager.go>
mag 19 21:13:10 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:13:10.294962586Z caller=filetargetmanager.go>
mag 19 21:13:10 POSTFIX-SERVER promtail[1660]: level=info ts=2025-05-19T19:13:10.299372158Z caller=filetargetmanager.go>
|
INSTALLAZIONE DI LOKI SU GRAFANA-SERVER
Scaricare i binari di Promtail con i seguenti comandi:
0
1
2
3
4
|
cd /opt
curl -LO https://github.com/grafana/loki/releases/download/v3.5.0/loki-linux-amd64.zip
unzip loki-linux-amd64.zip
chmod +x loki-linux-amd64
sudo mv loki-linux-amd64 /usr/local/bin/loki
|
Verificare che il file sia un eseguibile con il comando:
0 |
file /usr/local/bin/loki
|
Dovremmo vedere un output simile al seguente:
0 |
/usr/local/bin/loki: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=cc9de99b06a4973629e47c561e55fffa3e16d696, stripped
|
CONFIGURAZIONE DI LOKI SU GRAFANA-SERVER
Creare la cartella Loki con il comando:
0 |
mkdir -p /etc/loki /var/lib/loki
|
Assegnare le ACL all’utente grafana con il comando:
0 |
sudo chown -R grafana:grafana /var/lib/loki
|
Creare il file di configurazione /etc/loki/loki-config.yaml con il comando:
0 |
sudo nano /etc/loki/loki-config.yaml
|
All’interno del file di configurazione incollare il seguente listato:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
auth_enabled: false
common:
path_prefix: /var/lib/loki
server:
http_listen_port: 3100
grpc_listen_port: 9095
ingester:
lifecycler:
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2024-01-01
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /var/lib/loki/index
cache_location: /var/lib/loki/cache
filesystem:
directory: /var/lib/loki/chunks
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 168h
allow_structured_metadata: false
table_manager:
retention_deletes_enabled: true
retention_period: 168h
compactor:
working_directory: /var/lib/loki/compactor
|
Salvare e chiudere il file di configurazione.
CREAZIONE DEL SERVIZIO SYSTEMD PER LOKI SU GRAFANA-SERVER
Creare il file /etc/systemd/system/loki.service con il comando:
0 |
sudo nano /etc/systemd/system/loki.service
|
All’interno del file di configurazione incollare il seguente listato:
0
1
2
3
4
5
6
7
8
9
|
[Unit]
Description=Loki
After=network.target
[Service]
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml
Restart=always
[Install]
WantedBy=multi-user.target
|
Salvare e chiudere il file di configurazione
ABILITAZIONE E AVVIO DEL SERVIZIO LOKI SU GRAFANA-SERVER
Eseguire i seguenti comandi per abilitare e avviare il servizio relativo a Promtail:
0
1
|
sudo systemctl daemon-reload
sudo systemctl enable --now loki
|
Per verificare lo stato di Promtail eseguire il comando:
0 |
sudo systemctl status loki
|
Se è tutto OK dovremmo visualizzare il seguente output:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
loki.service - Loki
Loaded: loaded (/etc/systemd/system/loki.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-05-19 16:57:06 UTC; 2h 27min ago
Main PID: 872 (loki)
Tasks: 8 (limit: 4609)
Memory: 150.9M (peak: 278.8M)
CPU: 1min 46.826s
CGroup: /system.slice/loki.service
└─872 /usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.795230209Z caller=index_set.go:86 msg="uploading table index_20227"
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.795237576Z caller=index_set.go:107 msg="finished uploading table inde>
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.795246228Z caller=index_set.go:186 msg="cleaning up unwanted indexes >
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.832538154Z caller=table_manager.go:187 index-store=boltdb-shipper-202>
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.832609612Z caller=table.go:318 msg="handing over indexes to shipper i>
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.832623568Z caller=table.go:334 msg="finished handing over table index>
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.890356384Z caller=recalculate_owned_streams.go:49 msg="starting recal>
May 19 19:23:07 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:07.890398315Z caller=recalculate_owned_streams.go:52 msg="completed reca>
May 19 19:23:37 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:37.889910566Z caller=recalculate_owned_streams.go:49 msg="starting recal>
May 19 19:23:37 GRAFANA-SERVER loki[872]: level=info ts=2025-05-19T19:23:37.889991405Z caller=recalculate_owned_streams.go:52 msg="completed reca>
lines 1-20/20 (END)
|
CONFIGURAZIONE DI LOKI IN GARFANA
Per aggiungere Loki come Datasource collegarsi al server Grafana da un qualsiasi browser richiamando il link:
http://<GRAFANA_SERVER_IP>:3000
Cliccare su Data Sources
Cliccare Add new data source
Inserire l’URL : http://localhost:3100
Quindi cliccare su Save & Test
Se è andato tutto a buon fine dovremmo visualizzare un messaggio come quello mostrato nell’immagine sovrastante
CREAZIONE DELLA DASHBOARD SU GRAFANA PER POSTFIX
Eseguire query base su Explore
Vai su Explore e prova una query come:
0 |
{job="varlogs", host="postfix-server"} |
Oppure per filtrare errori:
0 |
{job="varlogs", host="postfix-server"} |= "error"
|
E’ possibile importare le Dashboard già pronte su Grafana.com.
E’ possibile usare Import Dashboard in Grafana per caricarla usando l’ID della Dashboard
Dopo un po di configurazioni il risultato che potreste ottenere è quello mostrato nell’immagine sovrastante…
0 commenti