Logstash Grok 解析器

Posted

技术标签:

【中文标题】Logstash Grok 解析器【英文标题】:Logstash Grok parser 【发布时间】:2015-12-02 17:10:00 【问题描述】:

我是 log-stash 和 grok 的新手,我需要解析非常自定义的日志文件。我在任何地方都找不到一个很好的教程来完成这项工作。尝试了 syslog 示例,但在我的情况下它不起作用。

例子:

11 月 19 日 00:06:37 srv-fe-05 ssh-server-g3: 2037 Sft_server_open_dir, "2037 Sft_server_open_dir, 目录名称: /home/folder1/input, 文件句柄: 007800B000782170, "成功", Session-Id : 162351"

我要提取的项目:

    时间戳:11 月 19 日 00:06:37 将添加到当前年份并作为时间戳存储在弹性搜索中。 服务器主机 srv-fe-05 /home/folder1/input 中的文件夹名称 folder1 成功状态“成功” Session-Id: 162351 来自 Session-Id: 162351

任何帮助或指示将不胜感激。

按照答案我想出了这个模式:

%SYSLOGTIMESTAMP:logTimestamp %USERNAME:sftpServer %USERNAME:processName: %INT:operationType %WORD, \"%INT %WORD, %WORD %WORD: /%WORD/%WORD:clientName/%WORD, %WORD %WORD: %WORD:submissionId, \"%WORD:status\", %WORD-%WORD: %INT:sessionId

我的 2 个新问题是:

    效率如何?我的意思是有哪些方法可以提高效率?

【问题讨论】:

【参考方案1】:

首先,熟悉basic built-in grok patterns。了解 %WORD、%NUMBER 等基本工具将大有帮助。

其次,熟悉在线调试器(heroku 和appspot)。他们各有优势。

第三,慢慢开始。在您的示例中,您可以匹配调试器中字符串开头的日期和时间吗?如果是这样,请尝试为主机名添加匹配项。继续从左到右慢慢移动,直到完成。

如果您查看核心模式,您会注意到“nov”仅出现一次,作为模式 %MONTH 的一部分。有道理,对吧?但还要注意,%MONTH 是较大结构的一部分,例如 %SYSLOGTIMESTAMP,它会在一个步骤中匹配您的日期时间。

最后,还有一些在线指南和教程。 Here's one.

【讨论】:

感谢指导,有没有关于定义自定义模式的教程?例如,我使用日志行到达这里: %SYSLOGTIMESTAMP:logTimestamp%SPACE%USERNAME:sftpServer%SPACE%USERNAME:sftpProcessName%GREEDYDATA:message 但找不到方法在“:”字符之后继续,因为它不是常见的模式。如何定义自己的模式并在 grok 匹配器中使用它们? 你可以在你的模式中加入文字。对于单个空格,我更喜欢使用“”而不是 %SPACE。你也可以在你的模式中加入一个冒号,例如%WORD:%WORD。

以上是关于Logstash Grok 解析器的主要内容,如果未能解决你的问题,请参考以下文章

Logstash使用grok解析IIS日志

Logstash使用grok解析IIS日志

logstash grok解析

Logstash 应该只记录 grok 解析的消息

Logstash:日志解析的 Grok 模式示例

在logstash中使用grok模式解析我的json文件?