SSSD 日志的 Grok 模式
Grok Patterns for SSSD Logs
我正在尝试使用 Logstash grok 模式解析 SSSD Demon 日志以获得更好的可见性
日志样本
(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!"
}
如果有人能帮我解决这个问题那就太好了
谢谢
这是您想要的输出的 grok 模式:
\((?<timestamp>%{DAY} %{MONTH} %{MONTHNUM} %{TIME} %{YEAR})\) \[(?<daemon>(.*))\] \[%{DATA:function}\] \(%{DATA:log_level}\): %{GREEDYDATA:message}
我已经使用 Grok Debugger 创建了 from 模式。
这是输出的屏幕截图:
如果需要,您可以使用 logstash 的 mutate
过滤器删除不必要的标签,如 DAY
、MONTH
等。
我正在尝试使用 Logstash grok 模式解析 SSSD Demon 日志以获得更好的可见性
日志样本
(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!"
}
如果有人能帮我解决这个问题那就太好了
谢谢
这是您想要的输出的 grok 模式:
\((?<timestamp>%{DAY} %{MONTH} %{MONTHNUM} %{TIME} %{YEAR})\) \[(?<daemon>(.*))\] \[%{DATA:function}\] \(%{DATA:log_level}\): %{GREEDYDATA:message}
我已经使用 Grok Debugger 创建了 from 模式。
这是输出的屏幕截图:
如果需要,您可以使用 logstash 的 mutate
过滤器删除不必要的标签,如 DAY
、MONTH
等。