Guida alla risoluzione di problemi di Syslog per l'agente di Monitoraggio di Azure per Linux
Attenzione
Questo articolo fa riferimento a CentOS, una distribuzione di Linux che ha raggiunto lo stato di fine del servizio (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.
Panoramica dell'agente di Monitoraggio di Azure per la raccolta Syslog Linux e degli standard RFC supportati:
- L'agente di Monitoraggio di Azure installa una configurazione di output per il daemon Syslog di sistema durante il processo di installazione. Il file di configurazione specifica il flusso degli eventi tra il daemon Syslog e l'agente di Monitoraggio di Azure.
- Per
rsyslog
(la maggior parte delle distribuzioni Linux), il file di configurazione è/etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
. Persyslog-ng
, il file di configurazione è/etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf
. - L'agente di Monitoraggio di Azure è in ascolto di una porta TCP per ricevere eventi da
rsyslog
/syslog-ng
. La porta per questa comunicazione viene registrata in/etc/opt/microsoft/azuremonitoragent/config-cache/syslog.port
.Nota
Prima dell'agente di Monitoraggio di Azure versione 1.28, veniva usato un socket di dominio Unix anziché una porta TCP per ricevere eventi da rsyslog. Il modulo di output
omfwd
inrsyslog
offre meccanismi di spooling e retry per migliorare l'affidabilità. - Il daemon Syslog usa le code quando l'inserimento dell'agente di Monitoraggio di Azure viene ritardato o quando l'agente di Monitoraggio di Azure non è raggiungibile.
- L'agente di Monitoraggio di Azure inserisce gli eventi Syslog tramite il socket indicato in precedenza e li filtra in base alla combinazione di funzionalità o gravità dalla configurazione della regola di raccolta dati (DCR) in
/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
. Qualsiasifacility
oseverity
non presenti nel Registro Azure Container vengono eliminati. - L'agente di Monitoraggio di Azure tenta di analizzare gli eventi in base a RFC3164 e RFC5424. Sa anche come analizzare i formati di messaggio elencati in questo sito Web.
- L'agente di Monitoraggio di Azure identifica l'endpoint di destinazione per gli eventi Syslog dalla configurazione di DCR e tenta di caricare gli eventi.
Nota
L'agente di Monitoraggio di Azure usa per impostazione predefinita la persistenza locale. Se non riescono ad essere caricati, tutti gli eventi ricevuti da
rsyslog
osyslog-ng
vengono accodati in/var/opt/microsoft/azuremonitoragent/events
.
Problemi
Potrebbero verificarsi i problemi seguenti.
I dati Rsyslog non vengono caricati a causa di un problema di spazio su disco esaurito nell'agente di Monitoraggio di Azure per Linux
Le sezioni successive descrivono il problema.
Sintomo
I dati syslog non vengono caricati: quando si esaminano i log degli errori in /var/opt/microsoft/azuremonitoragent/log/mdsd.err
, si notano voci relative a un Errore durante l'inserimento dell'elemento nell'archivio permanente locale... Nessuno spazio disponibile su dispositivo simili al frammento di codice seguente:
2021-11-23T18:15:10.9712760Z: Error while inserting item to Local persistent store syslog.error: IO error: No space left on device: While appending to file: /var/opt/microsoft/azuremonitoragent/events/syslog.error/000555.log: No space left on device
Causa
L'agente di Monitoraggio di Azure per Linux memorizza gli eventi in /var/opt/microsoft/azuremonitoragent/events
prima dell'inserimento. In un'installazione predefinita dell'agente di Monitoraggio di Azure per Linux, questa directory richiede circa 650 MB di spazio su disco inattivo. Le dimensioni del disco aumentano quando sotto carico di registrazione sostenuto. Viene pulito circa ogni 60 secondi e si riduce a circa 650 MB quando il carico torna inattivo.
Confermare il problema di spazio su disco esaurito
Il comando df
mostra quasi nessuno spazio disponibile in /dev/sda1
, come illustrato nell'output seguente. Si noti che è necessario esaminare l'elemento della riga correlato alla directory di log (ad esempio, /var/log
o /var
o /
).
df -h
Filesystem Size Used Avail Use% Mounted on
udev 63G 0 63G 0% /dev
tmpfs 13G 720K 13G 1% /run
/dev/sda1 29G 29G 481M 99% /
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda15 105M 4.4M 100M 5% /boot/efi
/dev/sdb1 251G 61M 239G 1% /mnt
tmpfs 13G 0 13G 0% /run/user/1000
È possibile usare il comando du
per esaminare il disco per determinare quali file causino l’esaurimento dello spazio su disco. Ad esempio:
cd /var/log
du -h syslog*
6.7G syslog
18G syslog.1
In alcuni casi, du
potrebbe non segnalare alcun file o directory di grandi dimensioni. È possibile che un file contrassegnato come (eliminato) stia occupando spazio. Questo problema può verificarsi quando un altro processo ha tentato di eliminare un file, ma un processo con il file è ancora aperto. È possibile usare il comando lsof
per verificare la presenza di file come questo. Nell'esempio seguente si nota che /var/log/syslog
è contrassegnato come eliminato, ma occupa 3,6 GB di spazio su disco. Non è stato eliminato perché un processo con PID 1484 ha il file ancora aperto.
sudo lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
none 849 root txt REG 0,1 8632 0 16764 / (deleted)
rsyslogd 1484 syslog 14w REG 8,1 3601566564 0 35280 /var/log/syslog (deleted)
La configurazione predefinita di Rsyslog registra tutte le funzionalità in /var/log/
In alcune distribuzioni comuni (ad esempio, Ubuntu 18.04 LTS), rsyslog viene fornito con un file di configurazione predefinito (/etc/rsyslog.d/50-default.conf
), che registra gli eventi da quasi tutte le strutture al disco in /var/log/syslog
. Gli eventi Syslog della famiglia RedHat/CentOS vengono archiviati in /var/log/
ma in un file diverso: /var/log/messages
.
L'agente di Monitoraggio di Azure non si basa sugli eventi Syslog registrati in /var/log/
. Configura invece il servizio rsyslog per inoltrare eventi su una porta TCP direttamente al processo del servizio azuremonitoragent
(mdsd).
Correzione: rimuovere strutture ad alto volume da /etc/rsyslog.d/50-default.conf
Se si invia un volume di log elevato tramite rsyslog e il sistema è configurato per registrare eventi per queste strutture, è consigliabile modificare la configurazione rsyslog predefinita per evitare la registrazione e l'archiviazione in /var/log/
. Gli eventi per questa funzionalità verranno comunque inoltrati all'agente di Monitoraggio di Azure, poiché rsyslog usa una configurazione diversa per l'inoltro inserito in /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
.
Ad esempio, per rimuovere eventi
local4
dalla registrazione in/var/log/syslog
o/var/log/messages
, modificare questa riga in/etc/rsyslog.d/50-default.conf
da questo frammento di codice:*.*;auth,authpriv.none -/var/log/syslog
A questo frammento di codice (aggiungere
local4.none;
):*.*;local4.none;auth,authpriv.none -/var/log/syslog
sudo systemctl restart rsyslog