我的日志文件中有这样的内容:
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 过滤器,每个过滤器都有一个更简单的配置。
关于regex - 如何在logstash中使用mutate和gsub替换部分值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48908218/