ELBアクセスログをElasticsearchに突っ込んだ後にPainlessでクエリストリングを除外したフィールドを追加する

まえがき

https://hoge.com?hoge=hogehoge&fuga=fugafuga みたいなアクセスログをそのまま集計するとクエリストリングが邪魔でほぼユニークなリクエストになる。
そのため、Painlessを使って https://hoge.com として表示するフィールドを追加する。

ELBアクセスログのElasticsearchへの投入

www.elastic.co

betaなのでクリティカルなところでは考えたほうが良いが、これ使っておけば間違いない。
ELBアクセスログを集約していれば大体2,30分もあれば慣れてる人ならサクッと導入できる。
しかもELBアクセスログ発行 -> S3 -> SQSの流れは全てAWSがやってくれるからいちいち細かいことを気にしなくて良い。
filebeatはSQSにデータを取得&Elasticsearchにpushするだけだし、本当に便利。

最初はLogstashのpatterns-coreにあるからそれでよいかと思ったが、 パターンが古くて駄目っぽい。
また、PRの反応も最近は薄そうなのでそのへんも加味して使うのを辞めた。

github.com

画面

f:id:st1t:20200522125242p:plain

実際のコード

def v_size = doc['http.request.referrer.keyword'].size();
if (v_size == 0) {
    return "path size is 0";
} else {
    def path = doc['http.request.referrer.keyword'].value;
    if (path != null) {
        int lastSlashIndex = path.lastIndexOf('?');
        if (lastSlashIndex > 0) {
            return path.substring(0, lastSlashIndex);
        } else {
            return path;
        }
    }
    return "path is null";
}