我正在尝试使用datadog中的grok解析规则从postgresql日志中提取一些特定的数据。我试图从下面的日志中提取以下json格式
{
dbuser {
AROAXXXXXXXXXXXXXXXXX : username
}
}
我试图从中提取上述信息的日志
2022-11-11 09:09:15 UTC:10.116.0.244(57888):AROAXXXXXXXXXXXXXXXXX:username@database_name:[592]:LOG: AUDIT: SESSION,3016,1,READ,SELECT,,,"/*pga4dash*/
2022-11-11 09:20:53 UTC:10.116.0.244(57946):AROAXXXXXXXXXXXXXXXXX:username@database_name:[7696]:LOG: pam_authenticate failed: Permission denied
2022-11-11 09:27:02 UTC:10.116.0.244(57984):AROAXXXXXXXXXXXXXXXXX:username@database_name:[8328]:LOG: AUDIT: SESSION,1,1,ROLE,ALTER ROLE,,,ALTER USER app_user SET pgaudit.log TO 'NONE';,<not logged>
2022-11-11 09:21:57 UTC:10.117.0.98(44764):AROAXXXXXXXXXXXXXXXXX:username@database_name:[2873]:FATAL: pg_hba.conf rejects connection for host "10.117.0.98", user "AROAXXXXXXXXXXXXXXXXX:username", database "database_name", SSL off
* Trying 127.0.0.1:1108...
* Connected to rdsauthproxy (127.0.0.1) port 1108 (#0)
> POST /authenticateRequest HTTP/1.1
Host: rdsauthproxy:1108
Accept: */*
Content-Length: 1884
Content-Type: multipart/form-data; boundary=------------------------1b12ee5d61245d84
* We are completely uploaded and fine
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html;charset=utf-8
< Content-Length: 0
<
* Connection #0 to host rdsauthproxy left intact
到目前为止我所做的努力和取得的成就
这是我迄今为止在泛化方面所尝试的,它应该适用于所有日志,但这没有给我输出。
%{date("yyyy-MM-dd HH:mm:ss z"):}:%{ipv4:}(%{number:}):%{data:dbuser:keyvalue(":")}
如果我使用下面的命令,那么它会给出我想要的输出,但只适用于我上面提到的第一种日志模式。
%{date("yyyy-MM-dd HH:mm:ss z"):}:%{ipv4:}(%{number:}):%{data:dbuser:keyvalue(":")}:[592]:LOG:s+AUDIT:s+SESSION,%{integer:},1,READ,SELECT,,,"%{notSpace:}%{data}
如果有一种方法可以忽略所有的日志,只提取精确匹配,那么请帮助我。
所以我能够找出上面问题的解决方案。下面是我使用的解析规则,它帮助我实现了我想要的。
%{date("yyyy-MM-dd HH:mm:ss z"):}:%{ipv4:}(%{number:}):%{word}:%{data:database.username}:%{data}