アクセスログ解析 alpの正規表現Tips
alp とは
alp は Web アプリケーションのアクセスログを解析するためのツールです。 主に リクエストのパスやクエリ文字列 を抽出し、パフォーマンス分析やボトルネックの特定に使用されます。
alp の正規表現 Tips
リクエストパスの 1 階層分だけ任意の文字列にマッチさせる
^
は否定を意味します[^/]
は「スラッシュ (/) 以外の任意の文字」にマッチします/api/user/[^/]+/icon
にすると/api/user/11/icon
にマッチします
日本語を含む queryString に対応する
日本語や特殊文字はエスケープされ
%
で始まる形式になることが多いため、以下を使用します[%A-Za-z0-9]+
- 例:
?q=%E6%97%A5%E6%9C%AC%E8%AA%9E
のクエリパラメータに対応
文末記号を使う
^
,$
で文頭、文末の一致を指定できます
? をエスケープする
?
は正規表現で特殊な意味を持つため、使用する際はエスケープ (\?
)が必要です:- 例:
/api/v1/resource\?id=123
→ ?id=123 にマッチ。
- 例:
文字数指定
- 特定の文字数に制限をかけたい場合、以下のように書きます:
.{2}
→ 任意の 2 文字- UUID の場合:
.{8}-.{4}-.{4}-.{4}-.{12}
- 例: 550e8400-e29b-41d4-a716-446655440000。
OR を使う
- 複数のパターンに対応させる場合、| を使用します:
/image/[0-9]\*.(jpg|png|gif)$
- 例: image/123.jpg, image/456.png にマッチ。
example
alp.config.yml のサンプルです。
alp json --file=access_log.log --config=alp.config.yml
のように利用します。
---
sort: sum # max|min|avg|sum|count|uri|method|max-body|min-body|avg-body|sum-body|p1|p50|p99|stddev
reverse: true # boolean
query_string: true # boolean
output: count,5xx,4xx,2xx,method,uri,min,max,sum,avg,p90 # string(comma separated)
matching_groups: # array
- "/api/courses/[%A-Z0-9]+/classes$"
- '/api/courses\?page=[0-9]+'
- "/api/condition/.{8}-.{4}-.{4}-.{4}-.{12}"
- '/api/livestream/search\?tag=[%A-Z0-9]+'
- "/api/user/[^/]+/statistics"
- "/api/user/[a-zA-Z0-9]+/icon"