Santé et monitoring¶
Santé de la plateforme¶
Pour monitorer la santé de la plateforme depuis un service externe, vous avez la possibilité d’activer une route de healthcheck sur un ou plusieurs Portail. Cette route vous permet d’afficher un état global de la plateforme. Elle est accessible via l’URL:
https://url-de-votre-portail/api/healthcheck
Exemple de la réponse JSON:
{
"status": "OK",
"version": "2.14.4",
"services": {
"api":
{
"status": "OK",
"version": "2.15.2",
"services":
{
"db":
{
"status": "OK"
},
"provision-api":
{
"status": "OK",
"version": "2.7.0"
},
"provision-relay-api":
{
"status": "OK",
"version": "1.3.0"
},
"container-providers": [
{
"status": "OK",
"name": "Reemo SWARM",
"type": "SWARM"
}
],
"ws-relays": [
{
"status": "OK",
"name": "Global - WS_SWARM",
"type": "WS_SWARM"
}
]
}
},
"signal": {
"status": "OK",
"version": "2.6.1"
}
}
}
Activation de la route¶
Pour activer cette route sur le Portail, vous pouvez utiliser les options:
HEALTHCHECK_ENABLE: “true”
HEALTHCHECK_RESTRICT_IP: “192.168.1.1,192.168.10.0/24”
Et pour activer cette route sur le Portail Admin:
HEALTHCHECK_PORTALADMIN_ENABLE: “true”
HEALTHCHECK_PORTALADMIN_RESTRICT_IP: “192.168.1.1,192.168.10.0/24”
Format Prometheus¶
Si vous souhaitez obtenir ces informations au format Prometheus, elles sont accessibles sur la route https://url-de-votre-portail/api/healthcheck/prometheus
# HELP app_service_status Services status (1 = up, 0 = down)
# TYPE app_service_status gauge
# HELP app_service_items Services items numbers
# TYPE app_service_items gauge
app_service_status{service="db"} 1
app_service_status{service="provision-api"} 0
app_service_status{service="provision-relay-api"} 0
app_service_status{service="Mon provider - SWARM", parent="container-providers", type="SWARM"} 0
app_service_status{service="Mon websocket relay 1 - WS_SWARM", parent="ws-relays", type="WS_SWARM"} 0
app_service_status{service="Mon websocket relay 1 - Traefik status", parent="ws-relays", type="WS_SWARM"} 0
app_service_statusIndique l’état de chaque service surveillé. La valeur
1signifie que le service est opérationnel. La valeur0signifie qu’il est indisponible.
Exemple de supervision¶
Voici un exemple de mise en place d’une supervision de la santé de la plateforme en utilisant Nagios
Prérequis¶
Sur le serveur Nagios: avoir les commandes curl et jq disponibles
Command¶
define command {
command_name reemo_healthcheck
command_line /usr/lib/nagios/plugins/reemo_healthcheck $ARG1$
}
Script¶
#!/bin/bash
# Check if an argument (URL) is provided
if [ -z "$1" ]; then
echo "CRITICAL: No URL provided. Usage: $0 <URL>"
exit 2
fi
HEALTHCHECK_URL="$1"
# Fetch JSON response
response=$(curl -s "$HEALTHCHECK_URL/api/healthcheck")
# Check if the request was successful
if [ $? -ne 0 ] || [ -z "$response" ]; then
echo "CRITICAL: Unable to access the health check page ($HEALTHCHECK_URL)"
exit 2
fi
# Extract service statuses using jq
status=$(echo "$response" | jq -r '.status')
errors=$(echo "$response" | jq -r '.. | objects | select(.status? and .status != "OK")')
# Check if the global status is OK
if [ "$status" != "OK" ]; then
echo "CRITICAL: Global health check status is $status"
exit 2
fi
# Check if any sub-services have issues
if [ -n "$errors" ]; then
echo "WARNING: Some services are not OK:"
echo "$errors"
exit 1
fi
# Everything is OK
echo "OK: All services are operational"
exit 0
Service¶
define service{
host_name < HOSTNAME >
use generic-service ; Name of service template to use
service_description Reemo Healthcheck
check_command reemo_healthcheck!https://< URL >
}
Monitoring Prometheus¶
Il est possible d’activer Prometheus sur les points d’entrées Traefik, plusieurs options sont disponibles:
Activer Prometheus¶
Pour activer Prometheus, vous pouvez rajouter l’option TRAEFIK_PROMETHEUS_ENABLE: true dans le fichier inventaire.
Port¶
Par défaut la page Prometheus sera accessible sur le même port que le Portail, utilisez l’option TRAEFIK_PROMETHEUS_PORT: “<numero du port>” pour le modifier.
URL¶
Par défaut la page Prometheus sera accessible sur l’url du Portail avec le lien /metrics. Il est possible de spécifier une ou plusieurs url dédiées:
TRAEFIK_PROMETHEUS_URLS:
- "metrics1.domain.tld"
- "metrics2.domain.tld"
Note
Dans le cas d’un cluster avec 3 noeuds, il est conseillé de mettre 3 urls pour que Prometheus puisse récupérer les metrics de tous les noeuds.
Filtrage IP¶
Pour restreindre l’accès à des adresses IP, vous pouvez utiliser l’option TRAEFIK_PROMETHEUS_RESTRICT_IP.
Exemple:
TRAEFIK_PROMETHEUS_RESTRICT_IP: "1.1.1.1,2.2.2.2"