Filebeat+Logstash+ElasticSearch+Kibana搭建Apache訪問日志解析平台


對於ELK還不太熟悉的同學可以參考我前面的兩篇文章ElasticSearch + Logstash + Kibana 搭建筆記Log stash學習筆記(一),本文搭建了一套專門訪問Apache的訪問日志的ELK環境,能夠實現訪問日志的可視化分析。

數據源 Filebeat + Logstash

數據源對應Logstash中的Input部分,本文采用Filebeat來讀取Apache日志提供給Logstash,Logstash進行日志解析輸入到ES中進行存儲。Filebeat的配置比較簡單,參考文章Log stash學習筆記(一)。需要注意的是,如果Filebeat之前發送過數據,需要執行rm data/registry刪除緩存數據,強制filebeat從原始數據重新讀取數據。

重點來看Logstash的配置

input {
  beats {
    port => "5043"
  }
}
filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => ["datetime"]
  }
  geoip {
    source => "clientip"
  }
}
output {
  elasticsearch {
    hosts => "47.89.30.169:9200"
    index => "access_log"
  }
  stdout { codec => rubydebug }
}

本文使用了grok插件,grok是Logstash默認自帶的Filter插件,能夠幫助我們將未結構化的日志數據轉化為結構化、可查詢的數據格式。grok對日志的解析基於特定的正則模式匹配,對於Apache的Access Log 訪問日志,多數情況下我們都適用combined格式。

可以看到現在logstash輸出的內容包括原始日志信息,以及按照日志格式解析后的各字段信息。

GeoIP插件

配置參考上面,使用了GeoIP插件后,可以對訪問IP進行反向解析,返回地址信息。可以用於后續做圖。

但是僅僅這樣還不夠,因為進入ES的數據會自動進行映射,而對於地理數據,需要映射為特殊的geo_point類型,本文未做詳細闡述,后續會有文章專門解決這個問題。

timestamp

logstash默認為每次導入的數據賦予當前的時間做為時間戳,如果我們希望能夠使用日志中的時間做為記錄的時間戳,主要用下面的配置。

  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => ["datetime"]
  }

這個配置匹配了日志中的時間,放入timestamp時間戳中,並且新創建了一個單獨的datetime字段。

logstash配置完成后,首先確保ElasticSearch處於運行狀態,再啟動 logstash,最后啟動Filebeat。這樣,日志數據就會存放在ES中的 access_log 索引下。

ElasticSearch

ElasticSearch基本上無需做配置,安裝可以參考我之前的文章ElasticSearch + Logstash + Kibana 搭建筆記,這里補充幾個常用的API。

列出可用的索引

curl 'localhost:9200/_cat/indices?v'

結果如下圖

查詢索引數據

$DATE需要替換成具體的日期(格式YYYY.MM.DD),本文就是logstash-2017.08.10。

curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=response=200’

Kibana

首先在Kibana中創建Index Pattern,索引選擇 access_log ,時間戳選擇 timestamp 或者 datetime,然后在 Discover 中就可以看到數據了。

結合Visualize和Dashboar,可以做出按時間統計的訪問曲線和返回狀態餅圖。

參考資料:
1、Logstash Reference
2、Apache mod_log_config
3、Logstash: modify apache date format
4、Elastic Output Plugin


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM