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

标签 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

我要换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/

相关文章:

java - 简单英语的正则表达式

r - R : remove specific pattern in multiple places without removing text in between instances of the pattern 中的字符串操作

python - 如何限制正则表达式结果?

elasticsearch - Elastiscsearch索引作为Logstash中的文件名-引用问题

elasticsearch - Logstash,与多个索引关联的多个grok

python - C++ 程序字符串搜索的速度可以和 python 一样快吗?

java - 如何在正则表达式中定位行尾?

json - 将 JSON 文件导入 Logstash + Elasticsearch + Kibana

elasticsearch - 如何将消息拆分为多个字段

elasticsearch - 如何轻松地将字段从已分析更改为未分析