2

我正在尝试使用 Logstash grok 模式解析 SSSD 恶魔日志以获得更好的可见性

日志样本

(Mon Nov  9 12:08:56 2020) [sssd[nss]] [client_recv] (0x0200): Client disconnected!
(Mon Nov  9 12:08:56 2020) [sssd[nss]] [client_close_fn] (0x2000): Terminated client [0x55ffd29d93c0][22]

我创建了自定义 Grok 模式,如下所述:

SSSD_TIME [ \(%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}\)]+
SSSD_DEMON \[[a-z]*\[[a-z]*\]\]+
SSSD_FUNCTION \[[a-z,_]*\]+
SSD_LOG_LEVEL (\(\dx\d*\))+

对于下面所述的查询,我使用上述自定义 grok 模式获得以下输出

%{SSSD_TIME:time} %{SSSD_DEMON:demon} %{SSSD_FUNCTION:function} %{SSD_LOG_LEVEL:loglevel}[:]\s+%{GREEDYDATA:message}

输出:

{
  "function": "[client_recv]",
  "loglevel": "(0x0200)",
  "time": "(Mon Nov  9 12:08:56 2020)",
  "demon": "[sssd[nss]]",
  "message": "Client disconnected!"
}

我只需要提取括号中的值而不是全部内容

我尝试跳过括号,但它仅适用于第一个值

下面的查询跳过第一个括号

\(%{SSSD_TIME:time}\) %{SSSD_DEMON:demon} %{SSSD_FUNCTION:function} %{SSD_LOG_LEVEL:loglevel}[:]\s+%{GREEDYDATA:message}

我需要得到以下输出

{
  "function": "client_recv",
  "loglevel": "0x0200",
  "time": "Mon Nov  9 12:08:56 2020",
  "demon": "sssd[nss]",
  "message": "Client disconnected!"
}

如果有人可以帮助我,那就太好了

谢谢

4

1 回答 1

2

这是您所需输出的 ​​grok 模式:

\((?<timestamp>%{DAY} %{MONTH} %{MONTHNUM} %{TIME} %{YEAR})\) \[(?<daemon>(.*))\] \[%{DATA:function}\] \(%{DATA:log_level}\): %{GREEDYDATA:message}

我使用Grok 调试器创建了 from 模式。

这是输出的屏幕截图:

在此处输入图像描述

在此处输入图像描述

如果需要,您可以使用logstash 过滤器删除不必要的标签DAY,如MONTH等。mutate

于 2020-11-19T18:05:53.497 回答