GET 인덱스명/_search
{
"aggs": {
"작명": { < = 구별하기 쉬운 이름으로 설정
"sum/avg/min/max": { < = 계산식
"field": "필드명" < = 계산될 필드
}
}
},
"size": 0 < = 결과값은 반환하지 않고 집계값만 반환
}
// 예시
GET 인덱스명/_search
{
"aggs": {
"connect_total_by_date": {
"date_histogram": {
"field": "@timestamp",
"interval": "day",
"format": "yyyy-MM-dd",
"min_doc_count": 1
},
"aggs": {
"total_connect": {
"sum": {
"field": "connect_total"
}
}
} // aggs block
} // connect~~ block
} // aggs block
}
GET 인덱스명/_search
{
"aggs": {
"작명": {
"stats": {
"field": "필드명"
}
}
},
"size": 0
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
## 결과값
{
"took": 33,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 242835,
"max_score": 0,
"hits": []
},
"aggregations": {
"필드명": {
"count": 242835,
"min": 0, < = 최소.
"max": 241213, < = 최대.
"avg": 9049.102065188297, < = 평균.
"sum": 2197438700 < = 합계.
}
}
}
## Stats결과값에 추가된 항목
"aggregations": {
"download_estats": {
"count": 242835,
"min": 0,
"max": 241213,
"avg": 9049.102065188297,
"sum": 2197438700,
"sum_of_squares": 133545882701698, < = 제곱.
"variance": 468058704.9782911, < = 분산.
"std_deviation": 21634.664429528162, < = 표준 편차.
"std_deviation_bounds": { < = 표준 편차 구간.
"upper": 52318.43092424462,
"lower": -34220.22679386803
}
}
}
}
특정 요소의 개수를 찾는데 유용
GET ncurion-alert-*/_search
{
"aggs": {
"sip_cnt": {
"cardinality": {
"field": "src_ip.keyword" // src_ip가 keyword가 아닌 타입이라 명시적 지정
}
},
"sport_cnt": {
"cardinality": {
"field": "src_port"
}
},
"dip_cnt": {
"cardinality": {
"field": "dest_ip.keyword" // dest_ip가 keyword가 아닌 타입이라 명시적 지정
}
},
"dport_cnt": {
"cardinality": {
"field": "dest_port"
}
},
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
## 결과값 중 aggs부분만
"aggregations" : {
"sport_cnt" : {
"value" : 6
},
"sip_cnt" : {
"value" : 2476
},
"dport_cnt" : {
"value" : 2
},
"dip_cnt" : {
"value" : 241
}
}
Bucket key 로 식별되는 여러 Bucket 쿼리 컨텍스트(테이블)에서 정의된 문제의 데이터를 분할하며 Document를 그룹화하는것을 말한다. 즉 SQL의 GRUOP BY 쿼리라고 생각하면된다.