我在日志文件中输入了以下内容:

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过滤器,每个过滤器都有一个更简单的配置。

09-12 20:13