Esta página proporciona un conjunto de alertas de Prometheus recomendadas para implementaciones autogestionadas de mongot. Las definiciones de alerta son puntos de partida. Puede copiar, adaptar y ajustar estas definiciones de alerta para que se ajusten a su carga de trabajo.
Cada entrada de alerta incluye los siguientes campos:
Campo | Descripción |
|---|---|
Gravedad | Para obtener más información, consulte Niveles de alerta. |
Qué le dice | Significado operativo de la alerta. |
PromQL | Ejemplos de expresiones. Adapta los nombres de las métricas a tu entorno. |
Lógica de umbral | Motivo del umbral dado. |
Primera respuesta | Acciones que el ingeniero de guardia debe tomar. |
Configure las alertas para el nivel de página primero. Ejecute estas alertas durante una semana y ajuste los umbrales de falsos positivos para las alertas. Más tarde, agregue alertas de ticket y de observación.
Niveles de alerta
Nivel | Cuándo alertar |
|---|---|
Página | El impacto visible para el cliente está ocurriendo o ya ocurrió o está a punto de ocurrir. Aborde esta alerta lo antes posible. |
ticket | Degradación operativa. Abordar en cuestión de horas. |
reloj | Útil en tableros o para análisis de tendencias. No se requiere ninguna acción inmediata. |
Nivel de página
Las siguientes alertas indican un impacto visible para el cliente y requieren atención inmediata.
El proceso de mongot está inactivo
mongot no responde a las recuperaciones de métricas de Prometheus. La búsqueda y la búsqueda vectorial no funcionan correctamente.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
up{job="mongot"} == 0
Establezca la duración en un minuto.
Una breve interrupción podría ser un error de red transitorio. Una ausencia sostenida de más de un minuto es una interrupción del servicio.
Responda a esta alerta ejecutando uno de los siguientes comandos según cómo ejecute su mongot:
Para las implementaciones que utilizan Kubernetes, ejecute
kubectl get pods.Para las implementaciones que utilizan
systemd, ejecutasystemctl status mongot.Para implementaciones que utilizan Docker, ejecute
docker ps.
Compruebe los registros para conocer la causa del bloqueo. Para conocer los pasos de solución de problemas, consulte registros de mongot y FTDC.
Bucle de bloqueo
El proceso se reinicia repetidamente. La implementación es inestable.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
changes(mongot_process_start_time_seconds[10m]) > 3
Más de tres reinicios en 10 minutos es un bucle de bloqueo. Los bucles de bloqueo no son un error temporal y deben abordarse.
Responda a esta alerta realizando las siguientes acciones:
Capture registros de la ventana de bloqueo más reciente.
Suspenda los reinicios automáticos para poder inspeccionar un pod o proceso detenido.
Abra una captura de FTDC.
Atraso de la replicación que crece sin límites
mongot no puede seguir el ritmo de mongod. Los resultados de la búsqueda están cada vez más desactualizados. Si el atraso de la replicación no se corrige, el cursor se cae del oplog y fuerza una resincronización completa.
Utilice una de las siguientes expresiones de PromQL para alertar sobre esta condición:
max(mongot_index_stats_indexing_replicationLagMs) > 60000
O, para detectar una tendencia creciente antes de que se alcance el umbral absoluto, utilice:
deriv(max(mongot_index_stats_indexing_replicationLagMs)[15m:1m]) > 500
Esta métrica es por índice y en milisegundos. No divida la métrica por 1000 en PromQL. El retraso en estado estable es inferior a un segundo. Un minuto de retraso es aceptable para escenarios de recuperación. Un retraso en constante crecimiento es la condición de alarma.
La familia de métricas mongot_index_stats_* solo está presente una vez que existe al menos un índice de búsqueda. En una implementación nueva sin índices, esta alerta no aparece porque la serie aún no existe. Este es un comportamiento esperado.
Responda a esta alerta realizando las siguientes acciones:
Comprueba la tasa de
mongodde guardar para detectar un pico repentino.Compruebe la CPU y la E/S de disco de
mongotpara ver si hay saturación.
Para obtener orientación, consulte Referencia de métricas para mongot.
Excepciones de sincronización que se producen
mongot está encontrando errores durante la sincronización. Las excepciones repetidas fuerzan una resincronización. Los índices no están disponibles temporalmente o no están actualizados durante la resincronización.
Utilice una de las siguientes expresiones de PromQL para alertar sobre esta condición.
Para alertar en función de los errores durante la sincronización, utilice:
increase(mongot_index_stats_indexing_steadyStateExceptions_total[10m]) > 0
Para detectar excepciones de sincronización inicial, utilice:
increase(mongot_index_stats_indexing_initialSyncExceptions_total[10m]) > 0
Cualquier excepción de estado estable en producción es un problema. El oplog se ha transferido, lo que significa que el oplog mongod es demasiado pequeño o mongot es demasiado lento, o se ha producido un error posterior.
Responda a esta alerta realizando las siguientes acciones:
Capture los registros
mongotalrededor de la excepción.Comprueba el tamaño del oplog de
mongod.Abra una captura FTDC inmediatamente. Es más difícil determinar la causa raíz después del hecho.
Agotamiento inminente del montón
El montón de JVM está cerca de su límite. Está a punto de producirse un OutOfMemoryError.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
sum(mongot_jvm_memory_used_bytes{area="heap"}) / sum(mongot_jvm_memory_max_bytes{area="heap"} > 0) > 0.85
Establezca la duración en cinco minutos.
El uso sostenido del montón por encima del 85% puede causar problemas. El siguiente pico de asignación puede causar un error de falta de memoria. mongot utiliza la recolección de elementos no utilizados Garbage-First (G1) por defecto. La siguiente expresión es una versión post-GC más precisa de la expresión PromQL anterior:
mongot_jvm_gc_live_data_size_bytes / mongot_jvm_gc_max_data_size_bytes > 0.85
Responde a esta alerta comprobando las operaciones de indexación activas y la carga de queries. Si se está compilando un índice grande, la condición puede resolverse cuando finalice la compilación. De lo contrario, aumenta la configuración del montón -Xmx o reduce el número de operaciones simultáneas.
Cascada de autoprotección de mongot y llenado de disco
mongot aplica tres umbrales en el uso del disco en el volumen dataPath. Estos umbrales se aplican en el propio binario mongot. Los umbrales surten efecto tanto si está supervisión como si no. Establezca alertas en los tres umbrales para que el ingeniero de guardia vea la cascada y pueda actuar antes de que se cruce el umbral final.
Disco utilizado | Qué hace mongot | Impacto visible para el cliente | Gravedad |
|---|---|---|---|
85% (15% libre) |
| Solo visible si se crea un nuevo índice. La búsqueda existente y la búsqueda vectorial continúan con normalidad. | ticket |
90% (10% libre) |
| Los resultados de la búsqueda no están actualizados con | Página |
95% (5% libre) |
| Toda la búsqueda y la búsqueda vectorial no están disponibles. | Página |
Esta alerta tiene tres reglas. La gravedad aumenta en cada umbral.
Utilice las siguientes expresiones de PromQL para alertar sobre estas condiciones:
85% - Nivel de ticket:
(1 - mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes) >= 0.85
90% — Nivel de página:
(1 - mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes) >= 0.90
95% — Nivel de página (interrupción del servicio):
(1 - mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes) >= 0.95
El punto de conexión mongot /metrics expone _free_bytes y _total_bytes. Calcule el porcentaje utilizado como 1 - free/total.
Responda a esta alerta realizando las siguientes acciones:
Al 85%: audite y descarte los índices no utilizados a través de la API de gestión de índices de búsqueda. Nunca borre archivos en
dataPathmanualmente. Los índices nuevos no se compilan hasta que el uso del disco caiga por debajo del 85%.En 90%: Alerta a tu equipo de operación o SRE de que el clúster se encuentra en estado de replicación deshabilitada. Descarte los índices no utilizados o amplíe el almacenamiento para restaurar la replicación.
Al 95%: Esto es una interrupción del servicio. Libere espacio en disco y, a continuación, reinicie
mongot.mongotse niega a reiniciarse limpiamente hasta que se libere el disco.
Nivel de ticket
Las siguientes alertas indican una degradación operativa y deben abordarse en cuestión de horas.
Degradación sostenida de la latencia de las query
Los usuarios experimentan búsquedas lentas.
Utilice una de las siguientes expresiones de PromQL para alertar sobre esta condición:
Índice cruzado:
max(mongot_command_searchCommandTotalLatency_seconds{quantile="0.99"}) > <your-SLO-threshold>
Desglose por índice:
max(mongot_index_stats_query_searchResultBatchLatencies_seconds{quantile="0.99"}) by (indexId_logString) > <your-SLO-threshold>
El umbral depende de su objetivo de nivel de servicio. Un punto de partida común es tener el percentil 99en 500 milisegundos para $search y un segundo para $vectorSearch. Estas series son resúmenes con etiquetas quantile predefinidas, no histogramas.
Responda a esta alerta investigando lo siguiente:
Profundidad de la cola del ejecutor.
Tiempo de pausa de la recolección de basura de JVM.
Almacenamiento de IOPS para identificar el cuello de botella.
Saturación del grupo de ejecutores
Los trabajadores están saturados y las tareas se están poniendo en cola. La latencia de las query está a punto de aumentar.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
max({__name__=~"mongot_.+_executor_queued_tasks"}) > 10
Establezca la duración en cinco minutos.
Una cola pequeña y breve es normal bajo picos de carga. Una cola sostenida significa que la capacidad del trabajador es insuficiente. Los grupos de puntos de acceso comunes son:
mongot_decoding_executormongot_change_stream_sync_dispatcher_executormongot_indexing_work_executormongot_indexing_lifecycle_executormongot_index_commit_executor
El trabajo de indexación se divide en varios grupos especializados. No hay mongot_indexing_executor combinado.
Responda a esta alerta identificando qué grupo está en cola:
topk(5, sum by (__name__) ({__name__=~"mongot_.+_executor_queued_tasks"}))
Escale o aumente el tamaño del grupo. La rampa de profundidad de la cola proporciona una advertencia temprana antes de que aumente la latencia de la query.
Asesoramiento de almacenamiento: IOPS sostenidas
El volumen de almacenamiento se está acercando a la saturación. La latencia de Lucene está cada vez más ligada al disco.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
rate(mongot_system_disk_reads_events{name="<dataPath device>"}[5m]) > 1000
Establezca la duración en 15 minutos.
El umbral de IOPS 1,000 es el indicador de recomendación de clase de almacenamiento. Sin embargo, no es un límite estricto. El número correcto depende de su dispositivo. Identifique su dispositivo dataPath con df o inspeccionando los valores de la etiqueta mongot_system_disk_*.
Responda a esta alerta comprobando si hay una fusión o una sincronización inicial en curso. Si el nivel de IOPS alto se mantiene, es probable que la clase de almacenamiento sea demasiado pequeña. Vuelva a revisar la configuración de almacenamiento.
Asesoramiento sobre almacenamiento: tasa de fallos de página
El sistema operativo extrae repetidamente páginas de índice del disco porque se han expulsado de la caché. La memoria es la restricción, no la capacidad de almacenamiento.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
rate(mongot_system_process_majorPageFaults_operations[5m]) > 1000
1,000 fallos importantes por segundo es el umbral canónico para la presión de la memoria en la ruta crítica. Junto con las IOPS sostenidas, esta es la señal de escasez de memoria en relación con el conjunto de trabajo.
Responda a esta alerta agregando memoria porque Lucene asigna archivos de índice a la memoria.
Errores de indexación distintos de cero
Un índice específico encontró un error de indexación no trivial.
Utilice una de las siguientes expresiones de PromQL para alertar sobre esta condición:
increase(mongot_lifecycle_failedInitializationIndexes_total[10m]) > 0
O:
increase(mongot_indexing_steadyStateChangeStream_unexpectedBatchFailures_total[10m]) > 0
O:
increase(mongot_index_stats_indexing_invalidGeometryField_total[10m]) > 0
Estos contadores no se incrementan con una carga normal. Un aumento indica un problema de datos como:
Una explosión de mapeo.
Un documento de gran tamaño.
Un documento no válido.
Un aumento en estos contadores también podría indicar un problema de ruta de código.
Responda a esta alerta realizando las siguientes acciones:
Inspeccione las etiquetas del índice afectado y el motivo.
Compruebe los registros
mongotpara ver la excepción subyacente.
Interrupción del canal de incrustación
La incrustación automatizada está experimentando problemas. El proceso de indexación se detiene para los nuevos documentos en los índices afectados.
Utilice una de las siguientes expresiones de PromQL para alertar sobre esta condición:
increase(mongot_indexing_steadyStateChangeStream_rescheduledEmbeddingGetMores_total[10m]) > 0
O:
increase(mongot_initialsync_queue_requeuedEmbeddingInitialSyncs_total[10m]) > 0
La reprogramación o la nueva puesta en cola sostenidas indican que la ruta de incrustación no se está drenando correctamente. Las causas más comunes son:
An invalid API key.
Un punto de conexión de red inalcanzable.
Límite de velocidad de Voyage AI.
Responda a esta alerta realizando las siguientes acciones:
Compruebe los registros de
mongotpara ver el error HTTP en el endpoint de incrustación.Verifique la validez y la conectividad de la clave de API.
Compruebe el estado de Voyage AI.
Transición de estado de índice forzada
Uno o más índices pasaron del estado STEADY a un estado de recuperación, obsoleto o fallido.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
count by (status) (mongot_index_stats_indexStatusCode{status!="STEADY"} == 1) > 0
Un único índice en RECOVERING_TRANSIENT durante unos segundos durante la implementación es normal. Un recuento sostenido superior a cero en cualquiera de los siguientes estados indica un problema:
FAILED.RECOVERING_NON_TRANSIENT.STALE.
Responda a esta alerta identificando el indexId_logString afectado y verificando las líneas de registro de mongot correspondientes.
Error del ejecutor de FTDC
El pipeline de captura de diagnósticos está fallando. mongot está sano, pero ha perdido la observabilidad de ese nodo.
Nota
Esta métrica está protegida por la funcionalidad ftdcExecutorMetricsToPrometheus. Confirme si su implementación expone esta métrica antes de agregar esta alerta. La métrica está ausente de los scrapes mongodb/mongodb-community-search por defecto. Por defecto, esta funcionalidad está desactivada para las implementaciones autogestionadas.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
mongot_mongot_ftdc_executor_failure_total > 0
Establezca la duración en cinco minutos.
Si su implementación expone esta métrica, trátela como una señal grave de que la observabilidad descendente está degradada.
Responda a esta alerta reiniciando mongot.
Nivel de reloj
Las siguientes métricas son útiles en los tableros para el análisis de tendencias. Ninguna de estas métricas requiere paginación.
Utilización del montón (post-GC)
Esta métrica muestra la utilización del montón después de la colección de elementos no utilizados a lo largo del tiempo.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
sum(mongot_jvm_gc_live_data_size_bytes) / sum(mongot_jvm_gc_max_data_size_bytes)
Responda a esta alerta investigando si la métrica aumenta durante semanas.
Tiempo de pausa de GC
Esta métrica muestra la peor pausa reciente en todos los recopiladores.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
max(mongot_jvm_gc_pause_seconds_max)
Responda a esta alerta investigando si esta métrica se mantiene durante 100 ms.
Descriptores de archivo abiertos
La métrica muestra el margen con respecto al límite flexible para los descriptores de archivos abiertos.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
mongot_process_*
Responda a esta alerta investigando si esta métrica supera el 80%.
Tiempos de espera del cursor
Esta métrica muestra el número de clientes que tienen cursores más allá del tiempo de espera.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
rate(mongot_cursorManager_trackedCursors[5m])
No es necesario establecer un umbral de alerta para esta métrica. Puramente informativo.
Espera del pool de conexiones
Esta métrica muestra el número de subprocesos que esperan una conexión.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
mongot_mongoClient_connectionPool_connectionsCheckedOut approaching _maxSize
Responda a esta alerta investigando si la métrica es sostenida y mayor que cero.
Porcentaje de disco libre
Esta métrica muestra la capacidad de almacenamiento.
Utiliza la siguiente expresión PromQL para alertar sobre esta condición:
mongot_system_disk_space_data_path_free_bytes / mongot_system_disk_space_data_path_total_bytes
Si esta métrica cae por debajo del 30% libre, considere tener una conversación de planificación para aumentar el almacenamiento.