LoginSignup
3
5

More than 3 years have passed since last update.

[AWS][前編]ログ基盤を構築する

Posted at

現在作成中のAlexaスキルにログ基盤を構築しています。
今回は技術情報ではなく、進捗状況をお話させて頂けたらと思います。

AWSマネージドサービスのログ基盤との出会い

インフラ部分をもっと充実させたいと思い、調べてみたら以下の記事が見つかった。
クラスメソッド、Amazon Alexaスキルのフルマネージドサービスを提供開始
〜音声インタフェースの設計開発から運用時の継続的なユーザー体験の改善までサポート〜

ログは普段の業務でも障害解析のために利用したりしているが、AWSでログ基盤を構築すると何ができるのか興味が出てきたため、ログ基盤構築に取り掛かることにした。

構成

AWSログ基盤.jpg

上記構成で構築することを考えた。
特にSQLでログを検索できる(Athana)のは、普段から業務でSQLを触っている者としては非常に魅力的に感じた。

課題

しかし、事はそう簡単に行かず、2つの課題に直面した。

1. CloudWatchのログをFirehoseで読み込む際にエラーが発生

  • エラー内容 :
Encountered malformed JSON. Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens at [Source: com.fasterxml.jackson.databind.util.ByteBufferBackedInputStream@5b2f3ec7; line: 1, column: 2]

2. AWS Lambdaで変換したログをFirehoseで読み込む際にエラーが発生

  • エラー内容 :
Encountered malformed JSON. Unrecognized token 'START': was expecting ('true', 'false' or 'null') at [Source: com.fasterxml.jackson.databind.util.ByteBufferBackedInputStream@3257c660; line: 1, column: 7]
  • 手順
    (1) Lambdaで関数を追加
    関数の作成 -> 設計図の使用 -> kinesis-firehose-cloudwatch-logs-processor を選択
    (2) firehoseの設定(Transform source records with AWS Lambda)で上記Lambda関数を設定

  • 原因 : AWSLambda関数kinesis-firehose-cloudwatch-logs-processorだけではCloudWatchのログの形式を変換できず、データの解析、レコード形式の変換時にエラーが発生

  • 解決策
    (1) CloudWatch Logsから送信されたレコードから、個々のログイベントを解析して抽出
    (2) 出力したい構造に合わせたJSON形式に変換

上記の1についてはAWSLambda関数kinesis-firehose-cloudwatch-logs-processorで実装されているため、2を実現するためには、kinesis-firehose-cloudwatch-logs-processorを編集する

現状

まだ、JSON形式に変換するためのAWS Lambdaを作成中です。
構成を考えた当初は設定だけでログ基盤を構築できると思ったが、現実はそう甘くないみたいです。
この続きはまた次回に投稿したいと思います。

3
5
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
3
5