分析網站日誌能夠幫助咱們瞭解用戶地域信息,統計用戶行爲,發現網站缺陷。操做會面臨幾個問題linux
日誌分析工具splunk如何使用?web
日誌格式信息不全,如何配置日誌打印出全面信息?shell
有大量爬蟲訪問,並不是真實流量,如何去掉這些流量?數據庫
若是網站用了CDN加速,反向代理,網關等,日誌打印的是這些設備的ip,那麼用戶的真實ip如何得到呢?apache
閱讀本文能幫您有效解決上述問題瀏覽器
splunk服務器
splunk安裝使用工具
日誌分析工具splunk是一款商業軟件,但有免費版,免費版天天處理日誌限制500M之內。對於簡單分析,500M也能夠挖掘出不少信息了。本文使用免費版splunk分析Apache離線日誌。網站
先要到splunk官網註冊用戶,註冊用戶填寫的信息除郵箱外不須要真實,公司瞎填便可。註冊完成到下載頁面選擇Linux 64位版本,this
選擇命令行下載,會給出一個wget的指令,
複製wgt指令,到Linux上執行,獲得壓縮包。 (wget指令splunk-8.0.5-xxx的xxx每一個人都不一樣)
[root@localhost splunk]# wget -O splunk-8.0.5-xxx-Linux-x86_64.tgz 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=8.0.5&product=splunk&filename=splunk-8.0.5-xxx-Linux-x86_64.tgz&wget=true'
解壓壓縮包,到bin目錄下執行
./splunk start
看見協議條款按q,是否贊成協議位置輸入y
Do you agree with this license? [y/n]: y
用戶名輸入 admin
密碼輸入 adminroot
出現
The Splunk web interface is at http://192.168.56.106:8000
表示啓動成功。相比於開源工具(ELK,graylog)確實省心太多了。確保Linux防火牆是關閉狀態,而後瀏覽器輸入前面8000地址打開登陸。首次會有引導教程指導如何上傳文件。平常若是想上傳文件,直接點擊左上角splunk->enterprise進入主界面,而後選擇添加數據,
有多種添加數據的方式,這裏選擇上載,就是日誌文件已經在我電腦裏了,像上傳附件同樣傳給splunk。過程所有默認,上載文件須要等一段時間。Apache日誌設置「來源類型」時選擇web裏的access_combined。
下一步,「檢查」,「提交」都是默認。顯示文件上載成功,點擊「開始搜索」按鈕,搜索剛纔上傳的日誌數據。
搜索框是放搜索限制條件的,右下方是原始日誌,左側是各個字段的名稱,這些字段是工具內置的,知足格式的日誌會自動被解析出這些字段,好比每條日誌開頭都有個客戶端的ip,就是左側的clientip,鼠標點擊clientip會看見統計結果,默認是出現頻率最高的前10個ip。若是要統計更多,須要在搜索框用對應語法查詢。
splunk搜索語言介紹(SPL語法)
語法用於在搜索框中使用,達到限制範圍,統計所須要指標的目的。語法像「搜索引擎 + SQL + shell」的混合體。若是能熟練運用功能很是強大。
基本語法,
source="access2020-09-11.log" host="basicserver" sourcetype="access_combined"
source表示數據來源文件名,host是splunk所在的主機名稱,sourcetype是導入時配置的。這些均可以變換,我想統計10號的數據,將access2020-09-10.log做爲source就達到了效果。若是想查看basicserver裏的全部數據不分日期,把source條件去掉,只保留host和sourcetype兩個條件。搜索框最少要有一個條件。
訪問頻率最高的200個ip
host="basicserver" | top clientip limit=200
客戶端ip的地理信息
host="basicserver" | iplocation clientip
執行後左側下方「感興趣的字段」會比剛纔多出City Country Region字段,這些和客戶端ip的地理位置是對應的。
訪問頻率最高的十個城市
host="basicserver" | iplocation clientip | top City limit=10
地圖查看ip分佈
host="basicserver" | iplocation clientip | geostats count
有多少不一樣的ip訪問網站
host="basicserver" | stats dc(clientip)
全部日誌記錄按時間正序排列
host="basicserver" | sort _time
默認按照倒序,最新的日誌排在最前面
訪問次數最少的ip
host="basicserver" | rare clientip
被訪問最多的uri
host="basicserver" | top uri limit=20
clientip不等於某兩個網段的記錄
host=basicserver clientip!="158.111.2.*" clientip!="192.190.2.*"
補充一句,搜索框能夠輸入不少條件,條件增多搜索框會隨着變大,不要擔憂條件多裝不下。
數據可視化
搜索欄下方依次有 事件、模式、統計信息、可視化 選項,最後的可視化選項能生成圖表,最好是在搜索命令計算了某個統計指標,而後點擊可視化。若是沒計算指標直接點擊可視化,配置會比較繁瑣才能生成圖表。
假設搜索欄統計某天訪問次數最高的20個clientip,命令爲
source="access2020-09-11.log" | top clientip limit=20
執行完會在統計信息下方列出前20個ip,點擊可視化,選擇柱狀圖。
柱狀圖出來後,點擊格式能夠配置讓座標ip豎着顯示,看着更舒服。
ip地址的地理信息數據庫如何更新
統計ip的地理位置依賴於地理信息庫,安裝時有個內置的庫,不是最新的。若是要更新到最新的須要到https://dev.maxmind.com/zh-hans/geoip/geoip2/geolite2/下載最新的GeoLite2-City.mmdb(要先註冊),把這個文件複製到splunk/share目錄下覆蓋原來的同名文件便可。
刪除數據
刪除全部數據./splunk clean eventdata -f
刪除屬於索引indexname的數據 ./splunk clean eventdata -index indexname -f
Apache日誌須要注意的
common和combined兩種格式
日誌格式有common和combined兩種格式,combined格式信息更全面,比common格式多了refer和useragent信息。下面是apache/conf下的httpd.conf文件裏對兩種格式的定義
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
若是common日誌知足不了分析要求,能夠把格式改爲common格式。方法是修改apache/conf下的httpd.conf文件,把裏面CustomLog末尾配置爲combined
CustomLog "|/opt/apache/bin/rotatelogs /opt/apache/logs/access%Y-%m-%d.log 86400" combined
沒法直接看到用戶真實ip怎麼辦
若是網站前方有反向代理或者網關,或者網站作了CDN加速,那麼日誌的clientip是代理服務器、網關或者CDN加速服務器的ip,沒什麼分析價值。
要獲取用戶真實ip能夠修改httpd.conf的LogFormat,加上%{X-FORWARDED-FOR}i (簡稱XFF),我直接將XFF加到了%h的後面,
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 鄭州看男科醫院哪家好http://www.120zzxbyy.com/
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b" common
假設網站有CDN加速(其它狀況同理分析),按上面格式,每條日誌首先打印的是CDN加速服務器ip,而後是XFF的ip(也就是用戶真實ip)。若是用戶沒有通過CDN直接訪問,那麼XFF就是一條橫線"-"。 鄭州割包皮哪一個醫院好http://www.zztongji120.com/
Apache動態載入配置文件
修改完配置文件,不須要重啓Apache,到Apache/bin下執行./apachectl graceful能夠動態載入配置文件,不中止服務,新的配置馬上生效。
splunk如何解析XFF字段
splunk內置的access_combined和access_common格式都沒法解析XFF,若是要正確解析須要修改splunk/etc/system/default/transforms.conf
新增[xff]段配置XFF的正則