Condividi tramite


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. Per syslog-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 in rsyslog 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/. Qualsiasi facility o severity 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 o syslog-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.

  1. 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
    
  2. sudo systemctl restart rsyslog