S3はのサーバのアクセスログを取得することが可能です。
通情、このログを分析するなら、Athenaが便利です。公式にもわかりやすい手順が出ています。
ただ、色々な制約でAthenaが使えない、Pandasも使えない、ましてやDrillも使えない。Windows PC標準構成で分析しなければいけない場合があれば、この記事が役立つかもしれません。
※早い処理では無いのと、ViewerがEXCELなので本当に大量のアクセスログの分析には向いてません
Windows標準のPowerShellでサーバーアクセスログをTSV化して、EXCELで読み込ませるまでを書きます。
指定日時のアクセスログをダウンロード
アクセスログは日時をプレフィックスにした名前で出力されます。
aws s3 sync
の場合は以下のように、--exclude *
と --include
オプションを使えば、指定日時のデータをダウンロードできます。
以下は2019年11月10日を取りたいので、 --include "2019-11-10-10-*"
とオプションを設定しています。
$ aws s3 sync s3://your-bucket/path/to/your/server_access_logs/ . --exclude "*" --include "2019-11-10-10-*"
PowerShell でTSV化
EXCELで読むためにTSV化します。冒頭で紹介したのAthenaの記事を参考に構造を作成して、正規表現でパースします。
$outFile = "./out.csv" $concatenatedFile = "./concatenated.log" $pattern = '([^ ]*) ([^ ]*) \[(.*?)\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \"([^ ]*) ?([^ ]*) ?(- |[^ ]*)\" (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$' # ファイルを集約(大量のファイルを個別に処理すると遅いので) Get-Content .\* | Set-Content $concatenatedFile # Header書き出し "BucketOwner`tBuck$paet`tRequestDateTime`tRemoteIP`tRequester`tRequestID`tOperation`tKey`tRequestURI_operation`tRequestURI_key`tRequestURI_httpProtoversion`tHTTPstatus`tErrorCode`tBytesSent`tObjectSize`tTotalTime`tTurnAroundTime`tReferrer`tUserAgent`tVersionId`tHostId`tSigV`tCipherSuite`tAuthType`tEndPoint`tTLSVersion" > $outFile # Data書き出し Get-Content $concatenatedFile | Select-String -Pattern $pattern | ForEach-Object { $_.Matches[0].Groups[1..26] -join "`t" } >> $outFile
EXCELで開く
上記の場合だと out.csv
というファイルが出力されています。これがTSVなのでそのままEXCELで開いて作業できます。