Options supplémentaires

Le rôle Ansible reemo-infra responsable de l’installation de l’environnement INFRA possède des options supplémentaires. Par souci de facilité de lecture, ces options sont détaillées dans ce document.

Ecriture des logs Syslog

Par défaut les logs de chaque service sont envoyés dans le Syslog local de chacun des noeuds avec facility=daemon par défaut.

Syslog Facility

Vous pouvez modifier la valeur de facility en utilisant la liste d’options suivante:

SYSLOG_FACILITY: "daemon"
SYSLOG_FACILITY_API: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRON: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_DB: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_EXIM4: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_MYSQL: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PORTAL: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PORTALADMIN: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_SIGNAL: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PROAPI: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_STUN: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PRORELAYAPI: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PROCLOUDAPI: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRONLOG: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRONLDAP: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRONCLOUD: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_HAPROXY: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_TRAEFIK: "{{SYSLOG_FACILITY}}"

Tip

Tous les logs sont écrits dans le Syslog avec comme préfixe reemo_

Commandes utiles de recherche dans les logs Reemo

Pour rechercher des erreurs dans les logs avec l’aide d’Ansible:

Infra Manager

ansible infra_manager -i inventory.yml -m shell -a "grep _traefik /var/log/syslog | grep '\" 5[0-9][0-9] [0-9]'"
ansible infra_manager -i inventory.yml -m shell -a "grep ' 500 [0-9]' /var/log/syslog"

API Manager

ansible api_manager -i inventory.yml -m shell -a "grep _traefik /var/log/syslog | grep '\" 5[0-9][0-9] [0-9]'"
ansible api_manager -i inventory.yml -m shell -a "grep ' 500 [0-9]' /var/log/syslog"

Portal Manager

ansible portal_manager -i inventory.yml -m shell -a "grep _traefik /var/log/syslog | grep '\" 5[0-9][0-9] [0-9]'"
ansible portal_manager -i inventory.yml -m shell -a "grep ' 500 [0-9]' /var/log/syslog"

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 le Portail Reemo. 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 Utilisateurs, 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_status

Indique l’état de chaque service surveillé. La valeur 1 signifie que le service est opérationnel. La valeur 0 signifie 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"

Envoi de mails

Si vous souhaitez que la plateforme Reemo soit capable d’envoyer des emails aux utilisateurs, vous pouvez activer le service de messagerie inclus dans le rôle Ansible reemo-infra:

API_MAIL_ACTIVE: "true"
API_MAIL_BASEURL: "https://< URL du portal de connexion pour les utilisateurs >"
EXIM_SMARTHOST: "< URL du serveur SMTP >::587"
EXIM_PASSWORD: "< URL du serveur SMTP >:< Utilisateur SMTP >:< Mot de passe de connexion SMTP>"

Mode maintenance

Lors d’une opération de maintenance, vous avez la possibilité de remplacer le Portail par une page de maintenance.

Activation

ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --tags maintenance --extra-vars "MAINTENANCE_ENABLE=true"

Désactivation

ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --tags portal

LDAP alternatif

Dans le cas d’une architecture à plusieurs API il est possible d’utiliser 2 FQDN pour un meme serveur LDAP.

Pour cela, vous pouvez rajouter l’option suivante dans la configuration du serveur API qui doit utiliser l’url alternative pour contacter le serveur LDAP:

API_useAlternateLDAPHost: "true"

Combiner avec l’environnement RELAYWS

Par défaut, l’environnement INFRA utilise le protocole WebRTC pour la communication entre les utilisateurs et leurs ressources. Si vous souhaitez utiliser le mode WebSocket et donc avoir des connexions uniquement en HTTPS, il faudra rajouter un environnement RELAYWS et renseigner les adresses IP dans le fichier inventaire ainsi que l’url de connexion des utilisateurs sur cet environnement RELAYWS.

Exemple:

all:
    vars:
        API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
    infra_manager:
        vars:
            PORTAL_URL: "url.domain.tld"
            PORTALADMIN_URL: "urladmin.domain.ltd"
            PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
            TRAEFIK_SSL_CERTS:
                - cert_file: "/localpath/to/cert.crt"
                  key_file: "/localpath/to/key.key"
            RELAYS_IP:
                - ip: "10.10.0.1"
                - ip: "10.10.0.2"
                - ip: "10.10.0.3"
            RELAYS_URL: "relayws.domain.tld"
        hosts:
            infra_manager1:
                ansible_host: "10.0.0.1"
            infra_manager2:
                ansible_host: "10.0.0.2"
            infra_manager3:
                ansible_host: "10.0.0.3"

Combiner avec l’environnement PROVISION

Si vous souhaitez utiliser un environnement PROVISION pour profiter de l’offre Reemo Containers, une interconnexion avec un environnement PROVISION est nécessaire.

Tip

Un environnement INFRA peut gérer autant d’environnements PROVISION différents que vous souhaitez.

La connexion entre INFRA et PROVISION s’effectue en HTTPS de l’environnement INFRA vers l’environnement PROVISION par le biais d’une URL qui doit être resolvable par l’environnement INFRA, 2 choix sont possibles:

Avec DNS

Renseignez dans votre DNS l’URL du service Nginx dans l’environnement PROVISION.
Si vous êtes sur un environnement PROVISION, vous pouvez profiter du système de Round Robin DNS pour renseigner plusieurs IP et faire du load balancing.
Vous pouvez aussi intercaler un HAProxy pour effectuer de la tolérance de panne.

Sans DNS

Si vous n’utilisez pas de DNS, il vous faut renseigner dans l’inventaire les différentes adresses IP des services Nginx de l’environnement de PROVISION, uniquement dans les groupes api_manager et infra_manager.

Il faut aussi ajouter la variable PROVISION_SIGNAL_IP qui sont les adresses IP des serveurs de Signalisation où les conteneurs devront venir s’enregistrer, ce sont généralement les adresses IP des serveurs Portal ou INFRA.

Exemple:

all:
    vars:
        API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
    infra_manager:
        vars:
            PORTAL_URL: "url.domain.tld"
            PORTALADMIN_URL: "urladmin.domain.ltd"
            PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
            TRAEFIK_SSL_CERTS:
                - cert_file: "/localpath/to/cert.crt"
                  key_file: "/localpath/to/key.key"
            PROVISION_IP:
                - ip: "10.10.0.1"
                - ip: "10.10.0.2"
                - ip: "10.10.0.3"
            PROVISION_SIGNAL_IP:
                - ip: "10.0.0.1"
                - ip: "10.0.0.2"
                - ip: "10.0.0.3"
        hosts:
            infra_manager1:
                ansible_host: "10.0.0.1"
            infra_manager2:
                ansible_host: "10.0.0.2"
            infra_manager3:
                ansible_host: "10.0.0.3"