Elasticsearch:使用 user agent 处理器来丰富数据

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:使用 user agent 处理器来丰富数据相关的知识,希望对你有一定的参考价值。

user_agent 处理器从浏览器随其 Web 请求发送的用户代理字符串中提取详细信息。 默认情况下,此处理器在 user_agent 字段下添加此信息。我们知道,发出 Web 请求的浏览器使用 user agent 字符串标识自己。在这个字符串中,这些用户代理字符串中有很多信息,比如使用的是什么浏览器,操作系统,版本等。但是很不幸的是,user agent 的字符串确实很难读:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/78.0.3904.70 Safari/537.36

如上所示,user agent 的信息不是那么容易理解的。

在 Elasticsearch 的 ingest node 中,我们可以通过部署一个 ingest pipeline,并使用 user_agent 处理器对它进行处理,那么我们可以得到更有有用的结构化信息。从这些信息中,我们甚至可以对访问的浏览器,操作系统等进行统计分析。比如,上面的 user agent 字符串,经过处理器,可以变为:

"user_agent" : {
    "name" : "Chrome",
    "original" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36",
    "os" : {
        "name" : "Mac OS X",
        "version" : "10.14.6",
        "full" : "Mac OS X 10.14.6"
    },
    "device" : {
        "name" : "Other"
    },
    "version" : "78.0.3904"
}

显然上面的信息更利于我们对 user agent 的分析。

下面是一个基于 agent 字段将用户代理详细信息添加到 user_agent 字段的示例:

PUT _ingest/pipeline/user_agent
{
  "description" : "Add user agent information",
  "processors" : [
    {
      "user_agent" : {
        "field" : "agent"
      }
    }
  ]
}

我们首先创建上面的 user_agent 这个 ingest pipeline。在导入数据时,我们可以使用如下的方法来使用 user_agent 这个处理器来对 user agent 字符串进行结构化:

PUT my-index-000001/_doc/my_id?pipeline=user_agent
{
  "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
}

那么我们可以通过如下的命令来查看被导入的数据:

GET my-index-000001/_doc/my_id

上面的命令显示:

{
  "_index" : "my-index-000001",
  "_type" : "_doc",
  "_id" : "my_id",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
    "user_agent" : {
      "original" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
      "os" : {
        "name" : "Mac OS X",
        "version" : "10.10.5",
        "full" : "Mac OS X 10.10.5"
      },
      "name" : "Chrome",
      "device" : {
        "name" : "Mac"
      },
      "version" : "51.0.2704.103"
    }
  }
}

在上面,我们可以清楚地看到浏览器的名称:Chome,操作系统的信息,以及版本的信息。如果有时网路请求有问题的时候,我们可以通过这个来分析是否为某个浏览器的版本有问题,或者是操作系统的原因。当然我们甚至可以结合其它数据来统计不同浏览器的访问情况等等。

以上是关于Elasticsearch:使用 user agent 处理器来丰富数据的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch中核心详解

使用Elasticsearch中的copy_to来提高搜索效率

(48)ElasticSearch之查询结果分析

java操作 elasticsearch8.0 doc文档<二>

(12)ElasticSearch 基本查询(Query查询)

Elasticsearch高级查询—— 查询所有文档