Nick Sergeev 작성
게시일: 2026년 10월 6일 · 읽는 데 3분
평균은 분포의 실제 모습을 가릴 수 있다. 평균값이 정상적으로 보여도 긴 지연 시간 꼬리, 치우친 값 분포, 사용자 경험과 운영 위험에 큰 영향을 주는 일부 극단값을 숨길 수 있다.
Manticore는 이제 백분위수, 백분위 순위, MAD(중앙값 절대 편차) 집계를 지원한다. 이를 통해 검색 쿼리에서 분포의 폭과 꼬리, 이상치를 직접 분석할 수 있다. 지연 시간 모니터링, 가격 분석, 사용자 행동 분석 등 평균만으로는 충분하지 않은 작업에 특히 유용하다.
percentiles(field[, {values='...',compression=N}])는 추정 백분위수 값을 반환한다. 예를 들어 p50, p95, p99를 구할 수 있다.
percentile_ranks(field, {values='...',compression=N})는 지정한 각 값 이하인 문서의 비율을 추정해 반환한다.
median_absolute_deviation(field[, {compression=N}])는 중앙값 주변의 분포 폭을 나타내는 견고한 지표인 MAD 추정값을 반환한다.
이 함수들은 메모리 사용량을 제한하고 성능을 예측 가능하게 유지하도록 근사치로 동작한다. 선택 사항인 compression은 정확도와 메모리 사용량 사이의 균형을 조절한다. 값을 낮추면 더 빠르고 가벼워지지만 근사 오차가 커질 수 있다. 기본값은 200이다.
사용 방법
Manticore는 이 집계에 SQL과 JSON API 두 가지 문법을 지원한다.
SQL 예시:
```sql
SELECT
percentiles(latency) AS p_default,
percentiles(latency, {values='5,50,95',compression=200}) AS p_custom,
percentile_ranks(latency, {values='10,150,1500',compression=200}) AS r_custom,
median_absolute_deviation(latency, {compression=200}) AS mad
FROM agg_td\G
```
``***** 1. row *****
p_default: {"1":10,"5":10,"25":20,"50":30,"75":40,"95":50,"99":50}
p_custom: {"5":10,"50":30,"95":50}
r_custom: {"10":20,"150":100,"1500":100}
mad: {"value":10,"value_as_string":"10"}
```
p_custom은 백분위수 기준값을 보여준다. 예를 들어 p95 지연 시간을 확인할 수 있다. r_custom은 지정한 임계값 이하인 문서의 비율을 알려준다. mad는 값이 중앙값 주변에 얼마나 밀집해 있는지 보여준다.
HTTP JSON 예시:
```http
POST /json/search
{
"table": "agg_td",
"size": 0,
"aggs": {
"latency_percentiles": {
"percentiles": {
"field": "latency",
"values": [5, 50, 95],
"keyed": true
}
},
"latency_ranks": {
"percentile_ranks": {
"field": "latency",
"values": [10, 150, 1500],
"keyed": true
}
},
"latency_mad": {
"median_absolute_deviation": {
"field": "latency",
"tdigest": {
"compression": 200
}
}
}
}
}
```
``{
"took": 0,
"timed_out": false,
"aggregations": {
"latency_percentiles": {
"values": {
"5.0": 10,
"50.0": 30,
"95.0": 50
}
},
"latency_ranks": {
"values": {
"10.0": 20,
"150.0": 100,
"1500.0": 100
}
},
"latency_mad": {
"value": 10,
"value_as_string": "10"
}
},
"hits": {
"total": 5,
"hits": []
}
}
```
활용 사례와 실무 팁
- 검색/API 성능: p50·p95·p99 지연 시간과 MAD를 추적해 지연 시간 변동을 살핀다.
- 전자상거래 가격 분석: 가격 분포의 변화와 비정상적인 분산을 감지한다.
- 사기 및 이상 징후 탐지: 중앙값 기준 행동과 MAD 기반 편차를 비교한다.
- SLO 보고: 백분위 순위를 비즈니스 임계값과 함께 활용한다. 예를 들어 “200ms 이내 비율”을 확인할 수 있다.
기준값이 필요하면 백분위수를 사용한다(예: p95가 얼마인가?). 임계값 이하의 비율이 필요하면 percentile_ranks를 사용한다(예: 200ms 이하가 몇 퍼센트인가?). 이상치가 흔하고 견고한 분산 지표가 필요하면 MAD를 사용한다. 먼저 기본값인 compression=200으로 시작하고 더 높은 정밀도가 필요하면 값을 높인다.
Manticore의 백분위수 및 MAD 집계 기능을 사용하면 검색 분석 작업 흐름 안에서 꼬리 분포를 모니터링하고, 임계값을 평가하며, 견고한 분산을 측정할 수 있다. 원시 데이터를 먼저 외부 시스템으로 옮기지 않고도 이 분석을 한곳에서 수행할 수 있다.
함께 읽기:
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요