zoukankan      html  css  js  c++  java
  • ELK 聚合查询

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

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

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

    2、ucket, Bucket 你则可以理解为将过滤出来的数据集按条件分成多个小数据集,然后Metrics会分别作用在这些小数据集上。

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

    1、 git先下载数据导入:

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

    执行脚本:

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

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

                                   

     

    Bucket:   

    1、 按时间统计(可以是一个时间区间的柱形图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" },

    2、 返回价格区间柱形图(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

            },

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

    [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

            }

    4、 添加一个指标(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就表示所有。

    5、  用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 实战 课程学习笔记

  • 相关阅读:
    请问发表的文章如何备份?
    .NET中利用XML来自动生成代码策略
    XPO使用随笔
    为方便做封包分析,做了个十六进制和字符互转的网页小工具
    前端人员如何模拟慢网速环境
    补充《动态加载外部.js文件时候,javascript的执行顺序问题》
    凡客诚品官方网站的前端改进建议
    "Cachecontrol”常见的取值private、nocache、maxage、mustrevalidate及其用意
    javascript跨域操作cookie的点滴记录
    HTTPS的七个误解(译文转载)
  • 原文地址:https://www.cnblogs.com/hk315523748/p/6479842.html
Copyright © 2011-2022 走看看