ELK 聚合查询

在elasticsearch中es支持对存储文档进行复杂的统计.简称聚合。git

 

ES中的聚合被分为两大类。github

    一、Metrics, Metrics 是简单的对过滤出来的数据集进行avg,max等操做,是一个单一的数值。app

二、ucket, Bucket 你则能够理解为将过滤出来的数据集按条件分红多个小数据集,而后Metrics会分别做用在这些小数据集上。ssh

聚合在ELK里面是一个很是重要的概念,虽然咱们在ELK stack里面用于过多的去了解es的实现过程,可是简单的了解es的查询过程,能够有效的帮助咱们快速的入门Kibana,经过kibana鼠标点击的方式生成聚合数据。curl

 

一、 git先下载数据导入:elasticsearch

git clone git@github.com:xiaoluoge11/longguo-devops.git学习

执行脚本:this

 [root@controller longguo-devops]# ./car.shurl

#备注:咱们会创建一个也许对汽车交易商有所用处的聚合。数据是关于汽车交易的:汽车型号,制造商,销售价格,销售时间以及一些其余的相关数据日志

                               

 

 

Bucket:   

一、 按时间统计(能够是一个时间区间的柱形图date_histogram:kibana这样展现):

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

    "aggs" : {

        "articles_over_time" : {

            "date_histogram" : {

                "field" : "sold",

                "interval": "month"   ##区间能够为:data.hour,munite,year等

             }

         }

    }

}'

返回结果:

"aggregations" : {

    "articles_over_time" : {

      "buckets" : [

        {

          "key_as_string" : "2014-01-01T00:00:00.000Z",

          "key" : 1388534400000,

          "doc_count" : 1

        },

        {

          "key_as_string" : "2014-02-01T00:00:00.000Z",

          "key" : 1391212800000,

          "doc_count" : 1

        },

#####也能够这样指定:

"field" : "sold",

"interval" : "mount",

"format" : "yyyy-MM-dd"  ###指定相应的时间格式

"offset":    "+6h"    ###区间间隔

####或者按照时间区间来查询:

"aggs": {

           "range": {

               "date_range": {

                   "field": "date",

                   "time_zone": "CET",

                   "ranges": [

                      { "to": "2016-02-15/d" },

                      { "from": "2016-02-15/d", "to" : "now/d" },

                      { "from": "now/d" },

 

二、 返回价格区间柱形图(Histogram Aggregation):

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

    "aggs" : {

        "prices" : {

            "histogram" : {

                "field" : "price",

                "interval" : 5000

            }

        }

    }

}'

### Histogram作等间距划分,统计区间的price值,看他落在那个区间,数据间隔是5000:

返回结果:

"aggregations" : {

    "prices" : {

      "buckets" : [

        {

          "key" : 10000.0,

          "doc_count" : 2

        },

        {

          "key" : 15000.0,

          "doc_count" : 1

        },

 

三、 查看每种颜色的销量:

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

    "aggs" : {

        "genres" : {

            "terms" : { "field" : "color" }

        }

    }

}'

 

###注意可能会报以下错:

"reason" : "Fielddata is disabled on text fields by default. Set fielddata=true on [color] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."

 

提示咱们数据类型不对,咱们修改一下mapping映射:

[root@controller .ssh]# curl -XPUT '192.168.63.235:9200/cars/_mapping/transactions' -d  ' 

> {

>   "properties": {

>     "color": {

>       "type": "text",

>       "fielddata": true

>      }

>    }

> }'

{"acknowledged":true}

 

再查下就会看到统计分布的结果:

      "buckets" : [

        {

          "key" : "red",

          "doc_count" : 4

        },

        {

          "key" : "blue",

          "doc_count" : 2

        },

        {

          "key" : "green",

          "doc_count" : 2

        }

 

四、 添加一个指标(Metric):

 

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

    "aggs" : {

        "genres" : {

            "terms" : { "field" : "color" }

        ,

      "aggs": {

         "avg_price": {

            "avg": {

              "field": "price"

              }

            }

          }

       }

     }

}'

####avg能够换成max,min,sum等。用stats就表示全部。

 

五、  用stats找出Metric的全部值。

curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

    "aggs" : {

        "genres" : {

            "terms" : { "field" : "color" }

        ,

      "aggs": {

         "avg_price": {

            "stats": {

              "field": "price"

              }

            }

          }

       }

     }

}'

 

####返回结果:

      "buckets" : [

        {

          "key" : "red",

          "doc_count" : 4,

          "avg_price" : {

            "count" : 4,

            "min" : 10000.0,

            "max" : 80000.0,

            "avg" : 32500.0,

            "sum" : 130000.0

          }

        }

本文内容出自:日志分析之 ELK stack 实战 课程学习笔记

相关文章
相关标签/搜索