varnishlogで特定のログのみ出力する方法


Varnishのログは、以下のコマンドを実行して確認できます。

※ 導入やデバッグまでの手順については、以下を参考にしてください

Varnishを自社メディアに導入しました - LCL Engineers' Blog
LCLで運営している「バスとりっぷ」というメディアに、キャッシュサーバとしてVarnishを導入しました。導入する上でハマった事・得たノウハウなどを...
$ varnishlog

実行後はリクエストが送られるたびにキャッシュ対象のパス毎のログが出力されます。
それらの中から特定の値を見つければよいのですが、1つのログの出力はとても多いため目視で探すのは非常に困難です。
また、必要のないfaviconや画像などのアセットなどのログも大量に出力されるので1画面に収まることは少ないと思います。

この場合、varnishlogのオプションを利用することで欲しい情報のみを出力するようにできます。
今回は、キャッシュの存在を確認する方法を例にして説明します。

URLのみ出力する

URLはReqURLのタグで設定されているため、このタグのみ出力するよう指定します。

$ varnishlog -i requrl

*   << BeReq    >> 36

*   << Request  >> 35
-   ReqURL         /hoge/

*   << Session  >> 34

*   << Request  >> 32800
-   ReqURL         /assets/hoge/pc/application-b9fdskjaflsdkjfec0db473f11ef2345a932ec9cc31aa23ualfhahiuhaf.css

*   << Session  >> 32799

*   << BeReq    >> 32801

*   << BeReq    >> 39

*   << Request  >> 38
-   ReqURL         /images/hoge/logo.png

*   << Session  >> 37

*   << BeReq    >> 131075

*   << Session  >> 131073

...

RespHeaderタグのX-Cacheのみ出力する

URLに加えて、キャッシュフラグも表示します。
RespHeaderはいくつもの値が設定されているため、正規表現を使える-IX-Cache:を含めます。

$ varnishlog -I "RespHeader:X-Cache:" -i requrl

*   << Request  >> 196616
-   ReqURL         /hoge/
-   RespHeader     X-Cache: HIT desktop

*   << Session  >> 196615

*   << Request  >> 47
-   ReqURL         /assets/hoge/pc/application-b9fdskjaflsdkjfec0db473f11ef2345a932ec9cc31aa23ualfhahiuhaf.css
-   RespHeader     X-Cache: HIT desktop

*   << Session  >> 46

*   << Request  >> 196618
-   ReqURL         /images/bustrip/logo.png
-   RespHeader     X-Cache: HIT desktop

*   << Session  >> 196617

特定のURLのみ出力する

上記で出力したい要件は満たせていますが、他のURLも出力されてしまってノイズが多いです。
そこで/hoge/のみを指定して出力するようにします。

$ varnishlog -I "RespHeader:X-Cache:" -i requrl -q "ReqUrl eq '/hoge/'"

*   << Request  >> 196627
-   ReqURL         /hoge/
-   RespHeader     X-Cache: HIT desktop

以上で必要なログのみ出力できるようになりました。

補足
/hoge/
/images/hoge/img_sample.png
/hoge/?utm_source=fuga&utm_medium=referral&utm_content=nonews

これらを判別する際は正規表現を使うとよいです。

$ varnishlog -I "RespHeader:X-Cache:" -i requrl -q 'ReqUrl ~ "^\/hoge\/"'

他にも画像、アセットのみ除外はこのように書きます。

$ varnishlog -I "RespHeader:X-Cache:" -i requrl -q 'ReqUrl !~ "(jpg|jpeg|gif|png|bmp|assets)"'

クエリの種類:https://feryn.eu/blog/varnishlog-measure-varnish-cache-performance/#VSL_queries