首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用grok提取域

问使用grok提取域
EN

Stack Overflow用户
提问于 2017-10-08 23:52:03
回答 2查看 2.9K关注 0票数 0

我想要做最简单的grok过滤器,只是为了从url中提取域名,例如,为url

代码语言:javascript
复制
https://stackoverflow.com/questions/ask?title=grok%20extract%20url 

我想知道结果

代码语言:javascript
复制
stackoverflow.com

我试着用过滤器做到这一点

代码语言:javascript
复制
%{URIPROTO}://%{URIHOST:domain}

它确实提取了stackoverflow.com,但当我使用不同的url时,例如https://www.elastic.co/,它的开头是www

结果是

代码语言:javascript
复制
www.elastic.co

有没有一个过滤器可以只返回域名,而不返回www?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-10-09 00:44:23

您可以添加一个自定义模式,如下所示:

代码语言:javascript
复制
SLD ([a-z0-9-]+.[a-z]{2,63})

这将为您提供不带子域的二级域名。您还可以为unicode域名添加如下所示的xn--模式:

代码语言:javascript
复制
SLD ((xn--)?[a-z0-9-]+\.[a-z]{2,63})

请检查如何将自定义模式添加到logstash documentation。然后,现在,您可以使用如下所示的自定义模式:

代码语言:javascript
复制
%{URIPROTO}://(%{WORD:SUBDOMAIN}\.)?(%{SLD})

对于%{WORD:SUBDOMAIN}这一部分,您还可以向您的自定义模式编写另一个正则表达式,如下所示:

代码语言:javascript
复制
SUBDOMAIN ([a-z0-9-]{1,63})

最后,您的模式文件如下所示:

代码语言:javascript
复制
SLD ((xn--)?[a-z0-9-]+\.[a-z]{2,63})
SUBDOMAIN ([a-z0-9-]{1,63})

而你的logstash conf如下:

代码语言:javascript
复制
filter {
  grok {
    patterns_dir => ["./patterns"]
    match => { "uri" => "%{URIPROTO}://(%{SUBDOMAIN}\.)?(%{SLD})" }
  }
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-19 19:27:47

请定义grok pattern:

代码语言:javascript
复制
HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)

并使用它:

代码语言:javascript
复制
%{URIPROTO}://%{HOSTNAME:domain}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46633038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档