Percona Monitoring and Management
(PMM)
e' una piattaforma Open Source per il monitoraggio dei Database.
Inizialmente sviluppata per MySQL, ed ovviamente anche per i fork Percona Server e MariaDB,
e' ora utilizzabile anche per MongoDB, PostgreSQL ed i sistemi operativi ospite.
PMM ha un'architettura Client-Server con agenti distribuiti sui nodi da controllare
ma consente anche di gestire risorse esterne, ove non sia possibile installare l'Agent,
o in Cloud (eg. un DB MySQL/Aurora su AWS).
Nel caso di risorse esterne il numero di metriche e' ridotto ma comunque molto significativo:
in pratica manca tutta la parte di sistema operativo ma per i DB ci sono quasi le stesse cose.
Dal punto di vista di interfaccia PMM presenta una serie di dashboard,
particolarmente complete ed efficaci, realizzate come Applicazione
Grafana.
Per installare i server PMM ci sono diverse possibilita' tra cui installare singolarmente ogni componente dell'architettura. In realta', per una serie di ragioni, preferisco utilizzare la versione su container come descritto dalla documentazione ufficiale:
docker pull percona/pmm-server docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server /bin/true docker run -d \ -p 80:1080 \ --volumes-from pmm-data \ --name pmm-server \ -e DISABLE_UPDATES=true -e METRICS_RETENTION=720h -e QUERIES_RETENTION=48h -e METRICS_RESOLUTION=60s \ --restart always \ percona/pmm-server:1 docker run -d -p 1080:80 --name pmm percona/pmm-server:1
[NdA con i comandi indicati si installa il server PMM nell'ultima versione 1.x. Pero' e' gia' disponibile la versione 2.0.1, per installarla bisogna indicare :2 al posto di :1, fate riferimento alla documentazione ufficiale. E' differente anche la porta... con la versione 2 si utilizzano HTTP ed HTTPS direttamente sulle porte 80 e 443]
A questo punto si accede al PMM con un normale browser all'indirizzo 1080
ma per raccogliere qualche dato bisogna installare i client!
Per installare i client su tutti i nodi che ospitano i DB:
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm yum install pmm-client
Ora i client vanno configurati...
Ma prima di configurare i client e' opportuno un accenno all'architettura!
Immagini da documentazione ufficiale
L'architettura del PMM non e' complessa. Sul PMM Server sono attivi tutti i componenti che raccolgono, mantengono e presentano i dati statistici. Su ogni nodo che ospita un database viene installato un PMM Client e con l'utility da linea di comando pmm-admin vengono attivate le metriche desiderate (eg. MySQL). Oltre alle basi dati configurate sui PMM Client e' possibile raccogliere alcune statistiche anche da DB su cui non e' possibile installare il client.
Le metriche sono raccolte su Prometheus.
La retention di default e' 30 giorni per le metriche ed 8 giorni per le Query Analytics.
Queste ultime sono particolarmente pesanti... se non sono utili meglio disabilitarne
la raccolta con
pmm-admin add mysql --disable-tablestats
L'interfaccia grafica e' una APP realizzata con Grafana.
Per accedere e' sufficiente utilizza su un qualsiasi browser l'URL:
http://localhost:1080
Naturalmente il PMM server deve poter raggiungere gli Agent e, per i sistemi dove non sono presenti i client, deve poter raggiungere direttamente i DB... sembra banale, ma in un ambiente di produzione con reti differenziate e firewall non e' sempre immediato! Attenzione quindi alle porte da far abilitare...
La versione 2 del PMM presenta un'evoluzione, anche se molto significativa, dell'architettura presente nella v.1. Resta infatti inalterata l'architettura Client-Server tra il PMM Server ed i sistemi da monitorare, mentre vengono aggiornati ed inseriti molteplici nuovi componenti all'interno del PMM Server.
L'interfaccia utente e' sempre quella fornita da Grafana pero' viene utilizzato il Web Server Nginx e le porte di accesso sono cosi' le classiche 80 per l'HTTP e 443 per l'HTTPS. I dati raccolti dagli exporter vengono sempre raccolti da Prometheus pero' sono presenti altri due database. La base dati PostgreSQL mantiene i dati di configurazione e gestione dei servizi gestiti dal PMM e la base dati ClickHouse raccoglie i dati per l'analisi delle query.
Dato il numero di componenti e' fortemente consigliabile l'installazione come appliance; viene infatti distribuita come immagine Docker, OVA (per essere eseguita come VM da un hypervisor) o AMI (per Amazon Web Services).
Nel seguito presentiamo indicazioni valide per entrambe le versioni anche perche' la v.2 e' solo di recente introduzione.
La configurazione dell'agent richiede la registrazione sul server e l'aggiunta delle statistiche. Tutte le operazioni si effettuano con il comando pmm-admin che ha un completo help online:
pmm-admin add --help Usage: pmm-admin add [command] Available Commands: linux:metrics Add this system to metrics monitoring. mysql Add complete monitoring for MySQL instance (linux and mysql metrics, queries). mysql:metrics Add MySQL instance to metrics monitoring. mysql:queries Add MySQL instance to Query Analytics. mongodb Add complete monitoring for MongoDB instance (linux and mongodb metrics, queries). mongodb:metrics Add MongoDB instance to metrics monitoring. mongodb:queries Add MongoDB instance to Query Analytics. postgresql Add complete monitoring for PostgreSQL instance (linux and postgresql metrics). postgresql:metrics Add PostgreSQL instance to metrics monitoring. proxysql Add complete monitoring for ProxySQL instance (linux and proxysql metrics). proxysql:metrics Add ProxySQL instance to metrics monitoring. external:service Add external Prometheus exporter running on this host to new or existing scrape job for metrics monitoring. external:metrics Add external Prometheus exporters job to metrics monitoring. external:instances Add external Prometheus exporters instances to existing metrics monitoring job.
Vediamo le operazioni in dettaglio...
Per registrare il client al PMM Server basta dare i comando:
Gia fatto? Bene!
Non funziona? Capita!
Un errore comune e':
Detected address '172.17.0.1' is not locally bound.
Avviene quando il client non trova la rete del server
[NdA a me e' capitato spesso perche' avevo DB configurati su cluster con VIP specifici].
In questi casi il comando diventa:
pmm-admin config --server pmm_hostname:1080 --bind-address IPservice --client-address IPservice
Anche questa configurazione si effettua con il pmm-admin
Se si vogliono attivare le statistiche su un MongoDB e' opportuno prima creare un'utenza adatta con:
db.getSiblingDB("admin").createUser({ user: "mongodb_exporter", pwd: "XXX", roles: [ { role: "clusterMonitor", db: "admin" }, { role: "read", db: "local" } ] })
Quindi il comando sara':
pmm-admin add mongodb --uri mongodb_exporter:XXX@MongoDBhostname:27017
La registrazione/attivazione di statistiche su DB esterni (quelli senza Agent) vi effettua invece dalla console PMM:
Lo vediamo tra poco!
PMM utilizza Grafana per tutta la parte di presentazione grafica dei dati.
Si tratta di un'applicazione, quindi piu' completa e complessa delle
solite dashboard... pero' e' comunque semplice da utilizzare.
Per accedere e' sufficiente utilizza su un qualsiasi browser l'URL:
http://localhost:1080
Naturalmente con la v.2 non e' necessaria l'indicazione della porta poiche' viene esposta la porta 80 (se non vi sono conflitti).
Al primo accesso e' necessario modificare la password di default (admin/admin)... quindi si effettua un normale login su Grafana.
La pagina iniziale presenta la situazione generale ed i link a tutte le altre pagine:
Importante e' la pagina del PMM in cui e' possibile aggiungere istanze di DB remoti (v.1 e v.2):
Le statistiche sono disponibili per ogni server in modo complessivo e facilmente confrontabile:
Le statistiche del sistema operativo sono molteplici (notate l'elenco sul menu):
Le statistiche per MySQL sono naturalmente molto complete [NdA Percona ha una lunga tradizione di supporto di MySQL]:
Le statistiche sono disponibili anche per i database PostgreSQL e MongoDB:
Molto sofisticate sono infine le statistiche disponibili sulle query eseguite sui DB:
Buon divertimento!
Con le impostazioni di default il campionamento e' molto frequente. Questo e' molto bello per le demo... ma il carico sul PMM e' un po' elevato. All'immagine su Docker comunque serve un po' di memoria per funzionare bene.
Ad ogni versione vengono aggiunte nuove funzionalita': ora sono disponibili tre differenti DB (MySQL, MongoDB, PostgreSQL), con Agent o esterni ed una completa analisi delle query utente. E' quindi opportuno utilizzare sempre le versioni piu' recenti [NdA questo documento e' stato preparato con la versione 1.9, mantenuto con le release successive 1.x ed aggiornato alla versione 2.0 che e' disponibile dal 2019-10. Le due versioni non sono compatibili].
Definire e seguire uno standard di naming di server ed istanze DB rende molto piu' semplice navigare tra le diverse statistiche presenti.
Titolo: PMM
Livello: Avanzato
Data:
31 Ottobre 2018 🎃 Halloween
Versione: 1.0.2 - 31 Ottobre 2019 🎃 Halloween
Autore: mail [AT] meo.bogliolo.name