您好,登錄后才能下訂單哦!
今天群里正好有人問一個情況,用戶的業務并發連接突然飆升,作為部署在敏感位置的F5設備,并沒有自動記錄連接請求日志的現成功能,若發生這種情況,用戶需要知道當時的連接表情況,起碼要知道是哪個IP地址發出的大量請求。
F5面對這種情況,基本有2個選擇:
1、在VS中關聯iRule,記錄每次的tcp請求情況,包括請求原地址、源端口、net成內部地址、net成內部端口、分發到哪臺服務器等信息。但是記錄這些日志非常消耗設備性能,我記的有一個用戶就非要做這個,怎么勸都不聽,他的設備并發峰值是1200萬/s,也就是有可能一瞬間要寫入上百萬條日志,非要做就做吧,郵件里把事情的情況寫明,導致的后果寫明,iRule給他,要做就自己做吧。果不其然,真是立竿見影,放上去點了一下“update”,設備宕機了。
2、每隔一段時間去檢查一下連接表條目數,如果超過閥值就記錄當前的連接表情況,并且根據原地址進行過濾排序。我認為這種方式要好一些,就算你的并發有1200萬,我顯示連接表,對連接表信息過濾等等操作,也只是相對速度慢了一些,對設備不會造成太大影響。
#!/bin/bash function define() { threshold=20000 log_path=/tmp/f5_conn_log/ user=`whoami` } function check() { if [ $user != root ];then echo "Please use root user." exit 1 fi if [ ! -d $log_path ];then mkdir $log_path fi } function gather() { while true do timestamp=`date +%Y%m%d_%H%M%S` num_conn=`tmsh show sys connection | wc -l` if [ $num_conn -gt $threshold ];then tmsh show sys connection>${log_path}${timestamp}.log awk -F ':' '{print $1}' ${log_path}${timestamp}.log | sort -nr | uniq -c | sort -nr | head -20 >> ${log_path}${timestamp}_top.log fi sleep 300 done } function main() { define check gather } main
腳本是個while死循環,使用的時候加上&放到后臺,可以設置為開機啟動。
每次取到的信息是2個文本文件,一個是完整的連接表,另一個是對連接表進行過濾排序的top20。
[root@F5:Active] f5_conn_log # cat 20160114_164101_top.log 5841 192.168.1.7 1674 192.168.1.104 1462 164.115.20.151 317 192.168.4.110 274 192.168.4.84 258 192.168.1.248 257 192.168.4.13 246 192.168.1.76 214 192.168.1.85 199 192.168.1.146 183 192.168.1.120 169 192.168.1.166 165 192.168.1.134 163 172.18.0.131 161 192.168.1.115 155 100.90.90.150 153 192.168.1.6 148 192.168.100.76 142 172.18.0.107 137 192.168.1.150
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。