Esta pagina se ve mejor con JavaScript habilitado

PMM2 MongoDB

 ·  🎃 kr0m

Monitorizar nuestras bases de datos MongoDb con PMM nos permitirá identificar fácilmente slow queries, cuellos de botella, tasas de errores y muchas otras métricas mas, todo esto nos resultará de utilidad para encontrar bugs o queries potencialmente optimizables.

Continuando con la instalación básica vamos a montar la monitorización, el único requisito es tener una versión de MongoDb >= 3.2.

Accedemos a la CLI de MongoDb para crear el usuario de monitorización:

mongo -u “admin” -p “PASSWORD” --authenticationDatabase “admin”

Creamos el usuario de monitorización:

use admin
db.getSiblingDB("admin").createUser({
    user: "pmm",
    pwd: "PASSWORDMONIT",
    roles: [
        { role: "clusterMonitor", db: "admin" },
        { role: "readAnyDatabase", db: "admin" }
    ]
})

Si queremos una monitorización básica simplemente añadimos el exporter:

pmm-admin add mongodb --username=pmm --password=PASSWORDMONIT

Pero si queremos utilizar el query analyzer de Percona tendremos que habilitar el log de las queries, para ello tendremos que arrancar MongoDb con ciertos parámetros:

mongod --dbpath=DATABASEDIR --profile 1 --slowms 200 --slowOpSampleRate 0.2

Los parámetros son los siguientes:

  • profile: Si su valor es 0 no se realizará profiling alguno, si su valor es 1 se logearán las queries que tarden mas de slowms, si su valor es 2 se logearán todas las queries.
  • slowms: Umbral a partir del cual se logeará la query si profile está a 1.
  • slowOpSampleRate: Valor de 0 a 1, indica el ratio de slowqueries a logear.

Estos parámetros se pueden indicar en el fichero de configuración de MongoDb:

vi /etc/mongodb.conf

operationProfiling:
    mode: slowOp
    slowOpThresholdMs: 200
    slowOpSampleRate: 0.2

El parámetro mode permite varios valores:

  • off: Logging de queries deshabilitado
  • slowOp: Se logean solo las queries slow
  • all: Se logean todas las queries

Reiniciamos el servicio:

/etc/init.d/mongodb restart

Añadimos el exporter de MongoDb indicando el usuario y password de monitorización:

pmm-admin add mongodb --username=pmm --password=PASSWORDMONIT

Comprobamos que se haya añadido el exporter:

pmm-admin list

Service type  Service name         Address and port  Service ID
MySQL         kr0mtest-mysql       127.0.0.1:3306    /service_id/d3a76048-ea77-4016-9614-d116a6017f05
MongoDB       kr0mtest-mongodb     127.0.0.1:27017   /service_id/947e3cd6-1c07-4da2-a762-6e8ee6350264

Agent type                  Status     Agent ID                                        Service ID
pmm_agent                   Connected  /agent_id/70831d60-cca4-43dc-9ac1-ed6e24ea69dc  
node_exporter               Running    /agent_id/7afe5727-f389-4382-a8a9-3d345a012d74  
mysqld_exporter             Running    /agent_id/da7bce4d-6a68-462f-aaff-5bc58bd18ff9  /service_id/d3a76048-ea77-4016-9614-d116a6017f05
mongodb_exporter            Running    /agent_id/5199dd25-f027-48c3-986c-e6fc00f12fc1  /service_id/947e3cd6-1c07-4da2-a762-6e8ee6350264
mysql_slowlog_agent         Running    /agent_id/67b8b836-d63c-42e6-b124-58b6415a697d  /service_id/d3a76048-ea77-4016-9614-d116a6017f05
mongodb_profiler_agent      Running    /agent_id/f7fff282-50cd-46c0-8e65-62633d82b160  /service_id/947e3cd6-1c07-4da2-a762-6e8ee6350264

Las alertas de Prometheus serían las siguientes:

- name: mongoDbRules
  rules:
  - alert: BrokenMongoDBExporter
    expr: up{service_type="mongodb"} == 0
    for: 5m
    labels:
      severity: critical

En targets podemos ver el exporter:

En Grafana las gáficas de las métricas:

Podemos ver las queries en el query analytics:

Si paramos el servicio vemos la alerta:

Si hemos seguido la guía sobre Alertmanager veremos en Telegram alertas como esta:

La monitorización normal en PMM funciona en base a un exporter que se instala en el servidor, pero si no tenemos acceso a este servidor cabe la posibilidad de monitorizar la base datos mediante un acceso a la base de datos:

PMM2: Remote services monitoring – monitor MySQL, PostgreSQL, and MongoDB from PMM Server without the need for client installation

Si te ha gustado el artículo puedes invitarme a un RedBull aquí