1. 需求:比如有一个网站,记录下了每次请求的访问的耗时,需要统计tp50,tp90,tp99

tp50:50%的请求的耗时最长在多长时间
tp90:90%的请求的耗时最长在多长时间
tp99:99%的请求的耗时最长在多长时间

PUT /website
{
"mappings": {
"logs": {
"properties": {
"latency": {
"type": "long"
},
"province": {
"type": "keyword"
},
"timestamp": {
"type": "date"
}
}
}
}
} POST /website/logs/_bulk
{ "index": {}}
{ "latency" : , "province" : "江苏", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : , "province" : "江苏", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : , "province" : "江苏", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : , "province" : "江苏", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : , "province" : "江苏", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : , "province" : "江苏", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : , "province" : "新疆", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : , "province" : "新疆", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : , "province" : "新疆", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : , "province" : "新疆", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : , "province" : "新疆", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : , "province" : "新疆", "timestamp" : "2016-10-29" }

创建索引并添加数据

可以采用pencentiles语法,示例:

GET /website/logs/_search
{
"size": ,
"aggs": {
"latency_percentiles": {
"percentiles": {
"field": "latency",
"percents": [
,
, ]
}
},
"latency_avg": {
"avg": {
"field": "latency"
}
}
}
}

2. SLA:就是你提供的服务的标准

我们的网站的提供的访问延时的SLA,确保所有的请求100%,都必须在200ms以内,大公司内,一般都是要求100%在200ms以内

如果超过1s,则需要升级到A级故障,代表网站的访问性能和用户体验急剧下降

需求:在200ms以内的,有百分之多少,在1000毫秒以内的有百分之多少,percentile ranks metric

这个percentile ranks,其实比pencentile还要常用,例如,可以按照品牌分组,计算,电视机,售价在1000占比,2000占比,3000占比

GET /website/logs/_search
{
"size": ,
"aggs": {
"group_by_province": {
"terms": {
"field": "province"
},
"aggs": {
"latency_percentile_ranks": {
"percentile_ranks": {
"field": "latency",
"values": [
, ]
}
}
}
}
}
}

percentile采用TDigest算法,利用很多节点来执行百分比的计算,近似估计,有误差,节点越多,越精准

compression,可以限制节点数量,最多 compression * 20 = 2000个node去计算

默认 100 ,数量越大占用内存越多,但是结果越精准,性能越差,一个节点占用32字节,100 * 20 * 32 = 64KB,如果想要percentile算法越精准,compression可以设置的越大

3. 聚合分析的内部原理

  采用倒排索引+正排索引(doc value)实现,在PUT/POST的时候,就会生成doc value数据,也就是正排索引,正排索引也会写入磁盘文件中,然后os cache先进行缓存,以提升访问doc value正排索引的性能,如果os cache内存大小不足够放得下整个正排索引,就会将doc value的数据写入磁盘文件中,es官方是建议,es大量是基于os cache来进行缓存和提升性能的,不建议用jvm内存来进行缓存,那样会导致一定的gc开销和oom问题给jvm更少的内存,给os cache更大的内存64g服务器,给jvm最多16g,几十个g的内存给os cache,os cache可以提升doc value和倒排索引的缓存和查询效率

4.对分析的字段进行聚合

  对分词的field,直接执行聚合操作,会报错,大概意思是说,你必须要打开fielddata,然后将正排索引数据加载到内存中,才可以对分词的field执行聚合操作,而且会消耗很大的内存

POST /test_index/_mapping/test_type
{
"properties": {
"test_field": {
"type": "text",
"fielddata": true
}
}
}

如果要对分词的field执行聚合操作,必须将fielddata设置为true

5. 分词field+fielddata的工作原理

  对不分词的所有field,可以执行聚合操作,如果你的某个field不分词,那么在index-time,就会自动生成doc value,所以针对这些不分词的field执行聚合操作的时候,自动就会用doc value来执行,但是分词的field是没有doc value的,在index-time,如果某个field是分词的,那么是不会给它建立doc value正排索引的,因为分词后,占用的空间过于大,所以默认是不支持分词field进行聚合的,正因为分词field默认没有doc value,所以直接对分词field执行聚合操作,是会报错的

  对于分词field,必须打开和使用fielddata,完全存在于纯内存中,结构和doc value类似,如果是ngram或者是大量term,那么必将占用大量的内存,如果一定要对分词的field执行聚合,那么必须将fielddata=true,然后es就会在执行聚合操作的时候,现场将field对应的数据,建立一份fielddata正排索引,fielddata正排索引的结构跟doc value是类似的,但是只会讲fielddata正排索引加载到内存中来,然后基于内存中的fielddata正排索引执行分词field的聚合操作

  为什么fielddata必须在内存?因为分词的字符串按照term进行聚合,需要执行更加复杂的算法和操作,如果基于磁盘和os cache,那么性能会很差

Elasticsearch学习之深入聚合分析四---案例实战的更多相关文章

  1. Elasticsearch学习之深入聚合分析三---案例实战

    1. 统计指定品牌下每个颜色的销量 任何的聚合,都必须在搜索出来的结果数据中进行,搜索结果,就是聚合分析操作的scope GET /tvs/sales/_search { , "query& ...

  2. Elasticsearch学习之深入聚合分析二---案例实战

    以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析,首先建立电视销售的索引,然后 添加几条销售记录 PUT /tvs { "mappin ...

  3. Elasticsearch学习之深入聚合分析五---案例实战

    1. fielddata核心原理 fielddata加载到内存的过程是lazy加载的,对一个analzyed field执行聚合时,才会加载,而且是field-level加载的,一个index的一个f ...

  4. Elasticsearch学习之深入聚合分析一---基本概念

    首先明白两个核心概念:bucket和metric 1. bucket:一个数据分组 city name 北京 小李 北京 小王 上海 小张 上海 小丽 上海 小陈 基于city划分buckets,划分 ...

  5. ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    一.Index Template与Dynamic Template的概念 1.Index Template:它是用来根据提前设定的Mappings和Settings,并按照一定的规则,自动匹配到新创建 ...

  6. elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)

    一.聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值.最小值,计算和.平均值等.ES作为 ...

  7. ElasticSearch 简单的 搜索 聚合 分析

    一. 搜索1.DSL搜索 全部数据没有任何条件 GET /shop/goods/_search { "query": { "match_all": {} } } ...

  8. Elasticsearch学习之嵌套聚合,下钻分析,聚合分析

    1. 计算每个tag下的商品数量 GET /ecommerce/product/_search { "aggs": { "group_by_tags": { & ...

  9. Elasticsearch 6.x版本全文检索学习之聚合分析入门

    1.什么是聚合分析? 答:聚合分析,英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能.特点如下所示: a.功能丰富,提供Bucket.Metric.Pipeline等 ...

随机推荐

  1. C# 校验给定的ip地址是否合法

    函数用于检测ip地址格式是否合法,包括ip的组成格式,每隔段是否不超过255等,但这个函数不能验证这个ip地址是否可以ping通. /// <summary> /// 验证IP地址是否合法 ...

  2. C# 判断字符串为空有哪几种方法

    Length法:);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == ""); ...

  3. Backlight当前行背景高亮显示

    下载地址:https://github.com/limejelly/Backlight-for-XCode PS:Xcode 8.0 默认支持了 跟VVDocumenter规范注释生成器的安装方式一样 ...

  4. iis7错误提示An error occurred on the server when processing the URL...

    win7下面运行ASP程序总是出错,原来是站点配置的问题... 问题一:MS Jet引擎改变了临时目录的位置,但是又没有对临时目录的存取权限,导致数据库使用失败(因为sql问题,后改用access数据 ...

  5. 使用jquery操作session

    摘要: 今天分享的是使用jquery来处理session.我们将使用sessionStorage对象,它类似与localStorage对象,只是sessionStorage是用来储存session数据 ...

  6. 【转】WCF OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout

    关于这四个属性,在MSDN中的解释有点敷衍了事.Open/Close/Receive/Send本是HTTP/TCP/SOCKET的概念,Read/Write Operation则是Web Servic ...

  7. 执行RF设置顶层测试套件的描述说明

    场景1:通过pybot命令更新套件层描述 命令:pybot -D 套件层描述 -D --doc documentation 设置顶层测试套件的描述说明.说明中下划线将转换为空格, 并且他可能包含简单的 ...

  8. LNMP 简介

    LNMP 代表的就是:Linux 操作系统下,Nginx + MySQL + PHP 这种网站服务器架构 工作流程:Nginx 直接处理静态请求,动态请求会转发给 php-fpm ( php 是作为一 ...

  9. 使用 requests 发送 POST 请求

    POST请求也就是向服务器提交数据,通常我们用来提交表单数据: import requests postdata = { //定义表单数据 "username": "ab ...

  10. LINUX网络之ifconfig命令与ping

    ifconfig命令 网络配置 ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数.用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配置信息 ...