ELK分析Apache訪問日誌並生成影象
一、背景
我們的ELK架構如下圖所示,各個應用節點日誌直接通過rsyslog實時傳輸到Logstash節點,Logstash對生成的各節點日誌檔案做處理後傳輸到Elashticsearch。
二、 logstash配置檔案
input部分
input { file { type => "apache_log" path => [ "/opt/data/logs/idca-web1-172.16.3.2/apache_access.log", "/opt/data/logs/idca-web1-172.16.3.2/apache_ssl_request.log" ] stat_interval => 1 discover_interval => 1 start_position=>"end" sincedb_path => "/dev/null" } }
filter部分
filter { if [type] == "apache_log" { grok { patterns_dir => ["/usr/local/logstash/etc/conf.d/patterns/httpd"] match => { "message" => "%{HTTPDLOG}" } } geoip { source => "clientip" target => "geoip" add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"] add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"] remove_field => ["[geoip][longitude]","[geoip][latitude]"] } mutate { convert => [ "[geoip][coordinates]", "float" ] convert => [ "response","integer" ] convert => [ "bytes","integer" ] convert => [ "usetime","integer" ] remove_field => "message" } date { match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"] } mutate { remove_field => "timestamp" } } }
#geiop配置部分使用add_field添加了一個座標欄位,使用remove_field刪除了多餘的經度、緯度座標。
#第一個mutate配置使用convert轉換了部分欄位的型別,使用remove_filed刪除了message欄位,message欄位是原日誌內容,已經分配到了各個欄位,所以是多餘的直接刪除。
#GeoIP 庫資料較多,如果你不需要這麼多內容,可以通過 fields 選項指定自己所需要的。下例為全部可選內容:
geoip { fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"] }
output部分
output {
if [type] == "apache_log" {
elasticsearch {
hosts => ["172.16.1.25","172.16.1.26","172.16.1.27"]
index => 'logstash-apache-%{+YYYY-MM-dd}'
codec=>plain{charset=>"UTF-8"}
}
}
#注意:index索引的名稱要以logstash開頭,否則kibana在生成地圖選擇field型別時會報“No Compatible Fields: The “[*****]YYYY-MM” index pattern does not contain any of the following field types: geo_point”的錯誤。
patterns部分
HTTPDLOG %{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"%{DATA:referrer}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{NUMBER:usetime} \"%{DATA:agent}\"
#根據日誌格式形成正則表示式,logstash有大量的內建變數,直接套用即可,如果某些欄位不能正確匹配,可以使用DATA變數(代表任意字元)。
#logstash預設pattern目錄為/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns,在裡面也可找到logstash自帶的正則表示式。
三、Kibana圖形化
Elashticsearch不需要其他額外配置,重啟Logstash後,Kibana中便可發現日誌,利用以上配置檔案,得到的欄位包括:
繪製visualize
例1:統計日訪排名前5的城市
例2:統計排名前5的城市訪問對多的URI
例3:訪問排名前10位外國國家以及對應IP
最後,將繪製的visualize都新增到dashboard中,做統一展示: