Dans ce billet je présente une courte procédure afin de déployer une solution de monitoring open source avec Prometheus et Pushgateway. On pourra générer des graphiques avec Grafana accessible via une interface web. Le billet présente le déploiement et pas une configuration poussée de grafana qui fera l’objet d’un autre billet. A la fin de ce billet vous aurez un aperçu et une suite fonctionnel pour un labo.
Vue d’ensemble de l’architecture de Prometheus
Pour résumer le fonctionnement de ce billet nous aurons
- Script Bash : Il va s’occuper d’envoyer toutes les 1 seconde les mesures vers Pushgateway
- Pushgateway : Va permettre de mettre en cache les mesures envoyé par le script bash
- Prometheus : Qui déploie une base de donnée et va récupérer la data sur Pushgateway
- Grafana : Qui va nous permettre de créer un frontend avec graphiques des données stocké dans Prometheus
On débute par l’installation de Pushgateway, puis sa mise en service, pensez à adapter les téléchargements suivant votre distribution et les éventuelles nouvelles versions
tar -xvzf pushgateway-1.0.1.linux-amd64.tar.gz && \
cd pushgateway-1.0.1.linux-amd64 && \
./pushgateway
A cette étape pushgateway passe en écoute sur le port 9091
On peut à présent installer Prometheus
tar -xvzf prometheus-2.15.2.linux-amd64.tar.gz && \
cd prometheus-2.15.2.linux-amd64
Avant de démarrer prometheus on doit lui indiquer ou récupérer la data, on va donc éditer le fichier de configuration prometheus.yml
On passe scrape_interval sur 1s et on ajoute dans le static configs localhost:9091(pushgateway)
global:
scrape_interval: 1s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090', 'localhost:9091']
Tout est prêt on peut executer prometheus, une fois en fonctionnement vous devriez pouvoir accéder au frontend sur : http://192.168.1.42:9090/targets afin de vérifier la bonne prise en compte de la pushgateway
On passe à la dernière partie d’installation et execution de Grafana, une fois le serveur en route vous devriez pouvoir accéder au frontend sur : http://127.0.0.1:3000, le couple identifiant/mot de passe est admin/admin
tar -xvzf grafana-6.5.3.linux-amd64.tar.gz && \
cd grafana-6.5.3/bin && \
./grafana-server
Pour rendre le tout fonctionnel on doit indiquer à grafana que Prometheus est une source de données
Prometheus
Scrape interval: 1s
HTTP Method: GET
Lors de la validation vous devriez avoir : Data source is working
Tout est en place, on peut commencer à envoyer la data de notre serveur vers la pushgateway qui sera elle même interrogé par prometheus. Pour que tout cela fonctionne ensemble il faut transmettre à pushgateway des données sous la forme clé-valeur. (Pushgateway et Prometheus fonctionne ainsi)
Exemple :
cpu_usage{process="apache2", pid="21"}(clé) 2.21(valeur)
Exemple de script pour le CPU Usage source
# Parsing ps aux lines, formats them and sends them to pushgateway.
while sleep 1
do
z=$(ps aux)
var=""
while read -r z
do
var=$var$(awk '{print "cpu_usage{process=""$11"", pid=""$2""}", $3z}');
done <<< "$z"
echo "$var"
curl -X POST -H "Content-Type: text/plain" --data "$var
" http://localhost:9091/metrics/job/top/instance/machine
done
Exemple de script pour Memory Usage source
# Parsing ps aux lines, formats them and sends them to pushgateway.
while sleep 1
do
z=$(ps aux)
var=""
while read -r z
do
var=$var$(awk '{print "memory_usage{process=""$11"", pid=""$2""}", $4z}');
done <<< "$z"
echo "$var"
curl -X POST -H "Content-Type: text/plain" --data "$var
" http://localhost:9091/metrics/job/top/instance/machine
done
On exécute le script, et la data doit commencer à arriver dans prometheus. On peut effectuer une recherche avec « cpu_usage » ou memory_usage sur : http://127.0.0.1:9090/graph (sur Prometheus)
Pour visualiser rapidement votre data dans grafana faite un nouveau dashboard, choississez le type de graphique puis dans « Metrics » recherchez la data à visualiser
ex : cpu_usage
Ici un exemple de rendue très rapide, tout tourne sur le même serveur donc c’est assez brouillon, l’bojectif du billet étant le déploiement votre ensemble est fonctionnel.