Recopilación de métricas personalizadas de MongoDB

Información general

Para recopilar métricas personalizadas con la integración MongoDB, utiliza la opción custom_queries en el archivo conf.d/mongo.d/conf.yaml en la raíz del directorio de configuración de tu Agent. Para ver más detalles, consulta el mongo.d/conf.yaml de ejemplo.

Configuración

Estas son las opciones de las custom_queries:

  • metric_prefix: Cada métrica comienza con el prefijo elegido.
  • query: Es la consulta Mongo runCommand a ejecutar como un objeto JSON. Nota: El Agent sólo admite las consultas count, find y aggregates.
  • database: Es la base de datos MongoDB de la que recopilar métricas.
  • **fields: Se ignora en las consultas a count. Se trata de una lista que representa cada campo sin un orden específico. Ignora los campos no especificados y los que faltan. Hay tres datos obligatorios para cada fields:
    • field_name: Es el nombre del campo del que obtener los datos.
    • name: Es el sufijo que se añade al prefijo de la métrica para formar el nombre completo de la métrica. Si type es tag, esta columna se trata como etiqueta (tag) y se aplica a cada métrica recopilada por esta consulta concreta.
    • type: Es el método de envío (gauge, count, rate y más). También se puede definir como tag para etiquetar cada métrica de la fila con el nombre y el valor del elemento de esta columna. Puedes utilizar el tipo count para realizar agregaciones para consultas que devuelven varias filas con la misma etiqueta o ninguna.
  • tags: Una lista de etiquetas para aplicar a cada métrica (según lo especificado anteriormente).
  • count_type: Sólo para consultas count, es el método de envío (gauge, count, rate y más) del resultado de recuento. Se ignora para las consultas que no son de recuento.

Ejemplos

Para los siguientes ejemplos se utiliza la siguiente recopilación user_collection de Mongo:

{ name: "foo", id: 12345, active: true, age:45, is_admin: true}
{ name: "bar", id: 67890, active: false, age:25, is_admin: true}
{ name: "foobar", id: 16273, active: true, age:35, is_admin: false}

Elige el tipo de consulta de la que quieres ver un ejemplo:

Para monitorizar cuántos usuarios están activos en un momento dado, tu comando de recuento de Mongo sería:

db.runCommand( {count: user_collection, query: {active:true}})

Que correspondería a la siguiente configuración YAML custom_queries dentro de tu archivo mongo.d/conf.yaml:

custom_queries:
  - metric_prefix: mongo.users
    query: {"count": "user_collection", "query": {"active":"true"}}
    count_type: gauge
    tags:
      - user:active

Esto emitiría una métrica gauge mongo.users con una etiqueta: user:active.

Nota: El tipo de métrica definido es gauge.

Para monitorizar la edad por usuario, tu comando de búsqueda de Mongo sería:

db.runCommand( {find: user_collection, filter: {active:true} )

Que correspondería a la siguiente configuración YAML custom_queries dentro de tu archivo mongo.d/conf.yaml:

custom_queries:
  - metric_prefix: mongo.example2
    query: {"find": "user_collection", "filter": {"active":"true"}}
    fields:
      - field_name: name
        name: name
        type: tag
      - field_name: age
        name: user.age
        type: gauge

Esto emitiría una métrica gauge mongo.example2.user.age con dos etiquetas: name:foo y name:foobar.

Nota: El tipo de métrica definido es gauge.

Para monitor el promedio de edad de un usuario administrador y de un usuario no administrador, tu comando de agregado de Mongo sería:

db.runCommand(
              {
                'aggregate': "user_collection",
                'pipeline': [
                  {"$match": {"active": "true"}},
                  {"$group": {"_id": "$is_admin", "age_avg": {"$avg": "$age"}}}
                ],
                'cursor': {}
              }
            )

Que correspondería a la siguiente configuración YAML custom_queries dentro de tu archivo mongo.d/conf.yaml:

custom_queries:
  - metric_prefix: mongo.example3
    query: {"aggregate": "user_collection","pipeline": [{"$match": {"active": "true"}},{"$group": {"_id": "$is_admin", "age_avg": {"$avg": "$age"}}}],"cursor": {}}
    fields:
      - field_name: age_avg
        name: user.age
        type: gauge
      - field_name: _id
        name: is_admin
        type: tag
    tags:
      - test:mongodb

Esto emitiría una métrica gauge mongo.example3.user.age con dos etiquetas: is_admin:true y is_admin:false que representan el promedio de edad de los usuarios para cada etiqueta.

Nota: Después de actualizar el archivo YAML de Mongo, reinicia el Datadog Agent.

Validación

Para verificar el resultado, busca las métricas utilizando el Explorador de métricas.

Depuración

Ejecuta el subcomando de estado del Agent y busca mongo en la sección Checks. Además, los logs del Agent pueden proporcionar información útil.

Referencias adicionales

Más enlaces, artículos y documentación útiles: