filter {
grok {
match => ["message","%{TIMESTAMP_ISO8601:timestamp}\s+%{MONGO3_SEVERITY:severity}\s+%{MONGO3_COMPONENT:component}%{SPACE}(?:\[%{DATA:context}\])?\s+%{GREEDYDATA:body}"]
}
if [body] =~ "ms$" {
grok {
match => ["body",".*\}(\s+%{NUMBER:spend_time:int}ms$)?"]
}
}
date {
match => [ "timestamp", "ISO8601" ]
#remove_field => [ "timestamp" ]
}
}
Item | Comment |
---|---|
filter { | 框定处理逻辑的定义范围 |
grok { | 定义了一个过滤器,使用 grok 插件来解析文本,和抓取信息,用于文本结构化 |
match => ["message",".*"] | 用来match哈希 {"message" => ".*patten.*"},然后把正则捕获的值作为事件日志的filed |
if [body] =~ "ms$" | 判断 body 字段中是否以 ms 结尾,如果匹配,就执行定义的代码段 |
match => ["body",".*\}(\s+%{NUMBER:spend_time:int}ms$)?"] | 尝试从body中抽取花费的时间 |
date { | 定义了一个过滤器,使用 date 插件来从fileds中解析出时间,然后把获取的时间值作为此次事件日志的时间戳 |
match => [ "timestamp", "ISO8601" ] | 取用 timestamp 中的时间作为事件日志时间戳,模式匹配为 ISO8601 |
#remove_field => [ "timestamp" ] | 一般而言,日志会有一个自己的时间戳 @timestamp ,这是logstash或 beats看到日志时的时间点,但是上一步已经将从日志捕获的时间赋给了 @timestamp ,所以 timestamp 就是一份冗余的信息,可以使用 remove_field 方法来删掉这个字段,但我选择保留 |
Note: 这里的 if 判断不能省,否则会产生大量的 _grokparsefailure
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。