Grayloginput相同的不同提取器?

我正在使用Graylog的Filebeat的sidecarfunction来从我的服务器上获取许多不同的日志文件,包括Syslog,Nginx和Java App。 所有这些stream入相同的Grayloginput为节拍(我试图提供多个input,不幸的是Filebeat发送到一个,只有一个位置)。 除Extractor外,一切都很好。

我如何为特定的日志消息指定一个特定的提取器? 例如:如果字段'type'='API'(我的Java应用程序),我想申请一个JSON提取器。 如果type ='nginx',则应用正则expression式提取器。

我在一个input上摄入了几个日志源,并有4个提取器链接到它。 根据我观察到的行为,如果提取器不匹配,它只是传递给下一个提取器。 这只是一个尝试,而不是一个力量。

例如,我的提取器:

  1. 解码JSON(input作为JSON,这变成了字段)
  2. 标准应用程序日志格式(我们使用内部标准)
  3. 错误代码对于应用程序(如果错误,我们的应用程序使用自定义的Example_Error = Something字段)
  4. Mac OS X主机名

当没有错误的应用程序日志进入时,它:

  1. 获取从JSON解码
  2. 通过格雷克与RegEx匹配的格式
  3. 通过(没有“Example_Error =”字段)
  4. 通过(与Mac OS X日志不匹配)

当Mac OS X系统日志进入时:

  1. 获取从JSON解码
  2. 通过(不符合应用程序日志格式)
  3. 通过(不符合错误代码字段)
  4. 获取提取的主机名

有了一些规划和好的groks集合,你可以根据你的日志的预期格式来获得这个工作。 对你来说特别有用的可能还有提取器中的“仅尝试提取字段包含(string/正则expression式)”选项。

如果消息包含API,则将消息复制到api_message,然后在该新字段上执行提取器。

对于nginx来说也是一样