ELK實戰--分析Apache訪問日誌並生成視圖

1、背景

咱們的ELK架構以下圖所示,各個應用節點日誌直接經過rsyslog實時傳輸到Logstash節點,Logstash對生成的各節點日誌文件作處理後傳輸到Elashticsearch。
ELK實戰--分析Apache訪問日誌並生成視圖git

2、 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 選項指定本身所須要的。下例爲所有可選內容:github

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」的錯誤。web

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自帶的正則表達式。正則表達式

3、Kibana圖形化

Elashticsearch不須要其餘額外配置,重啓Logstash後,Kibana中即可發現日誌,利用以上配置文件,獲得的字段包括:
ELK實戰--分析Apache訪問日誌並生成視圖apache

繪製visualize

例1:統計日訪排名前5的城市
ELK實戰--分析Apache訪問日誌並生成視圖ruby

例2:統計排名前5的城市訪問對多的URI
ELK實戰--分析Apache訪問日誌並生成視圖架構

例3:訪問排名前10位外國國家以及對應IP
ELK實戰--分析Apache訪問日誌並生成視圖elasticsearch

最後,將繪製的visualize都添加到dashboard中,作統一展現:
ELK實戰--分析Apache訪問日誌並生成視圖ide

參考:
Kibana的圖形化-Tile
logstash-patterns-corepost

相關文章
相關標籤/搜索