本部分包括如何查看Varnish正在作什麼,從每一個http請求流的詳細記錄到彙總統計計數器。javascript
Logging in Varnishhtml
Statisticsjava
varnishtopweb
varnishhistchrome
varnishstat後端
Varnish中一個很棒的特色是工做日誌的記錄方式。varnish不記錄日誌到日誌文件,而是調用VSL記錄到共享內存片斷,VSL-varnish共享日誌。當這個片斷被寫完後,varnish開始覆蓋老數據。緩存
這種方式比記錄到文件快的多得多,而且不須要磁盤空間。除此以外VSL能夠給到你須要的儘量多的信息。ide
另外一方面,若是你忘記有程序實際在寫日誌到磁盤,日誌將會佔用過多的磁盤。svg
varnishlog是能夠用來查看varnish記錄了什麼的程序。varnish提供原生的日誌,全部的都被寫到日誌裏。其餘一些客戶端也能訪問日誌,一下子向你展現。工具
在啓動varnish的終端窗口鍵入varnishlog(varnish-4.0.3: varnishlog -v) 而後回車。
你將看到一些行,緩慢滾動(取決於你的日誌量)像這樣:
0 CLI - Rd ping 0 CLI - Wr 200 PONG 1273698726 1.0
varnish 主進程檢查cache進程,爲了查看是否一切ok。
刷新指向varnish的web頁面,咱們能夠看到有些輸出:
11 SessionOpen c 127.0.0.1 58912 0.0.0.0:8080 11 ReqStart c 127.0.0.1 58912 595005213 11 RxRequest c GET 11 RxURL c / 11 RxProtocol c HTTP/1.1 11 RxHeader c Host: localhost:8080 11 RxHeader c Connection: keep-alive
第一列是隨機數,它是爲了辨認訪問會話。數字相同表示來自同一個會話,同時會被相同的進程處理。
第二列是日誌信息的標籤。全部的請求都被一種活動類型的標籤標示着。Rx開始的標籤表示是Varnish接收的數據,Tx表示發送的數據。
第三列表示數據是從客戶端來或者發送到客戶端(c),或者是發送到後端或者從後端返回(b).
第四列表示被記錄的數據。
基本的選項:
'-b':只展現varnish和後端server交互的日誌。當咱們要優化緩存命中率時,很是有用。
[root@aliyun-web1 ~]# varnishlog -b|more * << BeReq >> 513184412 - Begin bereq 513184411 pass - Timestamp Start: 1435903539.233425 0.000000 0.000000 - BereqMethod GET - BereqURL / - BereqProtocol HTTP/1.1 - BereqHeader Host: www.example.com - BereqHeader Accept: */* - BereqHeader Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 - BereqHeader Accept-Language: zh-cn, zh - BereqHeader User-Agent: Mozilla/5.0 (Linux; U; Android 4.4.2; zh-cn; GT-I9500 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.0 QQ-Manager Mobile Safari/537.36 - BereqHeader Referer: http://www.example.com/ - BereqHeader X-Forwarded-For: 180.153.206.22 - BereqHeader X-Forward-For: 180.153.206.22 - BereqHeader X-Varnish: 513184412 - VCL_call BACKEND_FETCH - VCL_return fetch - Backend 723 default default(10.171.199.83,,81) - Timestamp Bereq: 1435903539.233538 0.000113 0.000113 - Timestamp Beresp: 1435903539.372638 0.139213 0.139100 - BerespProtocol HTTP/1.1 - BerespStatus 200 - BerespReason OK - BerespHeader Server: openresty - BerespHeader Date: Fri, 03 Jul 2015 06:05:39 GMT - BerespHeader Content-Type: text/javascript; charset=utf-8 - BerespHeader Transfer-Encoding: chunked - BerespHeader Connection: keep-alive - BerespHeader Status: 200 OK - BerespHeader X-UA-Compatible: IE=Edge,chrome=1 - BerespHeader ETag: "a8bc468ef546910351aff1736593a25e" - BerespHeader Cache-Control: max-age=0, private, must-revalidate - BerespHeader X-Request-Id: 091be77be62554630e058bb89e6152e8 - BerespHeader X-Runtime: 0.099064 - BerespHeader X-Rack-Cache: miss
'-c':和-b相似,不過是client和varnish的交互.
[root@aliyun-web1 ~]# varnishlog -c|more * << Request >> 617872310 - Begin req 511130871 rxreq - Timestamp Start: 1435903851.946365 0.000000 0.000000 - Timestamp Req: 1435903851.946365 0.000000 0.000000 - ReqStart 211.144.121.242 10509 - ReqMethod GET - ReqURL /images/example_v4/logo.png?1435895693 - ReqProtocol HTTP/1.1 - ReqHeader Accept: image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 - ReqHeader Referer: http://www.example.com.cn/articles/2015-04-16/909879.html - ReqHeader Accept-Language: zh-CN - ReqHeader User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko - ReqHeader Accept-Encoding: gzip, deflate - ReqHeader Host: static.example.com.cn - ReqHeader DNT: 1 - ReqHeader Connection: Keep-Alive - ReqHeader X-Forwarded-For: 211.144.121.242 - VCL_call RECV - ReqHeader X-Forward-For: 211.144.121.242 - VCL_return hash - ReqUnset Accept-Encoding: gzip, deflate - ReqHeader Accept-Encoding: gzip - VCL_call HASH - VCL_return lookup - Hit 3490076170 - VCL_call HIT - VCL_return deliver - RespProtocol HTTP/1.1 - RespStatus 200 - RespReason OK - RespHeader Server: openresty - RespHeader Date: Fri, 03 Jul 2015 06:09:53 GMT - RespHeader Last-Modified: Fri, 03 Jul 2015 03:54:53 GMT - RespHeader ETag: "5596078d-242a" - RespHeader Content-Type: image/png - RespHeader Vary: Accept-Encoding - RespHeader Content-Encoding: gzip - RespHeader X-Varnish: 617872310 268850698 - RespHeader Age: 58 - RespHeader Via: 1.1 varnish-v4 - VCL_call DELIVER - RespHeader X-Cache: HIT from example 317 - VCL_return deliver
譯者注:因爲各個版本參數的不一樣。譯者使用的varnish-4.0.3和4.0的輸出也不盡相同。 不過仍是能夠經過varnishlog -h查看肯定的參數使用方法。 固然若是你安裝了varnish對應版本的varnish-docs,你可經過man手冊查看具體的用法,4.0.3官方varnishlog連接.
varnish擁有一組很好且很是實用的狀態生成工具,實時的生成狀態同時分析共享內存日誌的日誌數據。
varnishtop讀取共享內存日誌同時呈現連續最常發生的日誌項的更新列表。
list length 6652 web1 4693.76 VCL_return deliver 2531.67 RespProtocol HTTP/1.1 2343.12 VCL_call HASH 2343.12 VCL_call RECV 2343.12 VCL_call DELIVER 2343.12 VCL_return lookup 2343.12 RespHeader Via: 1.1 varnish-v4 2343.12 RespHeader Server: openresty 2336.85 ReqMethod GET 2310.85 RespStatus 200 2310.85 RespReason OK 2310.12 ReqProtocol HTTP/1.1 2208.67 RespHeader Connection: keep-alive 2200.67 VCL_return hash 2142.21 RespHeader Accept-Ranges: bytes 2047.21 ReqHeader Accept-Encoding: gzip 2017.12 Debug XXX REF 2 1967.76 VCL_call HIT 1851.67 Debug RES_MODE 2 1726.94 ReqHeader Accept: */* 1711.48 RespHeader Last-Modified: Fri, 03 Jul 2015 09:04:41 GMT
使用適當的過濾參數-I, -i, -X and -x ,他能夠按照請求的資源,客戶端,user-agent,以及其餘記錄在日誌裏的信息來分層級顯示。
varnishtop -i ReqURL顯示客戶端請求的URL。varnishtop -i BereqURL顯示後端請求URL.varnishtop -I ReqHeader:Accept-Encoding顯示客戶端發送最頻繁Accept-Encoding頭。
更多用法參考varnishtop
varnishhist工具讀取varnishd的共享內存日誌,同時實時的呈現最近被處理的N個請求的柱狀圖。
1:20, n = 2000 web1 | | | | | ||| | ||| | ||| ||||| ||||| ||||| ||||| ||||| ||||| |||||| |||||| |||||| # ||||||| ## |||||||| ### +-------+-------+-------+-------+-------+-------+-------+-------+------- |1e-6 |1e-5 |1e-4 |1e-3 |1e-2 |1e-1 |1e0 |1e1 |1e2
N的值和垂直比例顯示在左上角位置。水平比例是對數的,命中標記爲|,未命中標記爲#。
更多信息查看varnishhist
varnish有許多計數器。它統計miss,hit,存儲信息,建立的線程,被刪除的對象。varnishstat導出這些計數。當我在調優varnish這個工具顯得十分有用。
Uptime mgt: 30+23:10:33 Hitrate n: 5 5 5 Uptime child: 30+23:10:32 avg(n): 0.7449 0.7449 0.7449 NAME CURRENT CHANGE AVERAGE AVG_10 MAIN.uptime 2675432 1.00 1.00 1.00 MAIN.sess_conn 305793621 223.68 114.00 161.26 MAIN.sess_fail 29 0.00 . 0.00 MAIN.client_req_400 24209 0.00 . 0.00 MAIN.client_req 698099671 352.50 260.00 340.48 MAIN.cache_hit 537081611 289.59 200.00 287.56 MAIN.cache_hitpass 17285224 5.99 6.00 6.24 MAIN.cache_miss 78237657 22.97 29.00 21.22 MAIN.backend_conn 4715330 0.00 1.00 0.00 MAIN.backend_fail 1557 0.00 . 0.00 MAIN.backend_reuse 158437412 58.92 59.00 52.42 MAIN.backend_toolate 400204 0.00 . 0.00 MAIN.backend_recycle 158838527 59.92 59.00 53.67 MAIN.backend_retry 37981 0.00 . 0.00 MAIN.fetch_head 661309 0.00 . 0.00 Child process uptime: How long the child process has been running.
一些工具能夠規律的導出varnishstat同時利於查看的顯示這些計數。其中一個即是Munin。
更多信息請查看varnishstat