ALB/ELBのアクセスログを時間指定でダウンロードして標準出力してgrep検索可能にするツール作った

AWS ALBやELBのアクセスログですが、5分毎に出力していると大量のファイルになります。

調査するにしても複数の細かく分かれたファイルを結合したり、JSTUTCの差を失念していて勘違いしたり、S3のフォルダ構造深かったり、ALBのアクセスログgzip形式なのでダウンロードしてからもすぐにgrepできなかったりと結構面倒です。

通常はKibana等で分析するにしても、細かいのはコマンドライン使いたかったり、サポート問い合わせで必要だったりでダウンロード作業が無くなることはありませんでした。

現在、複数のALB/ELBを運用していて、このダウンロード作業が大変になってきたので、楽にするためのツール作りました。

github.com

使い方

細かいオプションはREADME見てください。

実行すると以下のようにプロンプトが表示されるので「 start 」入力するとダウンロードが始まります。(プロンプトはforceモードで省略可能)

ダウンロードされたgzipファイルは展開されて、 -o で指定したファイルにGlobal IP毎にテキストとして追記されます。以下の場合なら /tmp/test_52.10.11.12 みたいになります。設定した時間に動いていたALBが4ノードなら4つのファイルにマージされることになります。

利用用途例

  • ALB/ELBログを時間範囲指定してダウンロード
  • ALBログをダウンロードGzip解凍しALBのGlobalIP毎にファイルに出力
  • ALBログをGzip形式のままダウンロードも可
  • ELBログをダウンロードしGlobalIP毎にファイルに出力
  • ALB/ELBのログを時間ソートし標準出力へ直接出力してGrep分析
Usage:
  aloget -b <S3Bucket> -p <ALBAccessLogPrefix> {-o <OutputFilePrefix>|-stdout}
         [-s yyyy-MM-ddTHH:mm:ss] [-e yyyy-MM-ddTHH:mm:ss]
         [-r aws-region]
         [-cred] [-gz|-elb] [-utc] [-force] [-debug] [-version]

Usage of ./aloget:
  -b string
        S3 Bucket
  -cred
        Use default credentials (~/.aws/credentials)
  -debug
        Debug mode
  -e string
        End Time. defalut now  (default 2017-10-04T23:04:04)
  -elb
        ELB(Classic Load Balancer) mode
  -force
        Force mode
  -gz
        Don't decompress gzip, preserve gzip format.
  -o string
      Output file prefix. (ex /tmp/alb)
  -p string
      S3 ALB AccessLog Prefix
  -r string
      AWS REGION (ex. us-west-1)
  -s string
      Start Time. default 10 minutes ago (default 2017-10-04T22:54:04)
  -stdout
      Write access log to stdout.
  -utc
      -s and -e as UTC
  -v  Show version info
$ aloget -r ap-northeast-1 -b yourbucket  \
       -p prefix/accesslog/alb -o /tmp/test  \
       -s 2017-09-20T00:00:00 \
       -e 2017-09-20T01:00:00 -cred
From-To(Local)  : 2017-09-20T00:00:11 JST  -  2017-09-20T00:55:12 JST
From-To(UTC)    : 2017-09-19T15:00:11 UTC  -  2017-09-19T15:55:12 UTC
Donwload Size   : 28 kB
Decompress Gzip : true
S3 Objects      : 24 objects
Start/Cancel>start