2
0

More than 1 year has passed since last update.

とりあえず触り始めるための Athena v CloudWatch Logs Insights

Last updated at Posted at 2022-10-21

どちらもAWSサービス、データを検索できるやつです。

細かいチューニングや知見は後回しでいいから、ざっくり今すぐサクッと使ってもらいたい。

どうしても気になるのは費用ですが、どちらも「無茶苦茶(もの凄い量をもの凄い回数扱う)な使い方をしなければお安い」範囲だと思うので、その範疇ならあまり気にしなくていいかも。

使い分け

  • Amazon Athena をオススメするケース
    • データを正しくフォーマットして溜め、アドホックな検索を行いたい場合=DBテーブルに対してアドホックなSQLを連発したい
    • 検索するまでの準備に対して、ある程度労力を割いてもよい
  • Amazon CloudWatch Logs / CloudWatch Logs Insights をオススメするケース
    • 直近のデータからささっとグレップしたい
    • 検索するまでの準備に対しては、あまり労力を割きたくない

Athena

  • てきとうに言うと
    • とあるS3バケット階層以下の全S3オブジェクト内容をDBテーブルレコードに見立ててクエリーで検索できる
      • 例:CSVファイルを多数保存しておくなど
  • 使用例
    • 指定日のアクセスログから「◯◯」を含むものを検索したい
  • 検索方法
    • SQL
  • 主な費用
    • クエリーで走査したデータ量に依存
      • テーブルのパーティション(=S3オブジェクトPrefix)を正しく設計することで費用を削減できる
        • 例:とある期間のデータはとあるPrefix以下にだけ保存されている
  • 主な良いところ
    • 保存データ容量上限を気にしなくてよい
    • データ走査量によらず検索速度が良好
  • 主な注意点
    • S3へのデータ出力
      • 一定のファイルフォーマットが必要
      • 一定の保存先(S3オブジェクトPrefix)ルールが必要
      • 自アプリケーションやAWSサービスからS3へどのように出力するか考慮が必要
    • ファイルフォーマットや保存先に合わせたテーブル設定が必要

Athena例

対象S3バケット階層のS3オブジェクトの中身イメージ

$ cat path/to/2022/10/19/hoge-1.log
1,alice,18

$ cat path/to/2022/10/19/hoge-2.log
2,bob,20
3,carol,22

$ cat path/to/2022/10/20/fuga.txt
4,dave,18

クエリーイメージ

SELECT
  name
FROM
  my_table
WHERE
  date = '2022/10/19'
  AND
  age >= 18
LIMIT
  10
;

CloudWatch Logs Insights

  • てきとうに言うと
    • 溜めてあるログ内容をクエリーでフィルタリングできる
  • 使用例
    • いまエラーアラートが発生したので、30分以内の実行ログから「◯◯」を含むものを検索したい
  • 検索方法
    • 独自クエリー(Linuxコマンドをパイプで繋いでいる時のような感覚)
  • 主な費用
    • クエリーで走査したデータ量に依存
      • 期間指定することで走査対象を絞り費用を削減できる
  • 主な良いところ
    • 保存データ型を気にしなくて(ただの文章で)良い
      • とはいえJSONで出力しておくとクエリーでJSONプロパティを直接指定できるため便利ではある
    • 検索速度まあまあ
    • 「CloudWatch Logsにログを出力できる」ようなAWSサービスが多いので、出力方法構築に労力をあまり割かなくて済む
  • 主な注意点
    • 走査範囲は「現在 〜 指定の過去日時」までとなる
      • 「過去のとある日1日だけ」のような検索が費用的な意味で実施し辛い
        • 「現在〜指定の過去日時まで全て舐めるけど抽出するのは過去のとある日1日だけ」という挙動になる
        • クエリー実行期間を「相対」から「絶対」に変更して回避する必要有り
      • 検索速度は走査範囲による

CloudWatch Logs Insights例

対象ロググループのログストリームの中身イメージ

$ cat 2022/10/19/[$LATEST]abc001cde
2022-10-19T12:34:01.789Z {"id":1,"name":"alice","age":18}

$ cat 2022/10/19/[$LATEST]abc002cde
2022-10-19T12:34:02.789Z {"id":2,"name":"bob","age":20}
2022-10-19T12:34:03.789Z {"id":3,"name":"carol","age":22}

$ cat 2022/10/19/[$LATEST]abc003cde
2022-10-19T12:34:04.789Z {"id":4,"name":"dave","age":18}

クエリーイメージ(※クエリーとは別でクエリー実行期間も指定することになる)

fields @timestamp, name
| filter age >= 18
| sort @timestamp desc
| limit 10
fields @timestamp, @message
| filter @message like 'carol'
| sort @timestamp desc
| limit 10
2
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
2
0