이 페이지에서는 자체 관리형 mongot 배포서버에 권장되는 Prometheus 경고 세트를 제공합니다. 경고 정의는 시작 점입니다. 이러한 경고 정의를 복사하고 작업부하에 맞게 조정하고 튜닝할 수 있습니다.
각 경고 엔트리에는 다음 필드가 포함됩니다.
필드 | 설명 |
|---|---|
심각도 (Severity) | 자세한 내용은 경고 계층을참조하십시오. |
알려주는 정보 | 경고의 운영 의미입니다. |
PromQL | 예시 표현식. 지표 이름을 사용하는 환경에 맞게 조정합니다. |
임계값 이유 | 주어진 임계값의 이유입니다. |
첫 번째 응답 | 호출 엔지니어가 취해야 할 조치입니다. |
먼저 페이지 계층에 대한 경고를 구성합니다. 이 경고를 일주 동안 실행하고 경고에 대한 오탐 임계값을 조정합니다. 나중에 티켓 및 워치 경고를 추가합니다.
경고 계층
계층 | 경고 시기 |
|---|---|
페이지 | 고객에게 보이는 영향이 이미 발생했거나 발생할 예정입니다. 가능한 한 빨리 이 경고를 해결하세요. |
티켓 | 운영 성능 저하. 수시간 내에 해결합니다. |
시계 | 대시보드에서 유용하거나 추세 분석에 유용합니다. 바로 조치할 필요가 없습니다. |
페이지 계층
다음 경고는 고객에게 보이는 영향을 나타내며 즉시 조치가 필요합니다.
mongot 프로세스가 중단되었습니다.
mongot Prometheus 지표 가져오기에 응답하지 않습니다. 검색 및 벡터 검색이 정상적으로 작동하지 않습니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
up{job="mongot"} == 0
기간을 1분으로 설정합니다.
잠시 연결이 끊어지는 일시적인 네트워크 오류일 수 있습니다. 1분 이상 지속되는 부재는 장애입니다.
mongot을 실행하는 방식에 따라 다음 명령 중 하나를 실행하여 이 경고에 응답합니다.
Kubernetes를 사용하는 배포서버에서
kubectl get pods을 실행합니다.systemd을 사용하는 배포서버의 경우systemctl status mongot을 실행합니다.Docker를 사용하는 배포의 경우
docker ps를 실행합니다.
충돌 원인은 로그에서 확인합니다. 문제 해결 단계는 mongot 로그 및 FTDC를 참조하십시오.
충돌 루프
프로세스가 계속 다시 시작됩니다. 배포가 불안정합니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
changes(mongot_process_start_time_seconds[10m]) > 3
10 분 이내에 세 번 이상 다시 시작되면 충돌 루프입니다. 충돌 루프는 일시적 실패가 아니라 해결해야 합니다.
다음 조치를 수행하여 이 경고에 응답합니다.
가장 최근 충돌 창에서 로그를 캡처합니다.
중지된 포드 또는 프로세스를 검사할 수 있도록 자동 재시작을 일시 중단합니다.
FTDC 캡처를 엽니다.
복제 지연이 무한정 증가합니다.
mongot mongod을 지원할 수 없습니다. 검색 결과가 점점 오래됩니다. 복제 지연이 개선되지 않으면 커서가 oplog에서 벗어나 전체 다시 동기화를 강제합니다.
다음 PromQL 표현식 중 하나를 사용하여 이 조건에 대한 경고를 설정합니다.
max(mongot_index_stats_indexing_replicationLagMs) > 60000
또는 절대 임계값에 도달하기 전에 증가 추세를 포찱하려면 다음을 사용합니다.
deriv(max(mongot_index_stats_indexing_replicationLagMs)[15m:1m]) > 500
이 지표는 인덱스 단위로 밀리초 단위입니다. PromQL에서 지표를 1000 로 나누지 마십시오. 정상 상태 지연은 1초 미만입니다. 잡아내기 시나리오의 경우 1분 지연은 허용됩니다. 지연이 계속 증가하면 경고 상태입니다.
mongot_index_stats_* 지표 패밀리는 적어도 하나의 검색 인덱스가 존재할 때만 표시됩니다. 인덱스가 없는 새 배포서버에서는 시리즈가 아직 존재하지 않으므로 이 경고가 표시되지 않습니다. 이는 예상되는 동작입니다.
다음 조치를 수행하여 이 경고에 응답합니다.
mongod쓰기 (write) 속도의 급격한 상승을 확인합니다.mongotCPU 및 디스크 I/O의 포화 여부를 확인합니다.
동기화 예외 발생
mongot 동기화 중 오류가 발생합니다. 예외가 계속 발생하면 다시 동기화를 수행해야 합니다. 다시 동기화 중에는 인덱스를 일시적으로 사용할 수 없거나 오래된 상태일 수 있습니다.
다음 PromQL 표현식 중 하나를 사용하여 이 조건에 대한 경고를 발생시킵니다.
동기화 중 오류를 기반으로 경고하려면 다음을 사용합니다.
increase(mongot_index_stats_indexing_steadyStateExceptions_total[10m]) > 0
초기 동기화 예외를 찾으려면 다음을 사용합니다.
increase(mongot_index_stats_indexing_initialSyncExceptions_total[10m]) > 0
생산에서 어떤 정상 상태 예외도 문제입니다. oplog가 롤오버되었습니다. 이는 mongod oplog가 너무 작거나 mongot 가 너무 느린 경우이거나 하위 오류가 발생했을 의미합니다.
다음 조치를 수행하여 이 경고에 응답합니다.
예외 주변에서
mongot로그를 캡처합니다.mongodoplog 크기를 확인합니다.FTDC 캡처를 즉시 열어요. 사후에 그 원인을 판단하기가 더 억려워집니다.
힙 고갈임박
JVM 힙이 한계에 다다랐습니다. OutOfMemoryError 이 곳 발생할 예정입니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
sum(mongot_jvm_memory_used_bytes{area="heap"}) / sum(mongot_jvm_memory_max_bytes{area="heap"} > 0) > 0.85
기간을 5분으로 설정합니다.
85%이상의 지속된 힙 사용량은 문제를 일으키습니다. 다음 할당 스파이크는 메모리 부족 오류를 일으키습니다. mongot 은 기본적으로 G1(Garbage-First) 가비지 컬렉션을 사용합니다. 다음 표현식은 위 PromQL 표현식의 더 정밀한 게시 GC 버전입니다.
mongot_jvm_gc_live_data_size_bytes / mongot_jvm_gc_max_data_size_bytes > 0.85
활성 인덱싱 작업과 쿼리 로드를 확인하여 이 경고에 응답합니다. 큰 인덱스가 빌드되고 있는 경우 빌드가 완료되면 조건이 해결될 수 있습니다. 그렇지 않은 경우 -Xmx 힙 설정을 늘리거나 동시 작업 수를 줄입니다.
디스크 채우기 및 mongot 자기 보호 연쇄
mongot dataPath 볼륨의 디스크 사용에 대해 세 개의 임계값을 시행합니다. 이러한 임계값은 mongot 바이너리 자체에서 시행됩니다. 임계값은 모니터링 여부와 관계없이 적용됩니다. 세 개의 임계값 모든 부분에 경고를 설정하여 호출 엔지니어가 연쇄 현상을 확인하고 최종 임계값을 초과하기 전에 조치를 취할 수 있도록 합니다.
사용된 디스크 | mongot 작업 | 고객에게 보이는 영향 | 심각도 (Severity) |
|---|---|---|---|
85% (15% 자유) |
| 새 인덱스가 생성된 경우에만 표시됩니다. 기존 검색과 벡터 검색은 정상적으로 계속됩니다. | 티켓 |
90% (10% 자유) |
| 검색 결과가 | 페이지 |
95% (5% 자유) |
| 모든 검색 및 벡터 검색을 사용할 수 없습니다. | 페이지 |
이 경고에는 세 개의 규칙이 있습니다. 각 임계점에서 심각도가 에스칼레이트됩니다.
다음 PromQL 표현식을 사용하여 이러한 조건에 대한 경고를 발성시킵니다.
85% - 티켓 수준:
(1 - mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes) >= 0.85
90% — 페이지 수준:
(1 - mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes) >= 0.90
95% — 페이지 수준(장애):
(1 - mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes) >= 0.95
mongot /metrics 엔드포인트는 _free_bytes 와 _total_bytes을 노출합니다. 사용된 계산 비율을 1 - free/total로 지정합니다.
다음 조치를 수행하여 이 경고에 응답합니다.
85%: 검색 인덱스 관리 API를 통해 사용하지 않는 인덱스를 감사하고 제거하다.
dataPath아래의 파일을 수동으로 삭제하지 마십시오. 디스크 사용량이 85%미만으로 떨어지기 전까지는 새 인덱스가 빌드되지 않습니다.90%: 클러스터가 복제 비활성화 상태이면 작업 또는 SRE 팀에게 경고합니다. 사용하지 않는 인덱스를 제거하거나 저장 공간을 확장하여 복제를 복원합니다.
95%: 이는 장애입니다. 디스크 공간을 확보한 후
mongot을 다시 시작합니다. 디스크 공간이 확보되기 전에는mongot가 정상적으로 다시 시작되지 않습니다.
티켓 계층
다음 경고는 운영 성능 저하를 나타내며 수시간 내에 해결해야 합니다.
지속되는 쿼리 지연 시간 성능 저하
사용자의 검색 속도가 느린 경우가 있습니다.
다음 PromQL 표현식 중 하나를 사용하여 이 조건에 대한 경고를 설정합니다.
교차 인덱스:
max(mongot_command_searchCommandTotalLatency_seconds{quantile="0.99"}) > <your-SLO-threshold>
인덱스별 분해:
max(mongot_index_stats_query_searchResultBatchLatencies_seconds{quantile="0.99"}) by (indexId_logString) > <your-SLO-threshold>
임계값은 서비스 수준 목표에 따라 다릅니다. 일반적인 시작 지점은 $search 의 경우 500 백분위가 99백분위이고 $vectorSearch의 경우 1초입니다. 이 시리즈는 백분위가 아닌 미리 구성된 quantile 레이블이 있는 요약입니다.
다음을 조사하여 이 경고에 응답하세요.
실행자 큐 깊이.
JVM 가비지 컬렉션 일시 중지 시간.
병목을 식별하기 위한 저장 IOPS.
실행자 푸린 포화
작업자가 포화되어 있고 작업이 대기 중입니다. 쿼리 지연 시간이 증가할 예정입니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
max({__name__=~"mongot_.+_executor_queued_tasks"}) > 10
기간을 5분으로 설정합니다.
부하 스파이크 시 작은 단기 큐는 정상입니다. 지속된 큐는 작업자 용량이 작다는 의미입니다. 일반적인 핫스팟 푸릴은 다음과 같습니다.
mongot_decoding_executormongot_change_stream_sync_dispatcher_executormongot_indexing_work_executormongot_indexing_lifecycle_executormongot_index_commit_executor
인덱싱 작업은 여러 특수화된 풀에 걸쳐 분할됩니다. 결합된 mongot_indexing_executor은 없습니다.
줄을 서고 있는 풀을 식별하여 이 경고에 응답합니다.
topk(5, sum by (__name__) ({__name__=~"mongot_.+_executor_queued_tasks"}))
푸를 확장하거나 푸 크기를 늘립니다. 쿼리 지연 시간이 증가하기 전에 대기 크기 램은 초기 경고를 제공합니다.
저장 조언: 지속되는 IOPS
저장 볼륨이 가득 차 입니다. Lucene 지연 시간이 점점 디스크 제한이 됩니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
rate(mongot_system_disk_reads_events{name="<dataPath device>"}[5m]) > 1000
기간을 15 분으로 설정합니다.
1,000 IOPS 임계값은 저장 클래스 권장 플래그입니다. 하지만 엄격한 제한은 아닙니다. 올바른 수는 장치에 따라 다릅니다. df 을 사용하거나 mongot_system_disk_* 레이블 값을 검사하여 dataPath 장치를 식별합니다.
병합 또는 초기 동기화가 진행 중인지 확인하여 이 경고에 응답합니다. 높은 IOPS 수준이 유지되면 저장 클래스가 작은 경우일 가능성이 높습니다. 저장 구성을 다시 검토하세요.
저장 조언: 페이지 오류 발생률
OS가 캐시에서 제거된 인덱스 페이지를 디스크에서 계속 가져오고 있습니다. 메모리가 제한 사항이지 저장 용량이 아닙니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
rate(mongot_system_process_majorPageFaults_operations[5m]) > 1000
1,000 초당 주요 결함은 중요 경로의 메모리 부하에 대한 표준 임계값입니다. 지속된 IOPS와 함께 이것은 작업 세트에 대핕 메모리 부족의 신호입니다.
Lucene은 인덱스 파일을 메모리에 매핑하므로 메모리를 추가하여 이 경고에 응답합니다.
인덱싱 실패 비영
특정 인덱스에서 중대한 인덱싱 실패가 발생했습니다.
다음 PromQL 표현식 중 하나를 사용하여 이 조건에 대한 경고를 설정합니다.
increase(mongot_lifecycle_failedInitializationIndexes_total[10m]) > 0
또는:
increase(mongot_indexing_steadyStateChangeStream_unexpectedBatchFailures_total[10m]) > 0
또는:
increase(mongot_index_stats_indexing_invalidGeometryField_total[10m]) > 0
이 카운터는 일반 부하에서 증가하지 않습니다. 증가는 다음과 같은 데이터 문제를 나타냅니다.
매핑 폭발.
크기가 지친 문서.
유효하지 않은 문서.
이러한 카운터의 증가는 코드 경로 문제를 나타내는 경우도 있습니다.
다음 조치를 수행하여 이 경고에 응답합니다.
영향을 받은 인덱스와 이유의 레이블을 검사합니다.
기본 예외에 대한
mongot로그를 확인하세요.
임베딩 채널 중단
자동 임베딩에 문제가 발생합니다. 인덱싱 프로세스가 영향을 받은 인덱스에 새 문서에 대해 중단됩니다.
다음 PromQL 표현식 중 하나를 사용하여 이 조건에 대한 경고를 설정합니다.
increase(mongot_indexing_steadyStateChangeStream_rescheduledEmbeddingGetMores_total[10m]) > 0
또는:
increase(mongot_initialsync_queue_requeuedEmbeddingInitialSyncs_total[10m]) > 0
지속적인 재스케줄링 또는 재주입는 임베딩 경로가 정리되지 않음을 나타냅니다. 가장 일반적인 원인은 다음과 같습니다.
An invalid API key.
연결할 수 없는 네트워크 엔드포인트.
Voyage AI 속도 제한.
다음 조치를 수행하여 이 경고에 응답합니다.
임베딩 엔드포인트에 대한 HTTP 오류는
mongot로그에서 확인할 수 있습니다.API 키의 유효성과 연결을 확인합니다.
Voyage AI 상태 확인.
강제 인덱스 상태 전환
하나 이상의 인덱스가 STEADY 상태에서 복구, 오래된 상태 또는 실패 상태로 전환되었습니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
count by (status) (mongot_index_stats_indexStatusCode{status!="STEADY"} == 1) > 0
배포서버 동안 RECOVERING_TRANSIENT 에서 인덱스 하나가 몇 초 동안 있는 것은 정상입니다. 다음 상태 중 하나라도 영이 아닌 값이 계속되면 문제가 있다는 의미입니다.
FAILED.RECOVERING_NON_TRANSIENT.STALE.
영향을 받은 indexId_logString 을 식별하고 해당 mongot 로그 줄을 확인하여 이 경고에 응답합니다.
FTDC 실행자 실패
진단 캡처 파이프라인이 실패하고 있습니다. mongot 은 그 외에는 정상이지만 해당 노드에 대한 과찰 가능이 상실되었습니다.
참고
이 지표는 ftdcExecutorMetricsToPrometheus 기능 플래그 뒤에 게이트됩니다. 이 경고를 추가하기 전에 배포서버에서 이 지표를 노출하는지 확인하세요. 지표는 기본 mongodb/mongodb-community-search 스크래합에서 존재하지 않습니다. 기본적으로 이 플래그는 자체 관리형 배포서버에서 해제됩니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
mongot_mongot_ftdc_executor_failure_total > 0
기간을 5분으로 설정합니다.
배포서버가 이 지표를 노출하는 경우, 하위 관측 가능성이 저하되었다는 심각한 신호로 간주하십시오.
mongot을 다시 시작하여 이 경고에 응답합니다.
계층 보기
다음 지표는 추세 분석을 위한 대시보드에 유용합니다. 이 지표 중 어느 것도 페이징이 필요하지 않습니다.
힙 활용(게시 GC)
이 지표는 시간에 따른 가버지 컬렉션 후 힙 활용률을 보여줍니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
sum(mongot_jvm_gc_live_data_size_bytes) / sum(mongot_jvm_gc_max_data_size_bytes)
지표가 주마다 상승하는지 조사하여 이 경고에 응답합니다.
GC 일시 중지 시간
이 지표는 수집기 전체에서 가장 최근에 발생한 일시 중지 시간을 나타냅니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
max(mongot_jvm_gc_pause_seconds_max)
이 지표가 100 ms 동안 유지되는지 조사하여 이 경고에 응답합니다.
열린 파일 디스크립터
지표는 열린 파일 설명자의 소프트 제한에 대한 여유를 보여줍니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
mongot_process_*
이 지표가 80% 이상인지 조사하여 이 경고에 응답하세요.
커서 시간 초과
이 지표는 타임아웃 이후 커서를 보유한 클라이언트 수를 나타냅니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
rate(mongot_cursorManager_trackedCursors[5m])
이 지표에 대한 경고 임계값을 설정할 필요가 없습니다. 순수히 정보제공용.
연결 풀 대기
이 지표는 연결을 기다리는 스레드 수를 나타냅니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
mongot_mongoClient_connectionPool_connectionsCheckedOut approaching _maxSize
지표가 지속되고 영보다 큰지 조사하여 이 경고에 응답합니다.
디스크 자유 율
이 지표는 저장 용량을 보여줍니다.
다음 PromQL 표현식을 사용하여 이 조건에 대한 경고를 설정합니다.
mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes
이 지표가 30% 자유 미만으로 내려가면 저장 공간 증가를 위한 계획 대화를 고려해야 합니다.