提取与神交域

问题描述 投票:0回答:1

我想提出的最简单的神交过滤器,只需从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过滤器?

谢谢!

regex elasticsearch logstash logstash-grok
1个回答
0
投票

您可以添加类似下面的自定义模式:

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})" }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.