次の方法で共有


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 ドメイン ソケットを使っていました。 rsyslogomfwd 出力モジュールは、信頼性を向上させるためのスプールと再試行のメカニズムを備えています。

  • 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 エージェントに転送されます。

  1. たとえば、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
    
  2. sudo systemctl restart rsyslog