input {
file {
path => "c:\Program Files\logstash-2.3.3\201403.txt"
start_position =>"beginning"
sincedb_path => "NUL"
#這條配置適用于兩種情況:
# (1)調(diào)試過程
# (2)第一次導(dǎo)入某個(gè)文件
#對于待處理的日志文件,logstash默認(rèn)只處理新增的部分,所以在調(diào)試過程中,我們必須經(jīng)常手動向日志文件
#中復(fù)制幾條記錄.有了這條配置:sincedb_path => "NUL",logstash每次執(zhí)行時(shí)都會清空歷史記錄,重新加載
#日志文件,省去了每次調(diào)試過程中手動復(fù)制日志數(shù)據(jù)的問題.
#上面的配置適用于windows系統(tǒng),linux下使用: sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{NUMBER:number}----%{WORD:password}" }
add_field => {
"type" => "_sgk_zd"
"phonenumber" => ""
"saltvalue" => ""
"username" => ""
"email" => ""
}
remove_field => [ "message", "@timestamp", "@version", "host", "path" ]
}
}
output{
if "_grokparsefailure" in [tags] {
csv {
path => "c:\Program Files\logstash-2.3.3\test1_error.txt"
fields => [ "message" ]
#create_if_deleted => true
# 關(guān)于配置: fields => [ "message" ] , 存在一個(gè)問題:
# 在filter{} 中,我們使用remove_field 移除了"message"字段, 但在這里仍使用fields => [ "message" ]
# 存儲錯(cuò)誤信息. 所以可以推測, logstash中remove_field只是在數(shù)據(jù)段上做了標(biāo)志,并沒有真的移除.
}
} else {
#stdout{ codec => rubydebug{}}
elasticsearch {
#下面的這幾行配置適用于ElasticSearch2.3版本,如果適用其他版本,需要到官網(wǎng)查看官方文檔,具體的字段名可能不同.
flush_size => 10000
hosts => ["10.5.68.125"]
index => "sgk-5"
document_type => "qq_sgk-5"
}
}
}
#另外:
# 將編碼格式都轉(zhuǎn)換為UTF8 withoutBOM可以避免一些問題.另外,中英文交叉使用由于編碼的原因會造成一些
# 莫名奇妙的問題.格式統(tǒng)一為utf8 without BOM可以避免問題,這樣在過濾前可能需要將原始日志轉(zhuǎn)換格式.