如何在logstash中使用mutate和gsub替换部分值

Rao*_*Rao 2 regex logstash

我的日志文件中有这样的内容:

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
Run Code Online (Sandbox Code Playgroud)

我想将SERVICEPERFDATA::procs=59;250;400;0;我的消息中的这个键值对替换为这样的东西。

SERVICEPERFDATA::59
Run Code Online (Sandbox Code Playgroud)

所以我可以使用 kv 过滤器将数据拆分为键和值。

我已经尝试过 Logstash mutate 和 gsub,但找不到合适的正则表达式来实现我的目标。

谢谢,查兰

bau*_*dsp 5

您可以使用捕获组来获取正则表达式的一部分并将其用于 mutate/gsub 配置的替换部分。

mutate {
  gsub => ["message","(?<=SERVICEPERFDATA::)procs=(\d+);\S+", "\1"]
}
Run Code Online (Sandbox Code Playgroud)

(?<=SERVICEPERFDATA::)使它所以正则表达式只适用于SERVICEPERFDATA::。该procs=(\d+);\S+正则表达式会把之间的所有数字procs=和下一个;的基团,然后将其在该配置的替换部分用于("\1")。

请参阅正则表达式说明

过滤结果: SERVICEPERFDATA::59

另一种选择是使用两个 mutate/gsub 过滤器,每个过滤器的配置都更简单。