CloudWatch エージェントを使用して、現行ログファイルと以前のログファイルの両方表示する方法を教えてください

2023.04.18

困っていること

CloudWatch エージェントを使用して、ロググループ内の現行ログファイルと以前のログファイルの両方を表示する方法があれば教えてください。
具体的には、「ログファイル A 」に対して、「ログファイル A-YYMMDD 」(日付によるローテーションファイル)と現行ファイルを両方表示する設定方法について教えてください。  

  • 指定するロググループを「LogGroup A 」  
  • 指定するログファイルを「logfile A 」

どう対応すればいいの?

ドキュメント 記載の通り CloudWatch エージェントは、ワイルドカードを利用することでログファイルのローテーションに対応させることが可能です。

file_path – CloudWatch Logs にアップロードするログファイルのパスを指定します。スーパーアスタリスクとして ** を追加すると、標準 Unix glob マッチングルールが受け入れられます。たとえば、/var/log/**.log と指定すると .log ディレクトリツリー内のすべての /var/log ファイルが収集されます。他の例については、「Glob Library」を参照してください。

また、標準のアスタリスクを標準のワイルドカードとして使用することもできます。例えば、/var/log/system.log* は、/var/log 内の、system.log_1111、system.log_2222 などのファイルに一致します。

ファイルの変更時間に基づいて、最新のファイルのみが CloudWatch Logs にプッシュされます。access_log.2018-06-01-01 と access_log.2018-06-01-02 など同じ形式の一連のファイルを指定するにはワイルドカードの使用をお勧めします。ただし、access_log_80 と access_log_443 のように複数の種類のファイルには使用しないでください。複数の種類のファイルを指定するには、エージェント設定ファイルに別のストリームログのエントリを追加して、各種類のログファイルが異なるログストリームに行くようにします。

以下の設定例を参考に、/opt/aws/amazon-cloudwatch-agent/bin/logfileA*.log のファイルパスにマッチする全てのログファイルが CloudWatch Logs に収集されるように設定可能です。
簡単に説明すると/opt/aws/amazon-cloudwatch-agent/bin/logfileA*.log は、/opt/aws/amazon-cloudwatch-agent/bin/ ディレクトリ内にある、ファイル名が logfileA で始まり、拡張子が .log の全てのファイルにマッチします。 この設定によって、このディレクトリ内の全てのログファイルが CloudWatch Logs に収集されます。
以上より、現行のログファイルだけでなく、以前に生成されたログファイルも収集できるようになります。

※一般的な設定例であるので環境に合わせて適宜変更してください
※一部抜粋例です

"logs": {
    "logs_collected": {
        "files": {
            "collect_list": [
                {
                    "file_path": "/opt/aws/amazon-cloudwatch-agent/bin/logfileA*.log",
                    "log_group_name": "LogGroupA",
                    "log_stream_name": "{instance_id}",
                    "retention_in_days": -1
                }
            ]
        }
    }
}

補足

CloudWatch エージェントがサポートするファイルローテーション機能については、よくある質問 に記載があるので、合わせて確認することをお勧めします。

どのようなファイルローテーションがサポートされていますか。
次のファイルローテーション機能がサポートされています。

● 既存のファイルを数字サフィックスをつけた名前に変更し、その後、元の名前の空のログファイルを作成し直します。たとえば、/var/log/syslog.log が /var/log/syslog.log.1 という名前に変更されます。/var/log/syslog.log.1 が前回のローテーションにより既に存在する場合は、/var/log/syslog.log.2 という名前に変更されます。

● 元のログファイルを、コピーを作成した後切り捨てます。たとえば、/var/log/syslog.log を /var/log/syslog.log.1 にコピーし、/var/log/syslog.log を切り捨てます。この場合、データを損失する恐れがあるため、このファイルローテーション機能の使用にはご注意ください。

● 古いファイルと共通のパターンを持つ新しいファイルを作成します。たとえば /var/log/syslog.log.2014-01-01 をそのまま残し、/var/log/syslog.log.2014-01-02 を作成します。

参考資料