一、说明
和这篇差不多 ELK logstash基本配置,只是多了个
_grokparsefailure
判断
二、使用
- 待匹配内容
[2020-09-26 13:07:54] GET http://www.test.com/index/index/test 0.118220
- 配置
# 从日志写入信息
input {
file {
# path:输入的文件的路径 string or array
# 读取一个类型文件:path => "路径"
# 读取多个类型文件:path => [ "路径1", "路径2", "...", "路径n" ]
path => "E:/test/log/*/*.log"
start_position => "beginning" #从什么位置开始读取文件 "beginning","end"
stat_interval => 3 # 我们统计文件的频率(以秒为单位),以查看它们是否已被修改。number或者string_duration("1 second")
}
}
# 处理从日志读取到的日志
filter {
# 使用grok正则匹配
grok {
match => {
# 默认每一行为一条es记录,这一行的内容为es记录的message字段。
# message配置单个规则: "message" => "规则1"
# message配置多个规则: "message" => ["规则1", "规则2", ..., "规则n"]
"message" => [
"\[%{TIMESTAMP_ISO8601:timestamp}\] %{USERNAME:method}[T ]%{URL:url} %{NUMBER:exec_time}"
]
}
}
# 把我们的字段timestamp替换掉系统默认的字段@timestamp
date {
match => ["timestamp", "ISO8601"]
target => "@timestamp"
}
mutate{
# 删除我们的字段timestamp。不删除的话es:如果正则匹配成功,一条记录就会有2个字段;timestamp,@timestamp
remove_field => ["timestamp"]
}
}
# 输出信息到 es
output {
if "_grokparsefailure" not in [tags]{ # grok匹配成功存es的info-表
elasticsearch {
hosts => ["localhost:9200"] #配置Es地址
index => "info-%{+YYYY.MM.dd}" #配置es索引(表名)
}
} else { # grok匹配失败存es的error-表
elasticsearch {
# host(同message配置):string or array
hosts => ["localhost:9200"] #配置Es地址
index => "error-%{+YYYY.MM.dd}" #配置es索引(表名)
}
}
}