我的日志文件中有这样的内容:
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,但找不到合适的正则表达式来实现我的目标。
谢谢,查兰
您可以使用捕获组来获取正则表达式的一部分并将其用于 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 过滤器,每个过滤器的配置都更简单。