grok - 一种查找特定单个字符的方法 - grok 模式
问题描述
正如标题所说,目前开始在工作项目中使用 Grok 模式,但我遇到了一些问题。基本上我最初处理日志然后检查消息(字段)本身是否存在“%”符号,因为如果它存在我想“重新识别”消息,我将粘贴代码,因为我相信它会有所帮助说明问题:
filter {
if [solution] == "horizon" {
grok {
id => "horizon_base_grok"
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level} %{DATA:horizon.component} %{DATA:horizon.process}:%{GREEDYDATA:message}" }
overwrite => ["message"]
if '%' in [message] {
match => { "message" => "%{DATA:free_mem_string} < %{NUMBER:free_mem_value:int}%{GREEDYDATA:message}" }
overwrite => ["message"]
}
}
if [log-level] not in [ "ERROR","WARN","FATAL" ] {
drop {}
}
}
date {
id => "horizon_date"
match => [ "timestamp","ISO8601" ]
add_tag => [ "horizon_date" ]
}
}
如果我删除这部分:
if '%' in [message] {
match => { "message" => "%{DATA:free_mem_string} < %{NUMBER:free_mem_value:int}%{GREEDYDATA:message}" }
overwrite => ["message"]
}
一切正常,但是使用这段代码,我们停止在 Kibana 上获取日志。我已经测试过在在线调试器上输入 Grok 模式并且它可以工作,所以我几乎 100% 确定问题出在“if”语句上。
你能帮忙吗?非常感激!
解决方案
推荐阅读
- java - Poi ans Xerces:windows 上的异常
- python - Python中的对数刻度使yscale消失
- php - php根据数组中的键获取值
- python - 权限错误:[WinError 32] 该进程无法访问该文件,因为它正被另一个进程使用:
- c# - 如何使用 ICommand 将组合框事件绑定到视图模型
- python - Python:使用 Tensorflow 的文本定位器
- function - ES6 导入函数 - 在 Vue 组件中执行
- reactjs - React Checkbox 没有获得价值 onCheck
- uwp - StorageFileQueryResult.GetFilesAsync() 在 UWP 中与 IndexerOption 正确使用
- angular - 如何在条件语句中异步 api 响应?