Logstash Grok 解析器

Logstash Grok parser

我是 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,"Success",会话 ID:162351"

我要提取的项目:

  1. 时间戳:11 月 19 日 00:06:37 将添加到当前年份并作为时间戳存储在弹性搜索中。
  2. 服务器主机srv-fe-05
  3. 文件夹名称 folder1 来自 /home/folder1/input
  4. 成功状态"Success"
  5. 会话 ID:162351 来自会话 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 and appspot)。他们各有优势。

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

如果查看核心模式,您会注意到 "nov" 只出现一次,作为模式 %{MONTH} 的一部分。有道理,对吧?但还要注意,%{MONTH} 是更大结构的一部分,例如 %{SYSLOGTIMESTAMP},它会一步匹配您的日期时间。

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