close
Logstash
/var/log/named:/var/log/named
sudo vi ~/docker-elk/logstash/pipeline/bind.conf
input {
file {
type => "BIND_DNS"
path => [ "/var/log/named/query.log" ]
start_position => "beginning"
}
}
filter {
if [type] == "BIND_DNS" {
grok {
match => ["message", "(?%{MONTHDAY}[-]%{MONTH}[-]%{YEAR} %{TIME}) client %{IPV4:clientip}#%{POSINT:clientport} \(%{GREEDYDATA:query1}\): query: %{GREEDYDATA:query2} IN %{GREEDYDATA:querytype} \(%{IPV4:dns}\)"]
}
date {
match => ["logdate", "dd-MMM-yyyy HH:mm:ss.SSS"]
timezone => "America/Los_Angeles"
}
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
03-Aug-2017 00:55:29.005 client XXX.XXX.XXX.XXX#54501(www.google.com): query: www.google.com IN A + (XXX.XXX.XXX.XXX)
- 這次的目的是要分析 BIND9 的 query.log 檔,主要需要修改的地方是 Logstash 結構化 log 的設定
- 先將 log 檔案所在的目錄 volume 到 docker container,在 volumes 區塊新增
- ~/docker-elk/docker-compose.yml
- 根據 BIND9 的 query.log 新增結構化設定
- ~/docker-elk/logstash/pipeline/bind.conf
- input > file > path 分析 log 檔案的位置
- filter > grok 分析並透過他的 patterns 重構 log 字串
- into
{ "_index": "logstash-2017.08.03", "_type": "BIND_DNS", "_id": "AV2nF6AFU4gS5SfvUHc1", "_version": 1, "_score": null, "_source": { "path": "/var/log/named/query.log", "@timestamp": "2017-08-03T00:55:29.005Z", "logdate": "03-Aug-2017 00:55:29.005", "clientip": "203.75.167.229", "query1": "www.google.com", "query2": "www.google.com", "@version": "1", "host": "690ab8796350", "dns": "172.31.10.132", "message": "03-Aug-2017 00:55:29.005 client 203.75.167.229#54501 (www.google.com): query: www.google.com IN A + (172.31.10.132)", "type": "BIND_DNS", "clientport": "54501", "querytype": "A +" } }
- (?<logdate>%{MONTHDAY}[-]%{MONTH}[-]%{YEAR} %{TIME}) 是自訂 pattern,因為原始 pattern 沒有符合 query.log 的日期格式,參考來源是 logstash-patterns-core
- 其他關於 grok 寫法的判斷與模擬,可以透過 Grok Debugger 測試
- filter > date 是將自訂參數 logdate 取代預設 timestamp 的寫法。因為預設 timestamp 是指 Logstash 分析匯入的時間,而不是 log 紀錄的時間,所以要特別替換後才方便給 Kibana 分析使用
- 如果記錄檔 EC2 機器時區有另外設定,timezone 也要設定
Kibana
- 一開始會先選擇 Elasticsearch 資料來源,因為沒有特別修改設定,直接使用預設的 logstash-* 即可
- 因為時區預設使用瀏覽器設定,所以要先到 Management > Advanced Settings > dateFormat:tz 強制設定為資料的時區
-
建立一個 IP COUNT/DATE 的圖表
-
建立新圖表 Visualize > Create a visualization
-
選擇長條圖 Basic Charts > Vertical Bar
-
選擇資料來源 From a New Search, Select Index > logstash-*
-
Y 軸選擇欄位 clientip 的數量 Y-Axis > Aggregation[Unique Count] > Field[clientip.keyword]
-
X 軸選擇日期 X-Axis > Aggregation[Date Histogram] > Field[@timestamp] > Interval[Daily]
-
點選右上角的箭頭 Apply changes
-
右上角時間範圍選擇 This week 就可以看到一周內 IP COUNT/DATE 的長條圖
-
-
文章標籤
全站熱搜
留言列表