継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

FireLens で出力されたコンテナのログを Athena でクエリする

タダです.

最近もっぱら ECS 周りを触っているんですが,コンテナのログを CloudWatch Logs に出すのはコスト的に避けたかったので FireLens 経由で S3 に出すようにしました.S3 に出しちゃえば Athena からログをクエリできると思ってやってみたのでこの記事でやり方をまとめていきます.

aws.amazon.com

FireLens のログの中身について

まず,FireLens から送られてくるログの中身をみていきましょう.ログの中身は次の項目がはいった JSON 形式になっています.

  • container_id
  • container_name
  • ecs_cluster
  • ecs_task_arn
  • ecs_task_definition
  • log
{"container_id":"xxx","container_name":"xxx","ecs_cluster":"xxx","ecs_task_arn":"arn:aws:ecs:xxx:xxx:task/xxx/xxx","ecs_task_definition":"xxx:xxx","log":"INFO: xxx"}

なので,これら形式に合うように Athena のテーブルを作る必要があります.

Athena のテーブル作成

Athena でテーブルを作っていくんですが,全てのログは必要ないため今回は絞ってcontainer_id, container_name,logをカラムにしました.下記のクエリが Athena のテーブル作成用のクエリ例です.

CREATE EXTERNAL TABLE xxx (
    container_id string,
    container_name string,
    log string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://xxx/'

これでクエリができるようになったので,クエリをしてみたところ下記の画像のようにクエリ結果を得ることができました.logの中にログの詳細が全て含まれてしまっているのでログの中身で絞り込みたい時は LIKEなどを使って絞り込みすると良さそうです.

f:id:sadayoshi_tada:20210331204944p:plain

まとめ

小ネタですが,FireLens で出力された S3 のログに Athena からクエリを発行してみました.今担当しているコンテナのログは一個しか出てないのですが,状況見ながら出し分け先を変えたりも FireLens ではできそうなのでまたそれもできたら記事にしていきたいと思います.

docs.aws.amazon.com