PMM

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.

Installazione

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...

Architettura

Ma prima di configurare i client e' opportuno un accenno all'architettura!

PMM Architecture

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). PMM v.2 Architecture 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.

Configurazione Agent

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...

Registazione server

Per registrare il client al PMM Server basta dare i comando:

# pmm-admin config --server pmm_hostname:1080 OK, PMM server is alive.

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

Attivazione statistiche

Anche questa configurazione si effettua con il pmm-admin

# pmm-admin add linux:metrics # pmm-admin add mysql:metrics --user root --password XXX --port 3306 --host prodXXX.xenialab.it --create-user OK, now monitoring MySQL metrics using DSN pmm:***@tcp(prodXXX.xenialab.it:3306) # pmm-admin list pmm-admin 1.17.1 PMM Server | pmm_hostname:1080 Client Name | prodXXX Client Address | 10.69.69.69 Service Manager | linux-upstart -------------- -------------- ----------- -------- ----------------------------------- -------- SERVICE TYPE NAME LOCAL PORT RUNNING DATA SOURCE OPTIONS -------------- -------------- ----------- -------- ----------------------------------- -------- linux:metrics prodXXX 42000 YES - mysql:metrics prodXXX 42002 YES pmm:***@tcp(prodXXX.xenialab.it:3306)

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: PMM - Aggiunta Istanze DB

Lo vediamo tra poco!

Console PMM

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: PMM - Home Page

Importante e' la pagina del PMM in cui e' possibile aggiungere istanze di DB remoti (v.1 e v.2):
  PMM - Aggiunta Istanze DB PMM - Aggiunta Istanze DB v.2

Le statistiche sono disponibili per ogni server in modo complessivo e facilmente confrontabile: PMM - Lista statistiche

Le statistiche del sistema operativo sono molteplici (notate l'elenco sul menu): PMM - Statistiche OS

Le statistiche per MySQL sono naturalmente molto complete [NdA Percona ha una lunga tradizione di supporto di MySQL]: PMM - Statistiche MySQL

Le statistiche sono disponibili anche per i database PostgreSQL e MongoDB:
  PMM - Statistiche PostgreSQL PMM - Statistiche MongoDB

Molto sofisticate sono infine le statistiche disponibili sulle query eseguite sui DB: PMM - Statistiche Query

Buon divertimento!

Varie ed eventuali

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 (3/5)
Data: 31 Ottobre 2018 🎃 Halloween
Versione: 1.0.2 - 31 Ottobre 2019 🎃 Halloween
Autore: mail [AT] meo.bogliolo.name