Prometheus è un TSDB (Time Series Data Base) che permette di monitorare agevolmente moltissimi oggetti, utilizzando i cosiddetti “exporters”, ovvero piccoli pezzetti di codice da installare sul device da monitorare e che rendono disponibili (esportano, per l’appunto) le metriche che vogliamo. Il server di Prometheus poi, si incarica di andare a recuperarsele utilizzando una logica di tipo “pull” (contrariamente a InfluxDB, che si comporta all’opposto). I dati recuperati possono poi essere utilizzati con Grafana per creare delle dashboard molto accattivanti.
Ho quindi pensato di utilizzare Prometheus e un apposito plugin per monitorare lo stato delle varie istanze WordPress che gestisco.
La procedura di funzionamento è molto semplice e si basa su due componenti:
1) Un plugin per wordpress (lo trovate qua)
2) una dashboard per Grafana (la trovate qua)
Per prima cosa occorre andare ad editare il file wp-config.php presente nella directory principale del sito WordPress, aggiungendo alla fine una riga come qusta:
define( ‘PROMETHEUS_KEY’, ‘2jO4BxsNSb’ );
La stringa deve essere casuale e per sicurezza diversa per ogni istanza WordPress. Potete generarla casualmente usando uno dei tanti portali presenti su internet.
Il plugin si installa usando la GUI di WordPress, alla voce plugin scegliendo il bottone “carica plugin”. Una volta caricato basta attivarlo e il gioco è fatto.
Ora passiamo a Prometheus. Diamo per scontato che abbiate un’istanza di Prometheus installata e funzionante, per cui ci serve solo editare il file di configurazione in formato YAML che di solito si trova in /etc/prometheus.
Alla fine del file aggiungete tanti blocchi come questo, uno per ogni istanza di WordPress:
– job_name: “WordPress metrics”
static_configs:
– targets: [“domain.tld”]
scrape_interval: “5m”
metrics_path: “/wp-json/metrics”
params:
prometheus: [‘fg98dfgkj’]
users: [‘yes’]
posts: [‘yes’]
pages: [‘yes’]
autoload: [‘yes’]
transient: [‘yes’]
user_sessions: [‘yes’]
posts_without_content: [‘yes’]
posts_without_title: [‘yes’]
db_size: [‘yes’]
scheme: “https”
Cambiate per ogni istanza le righe job name (è un nome mnemonico, metteteci quello che volete), la URL del sito (al posto di “domain.tld”) e la chiave che avete inserito nel file wp-config.php al punto precedente (al posto di “fg98dfgkj”) e fate molta attenzione alla sintassi, comprese le spaziature (YAML è bastardo…)
Riavviate Prometheus e se avete fatto tutto correttamente ogni 5 minuti andrà a leggersi sulle singole istanze lo stato.
Rimane solo da creare la dashboard su Grafana. Se non avete ancora creato un Data Source che punti al server Prometheus fatelo.
Poi importate la dashboard dal sito di Grafana utilizzando l’ID che trovate.
Poco dopo vedrete popolarsi la dashboard con i primi dati.
Se dovessero esserci problemi controllate quanto segue:
1) che Prometheus giri correttamente (normalmente Prometheus logga nel syslog sui sistemi Debian like e sul messages in quelli Red Hat like)
2) aprite con un browser la pagina http://ILVOSTROSITO/wp-json/metrics. Se l’exporter sta funzionando correttamente dovreste vedere una struttura JSON (che è ciò che viene esportato dal plugin).
3) Prometheus ha una sua interfaccia web che risponde a http://IP_DI:PROMETHEUS:9090 e dalla quale potete fare delle query per verificare che il vostro TSDB stia effettivamente leggendo le metriche.