前段時間有小夥伴問我一些問題,涉及到shell腳本的編寫問題,過後,我深刻思考了下,實際生產環境的確也會常常用到,所以如何寫這個腳本?它的思路在哪?帶這個問題引入今天的文章,僅供參考,若有不完善的地方請多指導。web
問題一:shell
編寫腳本自動統計訪問網站失敗的IP地址segmentfault
問題二:網站
編寫腳本自動統計十分鐘內訪問網站的IP地址this
徵對這兩個問題,個人解決思路以下:spa
第一個問題:日誌
1)怎麼纔算訪問網站失敗?code
你們都知道,咱們也會常常打不開一網站,那麼訪問失敗,網站日誌確定會有記錄的,所以,能夠經過查看日誌中的狀態碼(如200、400、403)來判斷用戶的訪問結果server
2)獲取IP地址blog
獲取IP地址就很簡單了,awk命令就是個不錯的選擇
第二個問題:
1)統計IP地址
同第一個問題同樣,方法有不少,也很是簡單
2)如何取得十分鐘內的日誌
115.59.74.25 - - [27/Feb/2017:22:54:43 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:44 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
經過上面的日誌格式,能夠看出日誌中是帶有時間點信息的,那麼只須要將時間點信息找到便可解決
3)解決時間點的問題
能夠經過awk的命令來獲取某段時間內的信息
awk '$4 >="[27/Feb/2017:22:54:43" && $4 <="[27/Feb/2017:22:54:53'27/Feb/2017:22:54:53"' /wwwlogs/access.log** 115.59.74.25 - - [27/Feb/2017:22:54:43 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:44 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:45 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:47 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:48 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:49 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:50 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:52 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-" 115.59.74.25 - - [27/Feb/2017:22:54:53 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
這樣就能夠將一段時間內的日誌信息取出
4)解決十分鐘的問題
這時就須要利用到系統的命令date
[root@ ~]# date +%d/%b/%Y:%k:%M:%S 01/Mar/2017: 7:32:25 #當前時間 [root@nfs-1-1 ~]# date +%d/%b/%Y:%k:%M:%S -d '-10 minutes' 01/Mar/2017: 7:22:25 #十分鐘前的時間
那麼十分鐘內的問題也就解決了
總結:其實編寫的大致思路就是如此,拆分需求解決需求,最終用命令堆砌而成,思路決定出路。
編寫腳本
自動統計訪問網站失敗的IP地址
vi fail_connect_ip.sh ########################################## #this scripts is for auto check client conntect to # #webserver failed # #create by mingongge at 2017--0-01 # ########################################## !/bin/sh egerp "400|403|404|500" /wwwlogs/access.log |awk '{print $1}' |sort -nr |uniq -c
最好將結果追加到一個文件,而後查看文件,由於有可能輸出太多,前面的統計結果沒法看到,固然實際生產環境中訪問失敗的狀態碼不止這幾個
最終執行結果以下
[root@ ~]# sh fail_connect_ip.sh 1 29.20.20.3 1 2.11.22.1 8 1.1.1.1
統計十分鐘內訪問網站的IP地址
vi client_connect_ip.sh ########################################## #this scripts is for auto check conntect to webserver client's ip #create by mingongge at 2017--0-01 ########################################## !/bin/sh TIME=`date +%d/%b/%Y:%k:%M:%S` NTIME=`date +%d/%b/%Y:%k:%M:%S -d '-10 minutes'` #定義時間變量 awk '$4 >= "'\[$NTIME'" && $4 <= "'\[$TIME'"' /wwwlogs/access.log >log.txt #獲取時間段內的日誌信息 awk '{print $1}' log.txt |sort -nr |uniq #將IP地址取出整理排序
若有錯誤或其它問題,歡迎小夥伴留言評論、指正。若有幫助,歡迎點贊+轉發分享。
歡迎你們關注民工哥的公衆號:民工哥技術之路