input {
file {
path => "c:\Program Files\logstash-2.3.3\201403.txt"
start_position =>"beginning"
sincedb_path => "NUL"
#这条配置适用于两种情况:
# (1)调试过程
# (2)第一次导入某个文件
#对于待处理的日志文件,logstash默认只处理新增的部分,所以在调试过程中,我们必须经常手动向日志文件
#中复制几条记录.有了这条配置:sincedb_path => "NUL",logstash每次执行时都会清空历史记录,重新加载
#日志文件,省去了每次调试过程中手动复制日志数据的问题.
#上面的配置适用于windows系统,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
# 关于配置: fields => [ "message" ] , 存在一个问题:
# 在filter{} 中,我们使用remove_field 移除了"message"字段, 但在这里仍使用fields => [ "message" ]
# 存储错误信息. 所以可以推测, logstash中remove_field只是在数据段上做了标志,并没有真的移除.
}
} else {
#stdout{ codec => rubydebug{}}
elasticsearch {
#下面的这几行配置适用于ElasticSearch2.3版本,如果适用其他版本,需要到官网查看官方文档,具体的字段名可能不同.
flush_size => 10000
hosts => ["10.5.68.125"]
index => "sgk-5"
document_type => "qq_sgk-5"
}
}
}
#另外:
# 将编码格式都转换为UTF8 withoutBOM可以避免一些问题.另外,中英文交叉使用由于编码的原因会造成一些
# 莫名奇妙的问题.格式统一为utf8 without BOM可以避免问题,这样在过滤前可能需要将原始日志转换格式.