对于这个问题,我正在尝试创建一个 grok 模式,它与 nginx 日志中 X-Forwarded-For 标头中的第一个 IP 匹配。日志行通常如下所示:
68.75.44.178, 172.68.146.54, 127.0.0.1 - - [15/May/2017:12:16:27 +0200] "GET /jobs/24237/it-back-end HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
第一个 IP 是客户端的实际 IP,这是我要检索的 IP,另外两个来自代理,在我们的例子中是 cloudflare 和 varnish。
我在https://grokconstructor.appspot.com上尝试过的模式如下所示:
FIRSTIPORHOST (^%{IPORHOST})(?:,\s%{IPORHOST})*
不幸的是,它匹配所有 IP,尽管非捕获组,所以我做错了什么?还是有更好的模式?
澄清:
使用filebeats将整个日志文件读入弹性搜索,因此我需要以某种方式匹配IP,否则我将无法匹配该行的其余部分,例如日期或用户代理等。