clojure實戰——基於logstash搭建日誌數據獲取與整理平臺(2)
1. logstash簡介
logstash是金牌搭檔ELK中的“L”,它主要負責數據的收集、解析整理、傳輸。這對應體現在它的配置文件中的input、filter、output這三段配置。下面僅針對本次項目中需要使用到的地方做一個講解,其他方面讀者可自行到其官網查閱。
2. logstash使用
(1)運行一個logstash
使用logstash非常簡單,從官網下載壓縮包,解壓,執行bin目錄下的logstash執行文件,即可:
啓動命令:
bin/logstash agent -f logstash-simple.conf
logstash-simple.conf是logstash啓動時指定的配置文件,該文件是logstash的核心。
(2)編寫conf文件
logstash的conf文件中定義了數據來源,過濾條件,輸出目的地。另外logstash爲這幾個模塊都提供了豐富的插件,可以使用這些插件實現自己的業務需求。其文件結構及插件的使用如下:
input {
file {
# file插件, 數據源來自日誌文件test.log
# 指定文件路徑
path => “/Users/admin/test/test.log”
# 起始位置,beginning會發送舊數據,end則不會
start_position => "end"
codec => plain {
# plain插件,指定文件解析相關配置
# 指定字符集爲“GBK”
charset => "GBK"
}
}
}
filter {
grok {
# grok插件,用於解析非json格式日誌時使用,可以自定義匹配模式
# 指定模式文件地址
patterns_dir => "/Users/admin/test/testlogpatterns"
# 對日誌內容進行模式匹配
match => ["message", "%{TESTPATTERN}"]
# 移除不需要的一些字段
remove_field => ["@version","@timestamp",message,host,path]
}
}
output {
http {
# http插件,通過http發送給數據需求者
http_method => "post"
# url地址
url => "http://192.168.5.109:8011/log"
}
}
test.log示例文件內容如下:
method:method1,username:snailiu,age:20,message:my test log
testlogpatterns文件內容如下:
TESTPATTERN method:%{DATA:method-name},username:%{DATA:username},age:%{INT:user-age},message:%{DATA:msg}
其中,TESTPATTERN爲該匹配模式的ID與filter中grok下的match => [“message”, “%{TESTPATTERN}”]相對應。
後面則是匹配模式,如 %{DATA:method-name} 會將匹配test.log文件中的“method1”字符串,並設別名爲method-name,%{DATA:method-name} 會將匹配test.log文件中的20字符串,並設別名爲user-age,且將20轉爲INT型。上述日誌通過模式匹配之後應該返回爲一個json結構:
{method-name: method1, username: snailiu, user-age: 20, message: my test log , host : $##$#$#$#$#, path: $#$#$#$#$#, @timestamp: XXXXXXXXXXX, @version: XXXX message: XXXXX}
而path,host這些是我們所不需要的,因此可用remove_field進行刪除。如此,就完成了數據獲取和整理流程。
最後,output中使用http插件,將獲取到的數據發送給某一個第三方服務。