我在日志文件中输入了以下内容:
DATATYPE::SERVICEPERFDATA TIMET::1519222690 HOSTNAME::localhost SERVICEDESC::Total Processes SERVICEPERFDATA::procs=59;250;400;0; SERVICECHECKCOMMAND::check_local_procs!250!400!RSZDT HOSTSTATE::UP HOSTSTATETYPE::HARD SERVICESTATE::OK SERVICESTATETYPE::HARD
我想将消息中的
SERVICEPERFDATA::procs=59;250;400;0;
这个键值对替换为类似的内容。SERVICEPERFDATA::59
所以我可以使用kv过滤器将数据分为键和值。
我已经尝试过使用Logstash mutate和gsub,但是找不到合适的正则表达式来实现我的目标。
谢谢,
查兰
最佳答案
您可以使用捕获组来获取正则表达式的一部分,并将其用于mutate / gsub配置的替换部分。
mutate {
gsub => ["message","(?<=SERVICEPERFDATA::)procs=(\d+);\S+", "\1"]
}
(?<=SERVICEPERFDATA::)
使得正则表达式仅适用于SERVICEPERFDATA::
。 procs=(\d+);\S+
正则表达式会将所有数字放在procs=
和下一个;
之间,然后放在组的替换部分("\1"
)中。参见regex explanation。
筛选结果:
SERVICEPERFDATA::59
另一个选择是使用两个mutate / gsub过滤器,每个过滤器都有一个更简单的配置。