Felsökningsguide för Syslog för Azure Monitor Agent för Linux
Varning
Den här artikeln refererar till CentOS, en Linux-distribution som har statusen End Of Life (EOL). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.
Översikt över Azure Monitor Agent för Linux Syslog-samling och RFC-standarder som stöds:
- Azure Monitor Agent installerar en utdatakonfiguration för systemets Syslog-daemon under installationsprocessen. Konfigurationsfilen anger hur händelser flödar mellan Syslog-daemon och Azure Monitor Agent.
- För
rsyslog
(de flesta Linux-distributioner) är/etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
konfigurationsfilen . Försyslog-ng
är/etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf
konfigurationsfilen . - Azure Monitor-agenten lyssnar på en TCP-port för att ta emot händelser från
rsyslog
/syslog-ng
. Porten för den här kommunikationen loggas på/etc/opt/microsoft/azuremonitoragent/config-cache/syslog.port
.Kommentar
Före Azure Monitor Agent version 1.28 använde den en Unix-domänsocket i stället för TCP-port för att ta emot händelser från rsyslog.
omfwd
utdatamodul irsyslog
erbjuder mekanismer för poolning och återförsök för bättre tillförlitlighet. - Syslog-daemonen använder köer när Azure Monitor Agent-inmatning fördröjs eller när Azure Monitor-agenten inte kan nås.
- Azure Monitor Agent matar in Syslog-händelser via den tidigare nämnda socketen och filtrerar dem baserat på en kombination av anläggning eller allvarlighetsgrad från konfigurationen av datainsamlingsregeln (DCR) i
/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
. Allafacility
ellerseverity
som inte finns i DCR tas bort. - Azure Monitor Agent försöker parsa händelser i enlighet med RFC3164 och RFC5424. Den vet också hur du parsar de meddelandeformat som anges på den här webbplatsen.
- Azure Monitor Agent identifierar målslutpunkten för Syslog-händelser från DCR-konfigurationen och försöker ladda upp händelserna.
Kommentar
Azure Monitor-agenten använder lokal beständighet som standard. Alla händelser som tas emot från
rsyslog
ellersyslog-ng
placeras i/var/opt/microsoft/azuremonitoragent/events
kö om de inte kan laddas upp.
Problem
Du kan stöta på följande problem.
Rsyslog-data laddas inte upp på grund av ett fullständigt diskutrymmesproblem i Azure Monitor-agenten för Linux
I nästa avsnitt beskrivs problemet.
Symptom
Syslog-data laddas inte upp: När du inspekterar felloggarna på /var/opt/microsoft/azuremonitoragent/log/mdsd.err
visas poster om Fel vid infogning av objekt i lokalt beständigt lager... Det finns inget utrymme kvar på enheten som liknar följande kodfragment:
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
Orsak
Azure Monitor-agenten för Linux buffrar händelser till /var/opt/microsoft/azuremonitoragent/events
före inmatning. I en standardinstallation av Azure Monitor Agent för Linux tar den här katalogen cirka 650 MB diskutrymme vid inaktivitet. Storleken på disken ökar när den är under kontinuerlig loggningsbelastning. Den rensas ungefär var 60:e sekund och minskar till ~650 MB när belastningen återgår till inaktiv.
Bekräfta problemet med en fullständig disk
Kommandot df
visar nästan inget tillgängligt utrymme på /dev/sda1
, vilket visas i följande utdata. Observera att du bör undersöka det radobjekt som korrelerar med loggkatalogen (till exempel /var/log
eller /var
/
).
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
Du kan använda du
kommandot för att kontrollera disken för att avgöra vilka filer som gör att disken blir full. Till exempel:
cd /var/log
du -h syslog*
6.7G syslog
18G syslog.1
I vissa fall du
kanske du inte rapporterar några stora filer eller kataloger. Det kan vara möjligt att en fil markerad som (borttagen) tar upp utrymmet. Det här problemet kan inträffa när någon annan process har försökt ta bort en fil, men en process med filen är fortfarande öppen. Du kan använda lsof
kommandot för att söka efter sådana filer. I följande exempel ser vi att /var/log/syslog
det är markerat som borttaget, men det tar upp 3,6 GB diskutrymme. Den har inte tagits bort eftersom en process med PID 1484 fortfarande har filen öppen.
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)
Rsyslog standardkonfiguration loggar alla anläggningar till /var/log/
På några populära distributioner (till exempel Ubuntu 18.04 LTS) levereras rsyslog med en standardkonfigurationsfil (/etc/rsyslog.d/50-default.conf
), som loggar händelser från nästan alla anläggningar till disk på /var/log/syslog
. RedHat/CentOS-familjen Syslog-händelser lagras under /var/log/
men i en annan fil: /var/log/messages
.
Azure Monitor-agenten förlitar sig inte på syslog-händelser som loggas till /var/log/
. I stället konfigureras rsyslog-tjänsten för att vidarebefordra händelser via en TCP-port direkt till azuremonitoragent
tjänstprocessen (mdsd).
Korrigering: Ta bort högvolymanläggningar från /etc/rsyslog.d/50-default.conf
Om du skickar en hög loggvolym via rsyslog och systemet har konfigurerats för att logga händelser för dessa anläggningar kan du överväga att ändra standardkonfigurationen för rsyslog för att undvika loggning och lagra dem under /var/log/
. Händelserna för den här anläggningen vidarebefordras fortfarande till Azure Monitor Agent eftersom rsyslog använder en annan konfiguration för vidarebefordran som placeras i /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
.
Om du till exempel vill ta bort
local4
händelser från att loggas på/var/log/syslog
eller/var/log/messages
ändrar du den här raden i/etc/rsyslog.d/50-default.conf
från det här kodfragmentet:*.*;auth,authpriv.none -/var/log/syslog
I det här kodfragmentet (lägg till
local4.none;
):*.*;local4.none;auth,authpriv.none -/var/log/syslog
sudo systemctl restart rsyslog