在 “helloword” 示例中,我們對 logstash 有了個簡單的瞭解。logstash配置 有一個簡單的原則:logstash 一定要有一個input 和一個output . 這章的主要目標是 輸入插件 input .
先給個配置
input {
file {
type => "access_u_ex"
#添加自定義字段
add_field => {"fromhost" => "EIR"}
#監聽文件的路徑
path => "D:/java/logs/test/test1*"
#排除不想監聽的文件
exclude => "test13.log"
# 監聽文件的起始位置
start_position => "beginning"
#增加標籤
#tags => "tag1"
#設置多長時間掃描目錄,發現新文件
#discover_interval => 15
#設置多長時間檢測文件是否修改
#stat_interval => 1
codec => multiline {
charset => "GB2312"
patterns_dir => ["d:/java/logstash-2.3.4/bin/patterns"]
pattern => "^%{SECOND_TIME}"
negate => true
what => "previous"
}
}
}
從上到下,解釋下配置參數的含義。
file : 讀取文件 。
path : 日誌文件絕對路徑(只支持文件的絕對路徑)。
type : 定義類型,以後的filter 、output 都會用到這個屬性。
add_field : 添加字段 ,儘量不要與現有的字段重名。重名的話可能會有不同錯誤出現。
start_position : 從什麼位置開始讀取文件,默認是結束位置。如果要導入原有數據,把這個設定改爲beginning .
discover_interval : 設置多長時間檢查一個被監聽的path 下面是否有新文件。默認時間是15 秒 .
exclude : 不想監聽的文件排除出去。
stat_interval : 設置多久時間檢查一次被監聽的文件(是否有更新),默認是1秒 。說明:
1、 有時候path可能需要配置多個路徑 :
path => ["D:/java/logs/test/test1*" ,"D:/java/logs/test/test2*"]
2、 add_field 添加字段時,想判斷要添加的字段是否存在,不存在時添加
if ![field1]{
mutate{
add_field => {"field1" => "test1"}
}
}
codec 編碼插件
logstash 實際上是一個input | codec | filter | codec | output 的數據流。codec 是用來decode 、 encode 事件的 。Multiline 合併多行數據
Multiline 有三個設置比較重要 : pattern 、negate 、what .pattern : 必須設置 ,String 類型 ,沒有默認值。匹配的是正則表達式。上面 配置中 的含義是 : 通過SECOND_TIME 字段與日誌文件匹配,判斷文件開始位置。 negate : boolean 類型 ,默認爲false . 如果沒有匹配,否定正則表達式。 what : 必須設置,可以設置爲 previous 或 next . (ps: 還沒弄清楚兩者之間的關係,目前我用的都是 previous ) 。
根據上面的配置,還有兩個設置 : charset 、patterns_dir 。
charset : 一般都知道是編碼 ,這個就不多說了 。 patterns_dir : 從配置中看到的是一個 文件路徑 。習慣,我會在 創建這麼個文件:logstash-2.3.4/bin/patterns 。裏面還有一個叫 j2ee 的文件 ,裏面是日誌的配置規則 ,用來解析日誌文件。