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 집계 기능을 사용하면 검색 분석 작업 흐름 안에서 꼬리 분포를 모니터링하고, 임계값을 평가하며, 견고한 분산을 측정할 수 있다. 원시 데이터를 먼저 외부 시스템으로 옮기지 않고도 이 분석을 한곳에서 수행할 수 있다.

함께 읽기: