Руководство по устранению неполадок системного журнала для агента Azure Monitor для Linux
Внимание
Эта статья ссылается на CentOS, дистрибутив Linux, который является состоянием "Конец жизни" (EOL). Пожалуйста, рассмотрите возможность использования и планирования соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.
Общие сведения о коллекции Агента Azure Monitor для Системного журнала Linux и поддерживаемых стандартах RFC:
- Агент Azure Monitor устанавливает выходную конфигурацию для управляющей программы системного журнала во время установки. Файл конфигурации указывает способ потока событий между управляющей службой Системного журнала и агентом Azure Monitor.
- Для
rsyslog
(большинство дистрибутивов Linux) файлом конфигурации является/etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
. Дляsyslog-ng
это/etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf
. - Агент Azure Monitor прослушивает TCP-порт для получения событий.
rsyslog
/syslog-ng
Порт для этого сообщения регистрируется в/etc/opt/microsoft/azuremonitoragent/config-cache/syslog.port
журнале.Примечание.
Перед агентом Azure Monitor версии 1.28 он использовал сокет домена Unix вместо TCP-порта для получения событий из rsyslog.
omfwd
Выходной модуль вrsyslog
предлагает механизмы spooling и повторных попыток для повышения надежности. - Управляющая программа системного журнала использует очереди, если прием агента Azure Monitor задерживается или когда агент Azure Monitor недоступен.
- Агент Azure Monitor выполняет прием событий системного журнала через ранее упомянутый сокет и фильтрует их на основе сочетания средств или серьезности из конфигурации
/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
правила сбора данных (DCR). Всеfacility
илиseverity
нет в DCR удаляются. - Агент Azure Monitor пытается проанализировать события в соответствии с RFC3164 и RFC5424. Он также знает, как анализировать форматы сообщений, перечисленные на этом веб-сайте.
- Агент Azure Monitor определяет конечную точку назначения для событий системного журнала из конфигурации DCR и пытается передать события.
Примечание.
Агент Azure Monitor по умолчанию использует локальную сохраняемость. Все события, полученные от
rsyslog
илиsyslog-ng
в очереди,/var/opt/microsoft/azuremonitoragent/events
если они не будут отправлены.
Проблемы
Вы можете столкнуться со следующими проблемами.
Данные Rsyslog не отправляются из-за полного места на диске в агенте Azure Monitor для Linux
В следующих разделах описывается проблема.
Симптом
Данные системного журнала не передаются: при проверке журналов /var/opt/microsoft/azuremonitoragent/log/mdsd.err
ошибок по адресу вы увидите записи об ошибке при вставке элемента в локальное постоянное хранилище... Не осталось места на устройстве , как показано в следующем фрагменте кода:
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
Причина
Агент Azure Monitor для Linux буферизирует события /var/opt/microsoft/azuremonitoragent/events
до приема. При установке агента Azure Monitor по умолчанию для Linux этот каталог занимает около 650 МБ места на диске бездействия. Размер диска увеличивается при постоянной нагрузке ведения журнала. Она очищается примерно каждые 60 секунд и уменьшается до ~650 МБ при возвращении нагрузки в состояние простоя.
Подтверждение проблемы с полным диском
В команде df
почти нет места, /dev/sda1
как показано в следующих выходных данных. Обратите внимание, что следует изучить элемент строки, который коррелирует с каталогом журнала (например, /var/log
или /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
команды можно проверить диск, чтобы определить, какие файлы вызывают заполнение диска. Например:
cd /var/log
du -h syslog*
6.7G syslog
18G syslog.1
В некоторых случаях может не сообщать о больших файлах du
или каталогах. Возможно, файл, помеченный как удаленный , занимает место. Эта проблема может возникать, когда некоторые другие процессы попытались удалить файл, но процесс с файлом по-прежнему открыт. Чтобы проверить наличие таких файлов, можно использовать lsof
команду. В следующем примере мы видим, что /var/log/syslog
помечен как удаленный, но он занимает 3,6 ГБ дискового пространства. Он не был удален, так как по-прежнему открыт в процессе с PID 1484.
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 по умолчанию регистрирует все объекты в /var/log/
В некоторых популярных дистрибутивах (например, Ubuntu 18.04 LTS), rsyslog поставляется с файлом конфигурации по умолчанию (/etc/rsyslog.d/50-default.conf
), который записывает события из почти всех объектов на диск /var/log/syslog
. События системного журнала redHat/CentOS хранятся в /var/log/
другом файле: /var/log/messages
Агент Azure Monitor не зависит от событий системного журнала, в которые регистрируется /var/log/
журнал. Вместо этого служба rsyslog настраивает перенаправление событий через TCP-порт непосредственно в azuremonitoragent
процесс службы (mdsd).
Исправление: удалите объекты большого объема из /etc/rsyslog.d/50-default.conf
Если вы отправляете большой объем журналов через rsyslog и система настроена для регистрации событий для этих объектов, попробуйте изменить конфигурацию rsyslog по умолчанию, чтобы избежать ведения журнала и хранения их в /var/log/
. События для этого объекта по-прежнему будут перенаправляться в агент Azure Monitor, так как rsyslog использует другую конфигурацию для переадресации, размещенной в /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
.
Например, чтобы удалить
local4
события из входа в систему/var/log/syslog
или/var/log/messages
изменить эту строку из/etc/rsyslog.d/50-default.conf
этого фрагмента кода:*.*;auth,authpriv.none -/var/log/syslog
В этот фрагмент кода (добавьте
local4.none;
):*.*;local4.none;auth,authpriv.none -/var/log/syslog
sudo systemctl restart rsyslog