你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Monitor 代理在安装过程中为系统的 Syslog 守护程序安装输出配置。 此配置定义如何将事件从守护程序转发到 Azure Monitor 代理,并位于:
/etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
用于 rsyslog (大多数 Linux 发行版)/etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf
for syslog-ng
Azure Monitor 代理会侦听 TCP 端口(记录于 /etc/opt/microsoft/azuremonitoragent/config-cache/syslog.port
),以接收来自 rsyslog 或 syslog-ng 的事件。 它根据位于/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
的数据收集规则(DCR)中定义的类别或严重性值来筛选这些事件。 删除与 DCR 配置不匹配的事件。
注意
在版本 1.28 之前,Azure Monitor 代理使用 Unix 域套接字而不是 TCP 端口从 rsyslog 接收事件。 rsyslog 中的 omfwd
输出模块提供后台处理和重试机制,以提高可靠性。
Azure Monitor 代理根据 RFC3164 和 RFC5424 分析传入的 Syslog 消息,还支持 其他格式。 它确定 DCR 中每个事件的目标终结点,并尝试相应地上传它们。
注意
如果 Azure Monitor 代理无法访问或遇到延迟,则 Syslog 守护程序会使用其内部队列缓冲事件。
如果 Azure Monitor 代理无法上传从 rsyslog 或 syslog-ng 接收的事件,则会使用其本地持久性机制将它们排入
/var/opt/microsoft/azuremonitoragent/events
队列。
问题
可能会遇到以下问题:
由于适用于 Linux 的 Azure Monitor 代理存在磁盘空间已满问题,Rsyslog 数据未上传
症状
Syslog 数据未上传:检查错误日志 /var/opt/microsoft/azuremonitoragent/log/mdsd.err
时,在 将项插入本地持久存储时看到有关 Error 的条目...设备上没有剩余空间... 类似于以下代码片段:
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
原因
用于 Linux 的 Azure Monitor 代理会在引入之前将事件缓冲到 /var/opt/microsoft/azuremonitoragent/events
。 在默认的适用于 Linux 的 Azure Monitor 代理安装中,此目录在空闲时占用约 650 MB 的磁盘空间。 在持续的日志记录负载下,磁盘上的大小会增加。 它会每隔 60 秒清理一次,当负载恢复为空闲时,会减少到约 650 MB。
确认磁盘空间已满的问题
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 GB 的磁盘空间。 该文件尚未被删除,因为 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 系列 Syslog 事件存储在/var/log/
以下,但存储在其他文件中: /var/log/messages
Azure Monitor 代理不依赖记录到/var/log/
的 Syslog 事件。 取而代之的是,它将 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