私は、ウェブサーバーのログをelasticsearchエンジンに保存するためにlogstashを使用します。私のlogstash設定ファイルには、 "useragent"プラグインを使ってかなりのユーザーエージェント情報を取得しています。したがって、このようなESへのレコード:logstash:結果からボットを除外
"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! Slurp、...
私は今ESレスポンスからこれらのリクエストを除外しています。しかし、私は洗練されたソリューションを見つけることはできませんでした。私はESクエリーの初心者なので、リクエストを改善するのに手伝ってくれますか? (」私は、より複雑な正規表現を試してみました ない「ヤフーSLURP」、「BaiduSpider」、...除外されますが、この要求、bingbot、Googlebotが、または任意の他の「stuffbot」からのすべての要求を使用して
{
"size": 0,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must_not": [
{
"regexp": {
"useragent.name": ".*bot.*"
}
}
]
}
}
}
},
"aggs": {
"agent": {
"terms": {
"field": "useragent.name.raw"
}
}
}
}
* BOOT * * | BaiduSpider | Yahoo!Slurp) "しかし、Baiduとyahooの結果はまだESの応答に存在しています。
新しいボットが表示された場合は、このソリューションを使用して:あなたは、しかし、使用して例えば、定期的にフィルタープラグインを更新する必要があります
、私はlogstashの設定を更新し、ファイルを再解析する必要があります。それが私がElasticSearchソリューションを好む理由です。 –
クエリでは、まだ新しいボットの存在を認識し、クエリを更新し、古いクエリに基づいて再パブリッシュし、データ/レポートを作成する必要があります。 logstashを使用すると、logstashでファイル全体をリロードする必要はありませんが、クエリで更新するか、logstashを使用してelasticsearchをクエリし、新しいエージェントですべてのドキュメントにタグを付けることができます。あなたのクエリーははるかに洗練されたものになるでしょう。そしてあなたはエージェントのリストを維持する1つの場所を持っています。どこでもトレードオフがあります。 –