我想提出的最简单的神交过滤器,只需从URL中提取域例如,对于URL
https://stackoverflow.com/questions/ask?title=grok%20extract%20url
我想获得的结果
stackoverflow.com
我试图与过滤器这样做
%{URIPROTO}://%{URIHOST:domain}
而且它没有提取我stackoverflow.com,但是当我使用的是在开始例如https://www.elastic.co/有WWW不同的URL 其结果是
www.elastic.co
是否有可能返回我的域独自一人,也不能加www过滤器?
谢谢!
您可以添加类似下面的自定义模式:
SLD ([a-z0-9-]+.[a-z]{2,63})
这给你二级域名没有子域。您还可以添加xn--
模式类似下面的Unicode域名:
SLD ((xn--)?[a-z0-9-]+\.[a-z]{2,63})
请检查你怎么可以添加自定义模式logstash documentation。那么,现在,你可以使用如下这个自定义模式:
%{URIPROTO}://(%{WORD:SUBDOMAIN}\.)?(%{SLD})
对于%{WORD:SUBDOMAIN}
这一部分,你也可以写另一个正则表达式到自定义模式如下图所示:
SUBDOMAIN ([a-z0-9-]{1,63})
最后,你的模式文件是这样的:
SLD ((xn--)?[a-z0-9-]+\.[a-z]{2,63})
SUBDOMAIN ([a-z0-9-]{1,63})
而你logstash的conf是这样的:
filter {
grok {
patterns_dir => ["./patterns"]
match => { "uri" => "%{URIPROTO}://(%{SUBDOMAIN}\.)?(%{SLD})" }
}
}