利用python获取指定url在ATS中缓存对象的信息
業務需求
給定url,如何查詢指定的ATS中是否有該url的緩存對象信息?如果緩存了的話,希望提供該緩存對象的大小,緩存時間,緩存文件名,緩存份數(document alternative)等等信息
環境搭建
1.開啟ATS的http_ui查詢緩存功能
從ATS 3.0.4之后,我們就發現records.config中已經沒有和http_ui相關的配置選項,但是在/mgmt/RecordsConfig.cc文件中有相關的配置信息,比如下面的ATS 5.3.0版本中的截圖
為此,配置如下:
在records.config尾部添加
CONFIG proxy.config.http_ui_enabled INT 3
CONFIG proxy.config.http.enable_http_info INT 1
?
http_ui_enabled值如下:
0 - Don't enable anything in the stats pages system (default)
1 - Enable only the cache inspector
2 - Enable only the various stats pages (see more below)
3 - Enable both cache inspector and stats pages
如果TS運行在192.168.0.102,那么在remap.conf中添加如下內容:
map http://192.168.0.102:8080/cache-internal/ http://{cache-internal}
map http://192.168.0.102:8080/cache/ http://{cache}
map http://192.168.0.102:8080/stat/ http://{stat}
map http://192.168.0.102:8080/test/ http://{test}
map http://192.168.0.102:8080/hostdb/ http://{hostdb}
map http://192.168.0.102:8080/net/ http://{net}
map http://192.168.0.102:8080/http/ http://{http}
此時可以通過訪問http://192.168.0.102:8080/cache/查看cache的內容。為了安全起見,可以對map使用ACL控制,如下:
map http://192.168.0.102:8080/cache/ http://{cache}/ @src_ip=192.168.0.102 @action=allow
上面的配置,顯然只允許運行在192.168.0.102上的ATS的本機用戶通過8080才能訪問cache頁面.這樣配置的原因是,只希望從程序中查詢ATS緩存,而不是從瀏覽器中,因為瀏覽器一般默認訪問80端口,當然你可以配置正向代理到ATS,或者訪問鏈接時添加8080端口。
配置完成后,重啟ATS。
trafficserver restart
2.從命令行訪問來驗證緩存查詢功能
首先需要讓ATS緩存上一個url資源,比如帝聯的首頁
然后通過命令行來查詢該url是否已經被ATS緩存?
查詢緩存的url形式如下:
http://192.168.0.102:8080/cache/lookup_url?url=http://www.dnion.com/
使用wget命令如下:
wget -S "http:/192.168.0.102:8080/cache/lookup_url?url=http://www.dnion.com/" -S選項表示只打印響應頭,默認不發送,這里特此開啟它
在瀏覽器中查看保存到本地目錄/tmp/dnion.html的內容
很顯然, 我們看到了指定url在ATS中的緩存信息: 緩存的大小是Size參數, 有一個對象副本aliternate, 緩存的時間從Date字段判斷, 沒有Date的話, 參考Expires字段.
下面的問題是如何從程序中自動獲取這些信息?這就是本文的目的所在.
解決方法
python實現的思路是:
獲取指定url查詢到的ATS緩存頁面信息,利用正則匹配找到該html頁面中的指定字段Date和Size處的值,得到緩存的時間和大小。
如果緩存中沒有查詢到,我們需要做異常處理,也就是這時獲取的緩存時間和大小都是0。
下面是我對一個沒有緩存的url,太平洋網站主頁的測試,發現ATS正常返回的html頁面信息如下
實現源碼這里暫不透露,只給出測試的運行截圖
該python能正確識別正常的緩存頁面和異常的緩存頁面,給出緩存對象的大小和緩存時間.這里就可以達到我們的業務要求了
參見文獻
[1].https://blog.zymlinux.net/index.php/archives/756?紙鳶博文
[2].https://cwiki.apache.org/confluence/display/TS/FAQ
總結
以上是生活随笔為你收集整理的利用python获取指定url在ATS中缓存对象的信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python模块MySQLdb操作mys
- 下一篇: python中利用lxml模块解析xml