logstash - 仅当消息失败两个过滤器而不是一个过滤器时,如何应用解析失败标记?
问题描述
我的 logtash 配置有两个过滤器:1)解析日志消息和 2)解析 JSON 消息:
filter {
grok {
match => { "message" =>
"\[%{TIMESTAMP_ISO8601:log_time}\]\[%{LOGLEVEL:log_level}(?<space>\s*)\]\[%{DATA:thread_name}\]\[%{DATA:class_name}\]%{GREEDYDATA:log_msg}" }
}
json {
source => "message"
add_tag => ["RiskExplain"]
}
}
目前,如果记录了 JSON 消息,它将在被 json 过滤器解析之前使 grok 过滤器失败。因为它没有通过第一个过滤器,所以它会收到一个_grokparsefailure
标签。我想删除此标签,并且仅在两个过滤器均未通过时才应用解析失败标签。那可能吗?
解决方案
grok {
match => { "message" =>
"\[%{TIMESTAMP_ISO8601:log_time}\]\[%{LOGLEVEL:log_level}(?<space>\s*)\]\[%{DATA:thread_name}\]\[%{DATA:class_name}\]%{GREEDYDATA:log_msg}" }
}
if "_grokparsefailure" in [tags] {
json {
source => "message"
add_tag => ["RiskExplain"]
tag_on_failure => ["The_Tag_You_Want"]
remove_tag => [ "_grokparsefailure" ]
}
}
这样 json 过滤器将仅在 grok 过滤器无法解析消息时使用。json 过滤器将删除_grokparsefailure
标签,如果失败,将添加The_Tag_You_Want
标签。
推荐阅读
- c# - 在 EF Core 通用存储库中使用 .Find() 方法加载相关实体
- css - 移动后如何使文本出现在居中图像旁边?
- mongodb - 尝试在 Kubernetes 上的 MongoDB 中创建新用户时连接被拒绝
- python - 父进程全局变量如何复制到python多处理中的子进程
- javascript - 只要输入数组 JavaScript 中有数字,就动态创建一个新数组
- php - 如何使提交表单与我的 php 文件对话以发送电子邮件
- javascript - 在项目列表中以编程方式显示/隐藏元素
- r - 在 Linux Mint 20.1 上安装 R-3.6.3 时出现“意外令牌附近的语法错误”
- scala - Scala 无法在单个 Json 行中获取数据
- python - 使用 python-docx 迭代数据框中的值以打印到 Word