0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LambdaのログをCloudWatchLogsからS3へ転送してAthenaでキレイに参照したかった

Last updated at Posted at 2024-10-24

前回の続き的なもの

前回はECSにあるログをAthenaから参照することを目的にした内容でしたが、
今回はLambdaから出力されるログもAthenaから参照することを目的にしています。

目的(背景)

  1. Lambdaのログも可能な限りリアルタイムで参照したい
  2. AthenaのテーブルをECSからのログとLambdaのログで分けることはしたくない
  3. ロググループは一つではなく多数
  4. ロググループ自体に入っているログの量の合計は月あたり1GBにも満たない

構成図

image.png

処理詳細

目的(背景)にも書いてあるように、ログの容量自体そこまで多くないためDataFirehoseを使ってます。
CloudWatchLogsのサブスクリプションフィルターからパターンにログレベルを指定(NOTICE WARN ERROR)して、FirehoseからS3にDIRECT PUTしています。

Firehoseの設定は下記を有効化しておきましょう。
JSON形式でログを出力していたのでメッセージデータのみにしないとAthenaでの参照がうまくいかなかったりします。

ただ、ここに仕様というなのハマりポイントがありました。

image.png

ハマりポイント

ハマったというのも自分ところの環境が悪いのか、それとも仕様なのか現状把握できていないんですが
ログイベントからのみメッセージデータを抽出した場合、下記のような出力がされていました。

{
 "owner": "111111111111",
 "logGroup": "CloudTrail/logs",
 "logStream": "111111111111_CloudTrail/logs_us-east-1",
 "subscriptionFilters": [
 "Destination"
 ],
 "messageType": "DATA_MESSAGE",
 "logEvents": [
 {
 "id": "31953106606966983378809025079804211143289615424298221568",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root1\"}"
 },
 {
 "id": "31953106606966983378809025079804211143289615424298221569",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root2\"}"
 },
 {
 "id": "31953106606966983378809025079804211143289615424298221570",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root3\"}"
 }
 ]
}

こんな感じでLambdaのログ出力されているものに対して、メッセージデータ抽出した場合

{"eventVersion":"1.03","userIdentity":{"type":"Root1"}
\n
{"eventVersion":"1.03","userIdentity":{"type":"Root2"}
\n
{"eventVersion":"1.03","userIdentity":{"type":"Root3"} 
\n

\nが入ってS3に格納されてました。

これがかなり厄介でAthenaから参照すると、この\nの行もレコードとして認識して1レコード毎に何も無いレコードが挟まるという状態です。

この1byteを除去するためにLambda挟むの本末転倒すぎるのもあって、結局Athenaのクエリで適当なカラムに対してis not null つけて有耶無耶にするしか思いつかないのが現状

動的パーティションの何かしらのオプション使うなり、ログ形式変えればうまくできるんですかね、

(改行入ってないやんけ)

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?