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:
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:
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:
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:
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:
Añadimos el exporter de MongoDb indicando el usuario y password de monitorización:
Comprobamos que se haya añadido el exporter:
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