我正在使用Graylog的Filebeat的sidecarfunction来从我的服务器上获取许多不同的日志文件,包括Syslog,Nginx和Java App。 所有这些stream入相同的Grayloginput为节拍(我试图提供多个input,不幸的是Filebeat发送到一个,只有一个位置)。 除Extractor外,一切都很好。
我如何为特定的日志消息指定一个特定的提取器? 例如:如果字段'type'='API'(我的Java应用程序),我想申请一个JSON提取器。 如果type ='nginx',则应用正则expression式提取器。
我在一个input上摄入了几个日志源,并有4个提取器链接到它。 根据我观察到的行为,如果提取器不匹配,它只是传递给下一个提取器。 这只是一个尝试,而不是一个力量。
例如,我的提取器:
当没有错误的应用程序日志进入时,它:
当Mac OS X系统日志进入时:
有了一些规划和好的groks集合,你可以根据你的日志的预期格式来获得这个工作。 对你来说特别有用的可能还有提取器中的“仅尝试提取字段包含(string/正则expression式)”选项。
如果消息包含API,则将消息复制到api_message,然后在该新字段上执行提取器。
对于nginx来说也是一样