Linux 的 Azure 監視器的 Syslog 疑難排解指南
警告
這篇文章參考 CentOS,這是接近生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引。
適用於 Linux Syslog 的 Azure 監視器代理程式集合和支援 RFC 標準的概觀:
- Azure 監視器代理程式會在安裝程式期間安裝系統 Syslog 精靈的輸出組態。 組態檔會指定 Syslog 精靈與 Azure 監視器代理程式之間的事件流動方式。
- 針對
rsyslog
(大部分的 Linux 發行版),組態檔為/etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
。 針對syslog-ng
,組態檔為/etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf
。 - Azure 監視器代理程式會接聽 TCP 連接埠,以從
rsyslog
/syslog-ng
接收事件。 此通訊的連接埠會記錄在/etc/opt/microsoft/azuremonitoragent/config-cache/syslog.port
。注意
在 Azure 監視器代理程式 1.28 版之前,它會使用 Unix 網域套接字,而不是 TCP 連接埠,從 rsyslog 接收事件。
omfwd
中的rsyslog
輸出模組提供多任務緩衝處理和重試機制,以改善可靠性。 - 當 Azure 監視器代理程式擷取延遲或無法連線到 Azure 監視器代理程式時,Syslog 精靈會使用佇列。
- Azure 監視器代理程式會透過先前提及的套接字擷取 Syslog 事件,並根據中的
/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
資料收集規則 (DCR) 組態中的設施或嚴重性組合加以篩選。facility
DCR 中的任何或severity
不存在都已卸除。 - Azure 監視器代理程式會嘗試根據 RFC3164 和 RFC5424剖析事件。 它也知道如何剖析此網站上所列的訊息格式。
- Azure 監視器代理程式會從 DCR 組態識別 Syslog 事件的目的地端點,並嘗試上傳事件。
注意
Azure 監視器代理程序預設會使用本機持續性。 如果無法上傳事件,則從
rsyslog
或syslog-ng
接收的所有事件都會排入/var/opt/microsoft/azuremonitoragent/events
佇列。
問題
您可能會遇到下列問題。
Rsyslog 資料不會上傳,因為適用於Linux的 Azure 監視器代理程式發生完整的磁碟空間問題
下一節將說明此問題。
徵兆
Syslog 數據未上傳:當您在 檢查錯誤 /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
原因
在擷取之前, /var/opt/microsoft/azuremonitoragent/events
適用於Linux的 Azure 監視器代理程式會緩衝事件。 在預設的適用於Linux的 Azure 監視器代理程式安裝上,此目錄會在閒置時佔用約 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
可能不會報告任何大型檔案或目錄。 可能已 標示為 (deleted) 的檔案佔用空間。 當某些其他進程嘗試刪除檔案,但檔案的進程仍在開啟時,就會發生此問題。 您可以使用 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/CentOS 系列 Syslog 事件會儲存在 底下 /var/log/
,但儲存在不同的檔案中: /var/log/messages
。
Azure 監視器代理程式不會依賴記錄至 /var/log/
的 Syslog 事件。 相反地,它會設定 rsyslog 服務,將事件透過 TCP 連接埠直接轉送至 azuremonitoragent
服務進程 (mdsd)。
修正:從 /etc/rsyslog.d/50-default.conf 移除大量設施
如果您要透過 rsyslog 傳送大量的記錄磁碟區,且系統已設定為記錄這些設施的事件,請考慮修改預設 rsyslog 設定,以避免記錄並將其儲存在 底下 /var/log/
。 此設施的事件仍會轉送至 Azure 監視器代理程式,因為 rsyslog 會使用不同的組態來轉送放在 中 /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
。
例如,若要從或
/var/log/messages
移除local4
記錄/var/log/syslog
的事件,請從此代碼段變更中的這一行/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
適用於Linux的 Azure 監視器代理程式事件緩衝區正在填滿磁碟
如果您觀察到 /var/opt/microsoft/azuremonitor/events
目錄未系結(10 GB 或更高),且大小不會減少, 請提出票證。 針對 [ 摘要],輸入 Azure 監視器代理程式事件緩衝區正在填滿磁碟。 針對 [問題類型],輸入 我需要從 VM 設定數據收集的協助。
提出票證
- 開啟數據收集規則,然後在左側的功能表上,選取 [ 新增支援要求]。 您也可以開啟 [說明 + 支援] 窗格 ,然後選取 [ 建立支援要求]。
- 選擇:
- 問題類型:技術。
- 訂用帳戶:選取您機器所在的訂用帳戶。
- 服務類型:數據收集規則和 Azure 監視器代理程式。
- 您的問題是否與資源有關?:是。 使用資源選擇器選取您的電腦。
- 輸入 摘要 和 問題類型 ,如疑難解答步驟所示。 準確的資訊會導致問題的更快速解決。
- 選取 [ 下一步 ],並檢閱建議的解決方案,以查看其是否有説明。
- 如果沒有説明,請選取 [下一步 ],然後填入下一組詳細數據。
- 選取 [ 下一步],檢閱最終的詳細數據,然後選取 [ 建立]。