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) 組態中的設備或嚴重性組合對這些事件進行篩選。 DCR 中不存在的任何facility
或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
原因
適用於 Linux 的 Azure 監視器代理程式會在擷取之前 /var/opt/microsoft/azuremonitoragent/events
緩衝事件。 在預設的適用於 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
可能不會報告任何大型檔案或目錄。 標示為 (已刪除) 檔案可能會佔用空間。 當某些其他程序嘗試刪除檔案時,就會發生此問題,但具有該檔案的程序仍會開啟狀態。 您可使用 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/syslog
或/var/log/messages
的記錄中移除local4
事件,請從下列位置變更/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