在添加Prune过滤器和KV过滤器后,日志不会进入Elastic搜索



我正在学习ELK,并试图作为我的项目的POC。我正在为我的项目中的示例集成日志应用KV过滤器,我可以看到很多额外的字段因此而来,所以我尝试应用修剪过滤器和白名单某些字段。我可以看到日志被打印在logstash服务器中,但日志不会进行弹性搜索。如果我去掉过滤器,它将进入弹性搜索。请建议如何对此问题进行进一步调试。

filter {
kv {
field_split => "{},?[]"
transform_key => "capitalize"
transform_value => "capitalize"
trim_key => "s"
trim_value => "s"
include_brackets => false   
}
prune
{
whitelist_names => [ "App_version", "Correlation_id", "Env", "Flow_name", "host", "Instance_id", "log_level","log_thread", "log_timestamp", "message", "patient_id", "status_code", "type", "detail"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "mule-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
stdout { codec => rubydebug }
}

我还需要两个建议,

我还尝试在初始日志中使用grok过滤器,并尝试从示例日志中获取日志级别字段(时间和日志类型(,并将剩余的日志发送到KV过滤器。有什么参考资料请分享。这是我尝试过的。但获得了_grokparsefailure。我已将msgbody传递给具有源选项的kv滤波器。

grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}s+%{LOGLEVEL:loglevel}s+%{GREEDYDATA:msgbody}"}
overwrite => [ "msgbody" ]
}

我在示例日志中有消息字段,如下所示。当数据到达Kibana时,我可以看到两个消息字段标签,一个是完整的日志,另一个是正确的消息(突出显示(。变异对这种情况有效吗?有什么方法可以将完整日志名称更改为其他名称吗??

[2020-02-10 11:20:07.172]信息Mule.api[[MuleRuntime].cpuLight.04:[主api测试].api-main.PU_LITE@256c5cf5:[主api测试].main api主/处理器/0/处理器/0.CPU_LITE@378f34b0]:事件:0000000 3{app_name=main api main,app_version=v1,env=测试,时间戳=2020-02-10T11:20:07.172Z,log={correlation_id=00000003、patient_id=12345678,instance_id=医院,message=系统API的启动,flow_name=main api main}}

修剪过滤器错误

您的prune筛选器在whitelist_names列表中没有@timestamp字段,您的输出是基于日期的(%{+YYYY.MM.dd}(,logstash需要输出中的@timestamp字段来提取日期。

我已经用您的示例消息运行了您的管道,它按预期工作,使用prune过滤器,消息被发送到elasticsearch,但它存储在一个名为mule-的索引中,没有任何日期时间字段。

如果没有prune过滤器,您的消息将使用logstash接收到事件的时间作为@timestamp,因为您没有任何日期过滤器来更改它。

如果您为索引mule-*创建了具有@timestamp等日期时间字段的索引模式,则在Kibana上不会看到索引中任何不具有相同日期时间字段。

grok错误

你的grok是错误的,你需要避开时间戳周围的方括号。Kibana有一个grok调试器,您可以在其中尝试您的模式。

以下grok工作,移动您的kv以在grok之后运行,并使用msgbody作为源。

grok {
match => { "message" => "[%{TIMESTAMP_ISO8601:timestamp}]s+%{LOGLEVEL:loglevel}s+%{GREEDYDATA:msgbody}"}
overwrite => [ "msgbody" ]
}
kv {
source => "msgbody"
field_split => "{},?[]"
transform_key => "capitalize"
transform_value => "capitalize"
trim_key => "s"
trim_value => "s"
include_brackets => false
}

只需运行它并将输出输出到stdout,即可查看更改prune筛选器所需的筛选器。

重复的消息字段

如果您将kv过滤器放在grok之后,您就不会有重复的message字段,因为kv正在大写您的字段,您将以包含完整日志的message字段和包含内部消息的Message字段结束,logstash字段区分大小写。

但是,您可以使用mutate过滤器重命名任何字段。

mutate {
rename => ["message", "fullLogMessage"]
}

相关内容

  • 没有找到相关文章

最新更新