You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则捕获组匹配多输入?适配Logstash Grok场景

Logstash Grok多Agent数据捕获解决方案

针对多Agent场景下捕获组被覆盖的问题,核心解决思路是让正则重复匹配所有Agent块,利用Logstash自动将重复捕获字段转为数组的特性,完整保留所有Agent数据。

适配多Agent的Grok正则

直接替换原有正则,以下表达式完全兼容单/多Agent场景:

cs1=(?:(?<agent_name>[a-zA-Z0-9\.\-]+)\s\(ip:\s(?<agent_ip>[0-9.]+), component_id:\s(?<component_id>[a-zA-Z0-9\-\.]+)\)(?:, )?)+

正则拆解

  • (?: ... )+:非捕获重复组,匹配1个或多个Agent块,确保所有Agent都被处理
  • (?<agent_name>[a-zA-Z0-9\.\-]+):匹配Agent域名(如123.abc.com),多次捕获后自动转为数组
  • \s\(ip:\s(?<agent_ip>[0-9.]+):匹配Agent的IP地址,和原正则规则一致
  • component_id:\s(?<component_id>[a-zA-Z0-9\-\.]+):匹配component_id值
  • (?:, )?:匹配Agent之间的分隔符, ,最后一个Agent后无分隔符时也能正常匹配

效果验证

单Agent场景输入

cs1=123.abc.com (ip: 10.1.1.1, component_id: x)

捕获后字段(自动转为单元素数组):

  • agent_name: ["123.abc.com"]
  • agent_ip: ["10.1.1.1"]
  • component_id: ["x"]

多Agent场景输入

cs1=123.abc.com (ip: 10.1.1.2, component_id: x), 456.abc.com (ip: 10.1.1.3, component_id: y)

捕获后字段(多元素数组):

  • agent_name: ["123.abc.com", "456.abc.com"]
  • agent_ip: ["10.1.1.2", "10.1.1.3"]
  • component_id: ["x", "y"]

可选优化

如果需要保留原始cs1字段的完整内容,可在正则开头增加捕获:

cs1=(?<cs1>.+?)(?:(?<agent_name>[a-zA-Z0-9\.\-]+)\s\(ip:\s(?<agent_ip>[0-9.]+), component_id:\s(?<component_id>[a-zA-Z0-9\-\.]+)\)(?:, )?)+

注:.*?为非贪婪匹配,避免覆盖后续Agent的捕获逻辑。

内容的提问来源于stack exchange,提问作者Teezuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:40:26