環境說明
前端F5基於cookie插入的會話保持,後端有50臺應用服務器。
起 因
一朋友運維的系統在生產環境中遇到了一些異常,爲了排查故障,準備從最前端(互聯網)檢測F5後端的50臺應用是否正常。
(爲什麼沒在內網檢測?一開始我也想問,內網檢控是有的,但由於環境比較複雜,沒有那種從客戶端一直到服務器的狀態監測,不知道哪段出了問題。好吧,反正就讓我做個從互聯網端發起的探測。)
腳本分析與設計
這種探測本身是很簡單的,一個wget或者curl命令即可搞定,但是難點是F5後端的應用是隨機分發的,如何對50臺應用全部輪詢一遍?
問題總是要解決的,我在以前的文章中講到F5 cookie與後端IP地址的關係,如詳細瞭解請看我的博文:F5 cookie值與IP地址(二)和F5 cookie值與IP地址(一)
通過這種固定的對應關係,就可以用firefox的Web Developer插件來修改F5插入的cookie值來控制F5要分發的後端IP。
有了以上的原理,控制F5分發已不是難事,自動化腳本又要如何實現呢?
下面,出場的是wget!沒錯,就是這個簡單的工具。沒用過?自行百度吧。着重關注下--save-cookies和--load-cookies這兩個參數。
下面是大致的步驟:
1.準備需要加載的cookie文件
這個cookie文件有wget自己的格式,需要通過wget生成。
wget --save-cookies=cookies_file --keep-session-cookies http://yourweb.com/index.html
這樣會得到一個cookies_file的文件。類似於:
# HTTP cookie file. # Generated by Wget on 2016-08-16 12:07:48. # Edit at your own risk. yourweb.comFALSE/FALSE0BIGipServerElearning_tcp80_ap_pool19148992.10531.0000 |
得到cookie文件後,批量修改裏面的cookie值(19148992部分),修改爲你已經通過IP轉換過來的值.
2.加載cookie文件的方法
wget -Sq --load-cookies=cookie_file --spider --timeout=10 --tries=3 http://yourweb.com/ -o wget_status
--load-cookies:需要加載的cookie文件
-o:結果輸出文件
3.判斷規則
通過wget加載cookie文件時,會有兩種結果:
加載成功:F5會分發到cookie中所指定的機器。wget的結果中不在含有F5 cookie值。
加載不成功:F5會漂到另一臺機器(重新分發)。wget的結果中會含有F5 cookie值(不同於加載的值)。
可通過wget結果中是否含有F5 cookie值來判斷你本次的wget是否成功。
4.報警規則
wget結果文件中含有新的F5 cookie值發出報警(此時wget的狀態碼可能是200或其他值。)
wget狀態碼非200時發出報警。
5.報警方法
當觸發到報警規則時,會通過郵件的方式進行報警,本文推薦:mailx。如何配置mailx?參見博文。
腳本實現
有了以上的報警規則和報警方法後,就可以發揮你的聰明才智編寫腳本了。
本人也編了一套,請參考。
需要首先做如下操作:
準備目錄:/usr/share/wget/wget_app
準備文件:ap_cookies,放至/usr/share/wget/wget_app
下載腳本文件:wget_shell.sh