首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >logstash :从结果中排除机器人

logstash :从结果中排除机器人
EN

Stack Overflow用户
提问于 2016-10-11 16:48:37
回答 3查看 906关注 0票数 0

我使用logstash将我的web服务器日志存储到elasticsearch中。在我的logstash配置文件中,我还使用了"useragent“插件来获取漂亮的用户代理信息。所以有这样的记录:

代码语言:javascript
复制
    "message": "157.55.XXX.XXX - - [10/Oct/2016:02:24:27 +0200] "GET /handle/boreal:5621?site_name=BOREAL HTTP/1.1" 301 373 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"",
    ...
    "agent": ""Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)""
    "useragent": {
        "name": "bingbot",
        "os": "Other",
        "os_name": "Other",
        "device": "Spider",
        "major": "2",
        "minor": "0"
    } 

正如您注意到的,此请求来自Microsoft BingBot机器人。我检查了我的所有记录,我发现很多机器人访问我的网站: bingbot,googlebot,BaiduSpider,Yahoo!斯库普..。

我现在尝试将这些请求排除在ES响应之外。但我没有找到一个优雅的解决方案。由于我是ES查询的初学者,你能帮我改进我的要求吗?

代码语言:javascript
复制
{                                               
  "size": 0,                                    
  "query": {                                    
    "filtered": {                               
      "query": {                                
        "match_all": {}                         
      },                                        
      "filter": {                               
        "bool": {                               
          "must_not": [                         
            {                                   
              "regexp": {                       
                "useragent.name": ".*bot.*"     
              }                                 
            }                                   
          ]                                     
        }                                       
      }                                         
    }                                           
  },                                            
  "aggs": {                                     
    "agent": {                                  
      "terms": {                                
        "field": "useragent.name.raw"           
      }                                         
    }                                           
  }                                             
}                                               

使用此请求,所有来自bingbot、googlebot或任何其他"stuffbot“的请求都被排除在外,但不包括"Yahoo!Slurp”、"BaiduSpider“、.我尝试了更复杂的regexp "(.*bot.*|BaiduSpider|Yahoo!Slurp)“,但百度和雅虎的结果仍然出现在ES的响应中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-19 20:03:39

如果您已经在使用用户代理logstash过滤器,那么您可以从优秀且维护良好的ua解析器中获益。它识别了许多机器人,并将它们标记为"useragent.device:Spider“。对elasticsearch的适当查询可以是:

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "must_not": {
        "term": { "useragent.device": "Spider" }
      }
    }
  }
}

但是,您可能需要定期更新过滤器插件,例如:

代码语言:javascript
复制
logstash-plugin update logstash-filter-useragent
票数 1
EN

Stack Overflow用户

发布于 2016-10-11 16:58:41

如何在must_not中使用多个对象,这是一个数组。每台机器人一台,从结果中排除。

来自文件:

must_not:所有这些条款都不能匹配。相当于没有。

就像这样:

代码语言:javascript
复制
"filter": {                               
  "bool": {                               
    "must_not": [
      {
        "regexp": { "useragent.name": "regex for bing bot" }                                 
      },
      {
        "regexp": { "useragent.name": "regex for google bot" }                                 
      },
      ...
    ]
  }
}

如果用户代理是静态的,则可以完全避免使用regexpterm

代码语言:javascript
复制
{
  "term" : { "useragent.name": "bing bot agent name" } 
}
票数 0
EN

Stack Overflow用户

发布于 2016-10-11 17:54:02

一旦您有了必要的regexp,就可以将它们放入logstash中,并让它标记事件。这将使您的查询更短、更容易阅读、更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39982504

复制
相关文章

相似问题

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