Logstash-ElasticSearch聚合是Elasticsearch提供的一种强大数据分析功能,它允许你对存储在Elasticsearch中的数据进行分组、统计和分析。当Logstash将数据导入Elasticsearch后,可以通过聚合操作对这些数据进行深入分析。
Elasticsearch聚合主要分为三类:
avg
: 平均值sum
: 求和min
: 最小值max
: 最大值count
: 计数stats
: 包含以上所有基本统计cardinality
: 基数统计(近似去重计数)terms
: 按字段值分组range
: 按数值范围分组date_range
: 按日期范围分组histogram
: 直方图分组date_histogram
: 日期直方图分组avg_bucket
: 计算桶的平均值sum_bucket
: 计算桶的总和max_bucket
: 找出最大值桶min_bucket
: 找出最小值桶原因:
doc_count_error_upper_bound
设置解决方案:
{
"aggs": {
"top_tags": {
"terms": {
"field": "tags",
"size": 20,
"shard_size": 100
}
}
}
}
原因:
解决方案:
keyword
类型而非text
eager_global_ordinals
优化高基数字段composite
聚合替代深层嵌套聚合原因:
解决方案:
{
"aggs": {
"sales_over_time": {
"date_histogram": {
"field": "date",
"calendar_interval": "day",
"time_zone": "+08:00",
"format": "yyyy-MM-dd"
}
}
}
}
GET /logs/_search
{
"size": 0,
"aggs": {
"status_code": {
"terms": {
"field": "response.status_code",
"size": 10
}
}
}
}
GET /sales/_search
{
"size": 0,
"aggs": {
"by_region": {
"terms": {
"field": "region"
},
"aggs": {
"total_sales": {
"sum": {
"field": "amount"
}
},
"avg_sale": {
"avg": {
"field": "amount"
}
}
}
}
}
}
GET /access_logs/_search
{
"size": 0,
"aggs": {
"visits_per_day": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day"
},
"aggs": {
"unique_visitors": {
"cardinality": {
"field": "user_id"
}
}
}
}
}
}
cardinality
聚合而非terms
composite
聚合替代深度分页