特定の URL の実行パーセンテージを計算する方法について興味がありました... たとえば、varnishlog を実行すると、着信 HTTP 要求に関する情報がリアルタイムで出力されます。
以下は一部情報を省略した抜粋です。
46 ReqStart c
46 RxRequest c GET
46 RxURL c /cat?getParam
46 RxProtocol c HTTP/1.1
46 RxHeader c User-Agent: **************
46 RxHeader c Accept-Encoding: gzip
46 RxHeader c Host: myServer.org
46 RxHeader c Connection: Keep-Alive
46 RxHeader c Cookie: ********
46 RxHeader c Cookie2: ************
46 VCL_call c recv lookup
46 VCL_call c hash
46 Hash c /cat?getParam
46 Hash c myServer.org
46 VCL_return c hash
46 VCL_call c miss fetch
46 Backend c 90 default default
...
46 ObjHeader c Server: Apache-Coyote/1.1
46 ObjHeader c Content-Type: text/xml
46 ObjHeader c Content-Encoding: gzip
46 ObjHeader c Vary: Accept-Encoding
46 ObjHeader c Date: Thu, 05 Sep 2013 12:56:04 GMT
46 Gzip c u F - 1596 8098 80 80 12697
46 VCL_call c deliver deliver
46 TxProtocol c HTTP/1.1
46 TxStatus c 200
46 TxResponse c OK
...
46 ReqEnd c ...
私が興味を持っているのは ですRxURL
。具体的には、次のようなリクエストがあります:
- /猫?
- /テンプレート?
カウントできるコマンドを実行するにはどうすればよいでしょうか。
- リクエストの総数
- /cat で始まるリクエストの数
- /temp で始まるリクエストの数
最後にこれらの数字を出力しますか?
現在、私は varnishlog | grep "Hash" > requests.txt
、
そして、Excel スプレッドシートを使用してクリーンアップし、カウントしてパーセンテージを計算します。
しかし、AWK またはスクリプトを使用してこれをサーバー上で直接実行できるかどうか興味がありました。
アップデート
varnishtop -i txurl
URL を直接表示するのでさらに適しています。
答え1
Varnishncsa[1]を使用すると、「Apacheのような」ログ(さらに良いことに、必要に応じてフィルタリングされたログ)を生成し、いくつかの実戦テスト済みのスクリプトを活用できます[2][3]
必要なカウントをリアルタイムで取得するのは簡単です (たとえば、次の 100 件のリクエストについて)。
varnishncsa | head -n 100 | awk '{print $7}' | wc -l
varnishncsa | head -n 100 | awk '{print $7}' | grep /cat | wc -l
varnishncsa | head -n 100 | awk '{print $7}' | grep /temp | wc -l
[1]https://www.varnish-cache.org/docs/trunk/reference/varnishncsa.html