No utilice MongoDB Perfilado Nivel 1

TLDR: No es el nivel de perfil 1 el problema; Es un problema con el argumento opcional de «ralentización» que hace que los usuarios configuren accidentalmente un registro detallado y llenen su disco con archivos de registro.

En MongoDB, hay dos formas de ver, con detalles individuales, qué operaciones se han realizado y cuánto tiempo han tardado.

  • perfilado. Guarde los detalles de la operación en una colección limitada sistema.perfil. Acceda a esta información a través de una conexión mongodb.
  • Líneas de registro del tipo de componente «COMANDO» en archivos de registro mongod. (También Mongos v4.0 + archivo de registro). Deberá acceder a los archivos como usuario de Unix o Windows y trabajar con ellos como texto.

El perfil es económico, pero se limita a mantener solo una pequeña instantánea. Él tiene niveles: 0 (apagado), 1 (slowOp (s) solamente), 2 (todos).

El registrador (archivo de registro) también tiene niveles por sí mismo, pero no hay «apagado». Incluso en el nivel 0, imprime cada operación lenta en una línea de registro de «COMANDO». «Lento» se define por la configuración slowOpThresholdMs opción (originalmente «slowMS»). Es 100 ms por defecto, que es un buen valor predeterminado en mi opinión.

Problemas de usabilidad

Log-or-not y profile-or-not son sistemas no relacionados con el usuario, pero comparten la misma variable global para «lento»: serverGlobalParams.slowMS

La autopsia básica será:

  • Alguien usó db.setProfilingLevel (1 / * slowOp * /, 0 / * ms * /) para iniciar el proceso de todas las operaciones (NO HAGA ESTO; use db.setProfilingLevel (2 / * all * /) en su lugar).
  • El registrador comienza a escribir cada comando en los archivos de registro.
  • Ejecutaron db.setProfilingLevel (0 / * off * /) para deshabilitar el generador de perfiles.
  • El registrador continúa escribiendo cada comando en los archivos de registro porque slowMS siempre es 0ms.
  • El DBA es paginado después de horas a medida que el disco se llena con el archivo de registro y pensó ‘oh, debería haber configurado la rotación de registros en ese servidor; lo haré esta mañana’.
  • El DBA se despierta en las primeras horas de la mañana porque el disco lleno también elimina el nuevo nodo principal.

Así que aquí está el consejo: mientras se mejore MongoDB para tener opciones separadas de umbral de lente lenta para el generador de perfiles, nunca use db.setProfilingLevel (1, …). Incluso si Vos si conocer al jefe, alguien aprende sobre tu hombro no la veas

Qué hacer en su lugar:

  • Usar unicamente db.setProfilingLevel(0 /*off*/) <-> db.setProfilingLevel(2 /*all*/) y no toca slowms
    • Todavía hay un caso de uso válido para el uso del perfilador de nivel 1, pero si no asume la responsabilidad de mantener la interdependencia del código del archivo de registro en el valor de slowMS, no vaya.
  • Si desea que el registrador imprima las líneas de «COMANDO» para cada comando, incluidas las velocidades, use db.setLogLevel(1, "command"). Y correr db.setLogLevel(-1, "command") volver a sembrar. “Usar el nivel de registro 1, no el nivel de perfil 1” podría ser casi la frase de este artículo.
    (db.setLogLevel (1) + db.setLogLevel (0) es una alternativa a la anterior, pero es un método más antiguo y más convincente).
  • Si desea configurar el sampleRate, puede hacerlo sin cambiar el nivel (o ‘ralentizar’) con el siguiente comando: db.setProfilingLevel (db.getProfilingStatus (). Was, {«sampleRate»: })
  • Si desea un umbral diferente para slowMS de forma permanente, utilice el slowOpThresholdMs opción en el archivo de configuración, pero también puede hacerlo dinámicamente según las instrucciones anteriores de sampleRate.

Algunas otras cosas que hacer con la creación de perfiles y el registro:

  • El nivel del registrador es global; el valor slowOpThresholdMs, también conocido como slowMS, es global, pero el nivel de perfil es por espacio de nombres de base de datos.
  • Todo lo anterior es local solo para los comandos mongod (o mongos) que se ejecutan/el archivo de configuración está instalado. Ejecutarlo en un primario no cambia los secundarios, y ejecutarlo en un mongos no cambia los nodos de shard o replicaset de configsvr.
  • Los nodos de Mongolia proporcionan solo un subconjunto de estas características de diagnóstico. No tienen su propia colección, por lo que, para empezar, no pueden crear una colección system.profile.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario