LoginSignup
8
0
お題は不問!Qiita Engineer Festa 2023で記事投稿!

【失敗談】LaravelのログをCloudWatchに吐き出す時にまとめようとしてみたが、うまくいかなかった話

Last updated at Posted at 2023-06-15

はじめに

AWS ECSでLaravelを動作させています
ログについては、awslogsドライバーを利用してCloudWatchに出力しています
その際に、CloudWatch上でLaravelのログが1行ずつ細かく出力されていて見づらかったので、ある程度纏めてみるという方法を試してみました

結論から言うと、検証時にはうまくいったのですが、実際に運用してみると、CloudWatch上でログが表示されなくなってしまいました

実際のCloudWatchから見た時のログ

まとめる前のログ

CloudWatch上でLaravelのログを確認すると、以下のように1行ずつ出力されていました

log_before.png

まとめた後のログ

ログの表示が出来なかったため、キャプチャはありません

まとめる方法

TerraformでECSのタスク定義を作成しているので、そこで設定を追加しました

#ContainerDefinitions
ContainerDefinitions:
  - Name: "php"
    Image: !Ref ECSImageLaravelRepositoryName
    LogConfiguration:
      LogDriver: awslogs
      Options:
        awslogs-group: !Ref ECSLogGroup
        awslogs-region: !Ref "AWS::Region"
        awslogs-stream-prefix: !Ref ProjectName
        awslogs-multiline-pattern: "^(INFO|DEBUG|WARN|ERROR|CRITICAL)" < #この行を追加

awslogs-multiline-pattern について

このオプションでは、正規表現を使用する複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。一致する 1 行とは、ログメッセージ間の区切りです。

注記
複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

Laravelから出力されるログには、先頭にLogレベルが出力されます
それを利用して一区切りにするための設定を行いました

なぜ失敗したか

ドキュメントにもあるように、パフォーマンスに悪影響がでたんだと思われます

  • 後追いで調査できるように、詳細なログまで出力するようにしていたので、ログの行が膨大になっていたこと
  • 秒間で2アクセス以上はあるサービスだったこと

さいごに

awslogs-datetime-format:%Y-%m-%d %H:%M:%S"の設定も試してみたのですが、思ったように機能しませんでした
こうすると上手くいくという情報をお持ちの方がいらっしゃいましたら、教えていただけると幸いです

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0