varnish - varnishncsaのアクセスログ

最近のバージョンは-F でformatを指定できるようになったけど、URLによってのアクセスログoff/on など柔軟に対応できないぽいのでnginx をfrontに置いてしまったほうが楽?


defaultのformatは'%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i" %{Varnish:time_firstbyte}x'

%r について

192.168.0.1 - - [14/Mar/2012:10:01:29 +0900] "GET http://192.168.0.100:6081/hoge.cgi?foo=bar HTTP/1.1" 200 547 "-" "user-agent"

このようにbackend serverまでログに出てしまうので、apacheのcombinedのようにしたい場合は%rの代わりに"%m %U%q %H" とすると良い。

192.168.0.1 - - [14/Mar/2012:10:01:29 +0900] "GET /hoge.cgi?foo=bar HTTP/1.1" 200 547 "-" "user-agent"
  • option
    • %m request method
    • %U request URL without query string
    • %q query string
    • %H request protocol
    • %{Varnish:time_firstbyte}x Time to the first byte from the backend arrived

-X の謎

-X regex
  Exclude log entries which match the specified regular expression. 

とあるけど挙動がよくわからない。例えば、"-X 192.168.0.1" と設定したら、192.168.0.1 のIPからのアクセスは一切ログに出なくなった。

では、特定のURLだけログに出さないようにできるのかなと思って、"-X /foo/bar/" と設定して/foo/bar/ にアクセスしてみると、ログから/foo/bar/ が"-" に置換された以下のようなログになった。

192.168.0.1 - - [14/Mar/2012:09:59:36 +0900] "HEAD - HTTP/1.1" 200 0 "-" "user-aegent"

うーん、謎すぎる。