elasticsearch 如何提取字段的一部分并将其存储到logstash筛选器中的另一个字段中?
我有系统日志文件。我正在使用logstash syslog插件过滤器来处理这些日志。我在elasticsearch 如何提取字段的一部分并将其存储到logstash筛选器中的另一个字段中?,elasticsearch,logstash,kibana,kibana-4,elasticsearch,Logstash,Kibana,Kibana 4,我有系统日志文件。我正在使用logstash syslog插件过滤器来处理这些日志。我在syslog\u message字段中收到如下消息: syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down 但是我需要一个新字段,它应该只包含.ERR之前的部分,即“cdp/interface”。这部分内容各不相同,我不知道会出现多少种类型。 所以我想要一个新的字段,并希望将该部分
syslog\u message
字段中收到如下消息:
syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down
但是我需要一个新字段,它应该只包含.ERR之前的部分,即“cdp/interface”。这部分内容各不相同,我不知道会出现多少种类型。
所以我想要一个新的字段,并希望将该部分存储到该字段中,这样我就可以在kibana中绘制这些术语的计数
当前日志存储配置:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
target => "syslog_timestamp"
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
按照@Val的建议将新grok添加到配置文件后
grok {
match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\] %{GREEDYDATA:syslog_message}" }
}
对于某些输入,会发生grokparsefailure。它失败的部分线路包括:
syslog_message: [hald.INFO]: Support query handler called
syslog_message:[mgmtd.INFO]: Finished database commit
任何帮助都将不胜感激。
谢谢您可以在主
grok
过滤器中再添加一个模式,或者仅为syslog\u消息
字段添加另一个grok
过滤器
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
# ====> add this <====
grok {
match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\]:? %{GREEDYDATA:syslog_message}" }
}
date {
target => "syslog_timestamp"
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
过滤器{
如果[类型]=“系统日志”{
格罗克{
match=>{“message”=>“%{SYSLOGTIMESTAMP:syslog\u timestamp}%{SYSLOGHOST:syslog\u hostname}%{DATA:syslog\u program}(?:\[%{POSINT:syslog\u pid}])?:%{greedyddata:syslog\u message}
add_field=>[“received_at”,“%{@timestamp}”]
add_field=>[“从”、“%{host}”接收的_]
}
#=>添加此{“syslog\u message”=>“\[%{PROG:syslog\u type}.%{LOGLEVEL:syslog\u level}\]:?%{greedydyddata:syslog\u message}
}
日期{
目标=>“系统日志\u时间戳”
匹配=>[“系统日志\u时间戳”,“MMM d HH:mm:ss”,“MMM dd HH:mm:ss”]
}
因此,您将获得两个附加字段,即:
syslog\u类型:cdp/接口
syslog\u级别:ERR
而
syslog_消息
只会包含在系统上写入CDP帧时发生的-{---}错误。链接已关闭
您当前的日志存储配置是什么样子的?我使用当前的日志存储配置@Valhey进行了编辑,感谢您的快速帮助,但我获得了许多输入的grokparsefailure,例如syslog_消息:[hald.INFO]:支持查询处理程序调用了这样的输入日志,我得到了grokparsefailure。@Val请用几个失败的日志行更新您的问题。我用两个失败的输入日志@Val进行了编辑。您可以查看一下吗?我修改了我的答案,请看一看。非常感谢您的快速帮助@Val