CloudWatch Logsのログをローカル環境にダウンロードする


概要

CloudWatch Logsコンソールからログを収集する作業が地味にきついのでツールを作りました。

ソースコード

特徴

  • dockerベースなのでセットアップ手間いらず
  • ロググループを指定することで、ログストリームを跨いだ検索が可能
  • 正規表現に一致したメッセージのみ抽出可能
  • 出力フォーマットはJSON形式

使い方

ロググループ ecs/production における2020年12月27日 15時59分 (UTC) のログを取得する場合。

$ docker run --rm -it --env-file=.env -v ${PWD}:/go/src/app cld -group=ecs/production-log -start="2020-12-27 15:59:00" -end="2020-12-27 15:59:59"

2020/12/29 07:05:42 Write results...
2020/12/29 07:05:42 Generated log file: ./dist/result_2020122970533.log

$ cat ./dist/result_2020122970533.log
[
  {
    "IngestionTime": "2020-12-27 15:59:22 +0000 UTC",
    "LogStream": "app/app/5302adeb527b42a0acbb11ac3444d98f",
    "Message": "Foo",
    "Timestamp": "2020-12-27 15:59:21 +0000 UTC"
  },
  {
    "IngestionTime": "2020-12-27 15:59:22 +0000 UTC",
    "LogStream": "app/app/5302adeb527b42a0acbb11ac3444d98f",
    "Message": "Bar",
    "Timestamp": "2020-12-27 15:59:21 +0000 UTC"
  },
  {
    "IngestionTime": "2020-12-27 15:59:22 +0000 UTC",
    "LogStream": "app/app/5302adeb527b42a0acbb11ac3444d98f",
    "Message": "Baz",
    "Timestamp": "2020-12-27 15:59:21 +0000 UTC"
  },
  ...
]