Linux 用 Azure Monitor エージェントの Syslog のトラブルシューティング ガイド
注意事項
この記事では、サービス終了 (EOL) 状態となっている Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。
Linux 用 Azure Monitor エージェントの Syslog 収集とサポートされている RFC 標準の概要:
- Azure Monitor エージェントは、インストール プロセス中にシステムの Syslog デーモン用の出力構成をインストールします。 構成ファイルには、Syslog デーモンと 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
にログされます。Note
バージョン 1.28 より前の Azure Monitor エージェントは、rsyslog からイベントを受信するために、TCP ポートではなく Unix ドメイン ソケットを使っていました。
rsyslog
のomfwd
出力モジュールは、信頼性を向上させるためのスプールと再試行のメカニズムを備えています。 - Syslog デーモンは、Azure Monitor エージェントの取り込みが遅れている場合、または Azure Monitor エージェントに到達できない場合にキューを使用します。
- Azure Monitor エージェントは、前述のソケットを介して Syslog イベントを取り込み、
/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
のデータ収集規則 (DCR) 構成から機能または重大度の組み合わせに基づいてそれらをフィルター処理します。 DCR に存在しないfacility
またはseverity
はすべてドロップされます。 - Azure Monitor エージェントは、RFC3164 および RFC5424 に従ってイベントの解析を試みます。 また、この Web サイトに記載されているメッセージ形式を解析する方法も認識しています。
- Azure Monitor エージェントは、DCR 構成から Syslog イベントの宛先エンドポイントを識別し、イベントのアップロードを試みます。
注意
Azure Monitor エージェントは、既定でローカル永続化を使用します。
rsyslog
またはsyslog-ng
から受信したすべてのイベントはアップロードに失敗すると、/var/opt/microsoft/azuremonitoragent/events
にキューされます。
問題
次の問題が発生することがあります。
Linux 用 Azure Monitor エージェントでディスク領域がいっぱいになる問題のため、rsyslog データがアップロードされない
次のセクションでは、この問題について説明します。
症状
Syslog データがアップロードされていない: /var/opt/microsoft/azuremonitoragent/log/mdsd.err
でエラー ログを検査すると、次のスニペットのような Error while inserting item to Local persistent store…No space left on device に関するエントリが見つかります。
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
では大きなファイルやディレクトリが報告されないことがあります。 (deleted) としてマークされたファイルが領域を占有している可能性があります。 この問題は、他のプロセスがファイルを削除しようとしたが、そのファイルを開いているプロセスが残っている場合に発生する可能性があります。 lsof
コマンドを使用してそのようなファイルがないかを確認できます。 次の例では、/var/log/syslog
が "deleted" としてマークされていますが、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 Monitor エージェントは、/var/log/
に記録されている Syslog イベントに依存しません。 代わりに、イベントを TCP ポート経由で azuremonitoragent
サービス プロセス (mdsd) に直接転送するように、rsyslog サービスを構成します。
修正: /etc/rsyslog.d/50-default.conf からボリュームの大きい機能を削除する
rsyslog を通して大きいログ ボリュームを送信していて、システムがこれらの機能のイベントをログに記録するように設定されている場合は、ログ記録と /var/log/
の下への保存を止めるように既定の rsyslog 構成を修正することを検討してください。 rsyslog は /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
に配置された転送用の別の構成を使用するため、この機能のイベントは引き続き Azure Monitor エージェントに転送されます。
たとえば、
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