Exploitation - Datachain Core

Cette page présente les opérations d’exploitation de la stack Datachain Core : démarrage et arrêt, logs, supervision et sauvegarde. Le paramétrage des modules est décrit dans Configuration - Datachain Core.

Démarrage et arrêt

La stack Datachain est démarrée en dernier, après Keycloak et, le cas échéant, le cluster Spark. Les scripts de démarrage, d’arrêt et de redémarrage sont décrits dans Exploitation - Généralités.

Au démarrage, le service de migration (pg_migration) s’exécute une fois et s’arrête : les patchs de la base de données doivent être passés avant d’utiliser l’application. Vérifier ses logs après chaque mise à jour.

Dans le cas d’un cluster Spark, celui-ci doit être opérationnel avant le lancement de la stack Datachain, et la stack Datachain doit être redémarrée si le cluster est redémarré.

Fichiers de configuration de la stack (dans le répertoire de la stack) :

Fichier

Service concerné

web_ui.env

Module web : configuration

backend.env

Module backend : configuration

spark.env

Module Spark : configuration

Accès et contrôle de l’état des services

Module Port Url Utilisation

Web

8080

/

Application Datachain

Web

9080

/stub_status

Métriques Nginx

Backend

8089

/

API de l’application

Backend

9089

/actuator-backend/*

Spring Actuator

Spark

8090

/

API du module de calcul

Spark

9090

/management/*

Spring Actuator (préfixe par défaut, modifiable par management.endpoints.web.base-path)

Spark

4040

/

Interface du driver Spark : analyse de l’exécution des jobs

Logs

Module Emplacement

Web

Sortie standard du conteneur (logs d’accès Nginx)

Backend

/logs/datachain/backend : dc-backend.log (applicatif), access.log, management.log

Spark

/logs/datachain/spark : dc-spark.log (applicatif), access.log, management.log

Migration

Sortie standard du conteneur

Les logs applicatifs sont renouvelés chaque jour (et par tranche de 200Mo), compressés, et conservés 30 jours, dans la limite de 10Go. Voir Configuration - Datachain Core pour le détail.

Supervision

L’ensemble des métriques est mis à disposition au format Prometheus et peut être intégré dans la plupart des outils de supervision.

Module

Type de supervision

Web

Brique externe nginx-prometheus-exporter

Backend

Interne, via Spring Actuator

Spark

Interne, via Spring Actuator

Les éléments à surveiller sont, comme pour la plupart des applications, les ressources système et les pools de connexions (afin de ne pas atteindre leur saturation).

Module Web

La supervision se fait par l’intermédiaire de l’image nginx-prometheus-exporter, via ajout dans le fichier de déploiement. Elle lit les métriques Nginx exposées sur le port 9080 (/stub_status).

Fichier docker-compose.yml
version: "3.7"
services:

  # Déclaration des autres services
  # Other service declaration

  nginx_exporter:
    image: nginx/nginx-prometheus-exporter:${NGINX_PROMETHEUS_EXPORTER_VERSION}
    networks:
      # Disponible sur le réseau traefik, car disponible via le proxy traefik
      traefik_network:
      # Disponible sur le réseau dc_network, car interroge le module web_ui, dont un alias sur ce réseau est 'dc-web-ui'
      dc_network:
    deploy:
      mode: replicated
      replicas: 1
      labels:
        # Exposition via traefik
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_network"
        # disponible sur l'URL ADMIN_URL à l'uri /nginx-exporter (voir configuration ci-dessous)
        - "traefik.http.routers.nginx_exporter.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/nginx-exporter`)"
        # URL traefik sécurisée
        - "traefik.http.routers.nginx_exporter.entrypoints=websecure"
        - "traefik.http.routers.nginx_exporter.tls=true"
        - "traefik.http.routers.nginx_exporter.tls.certresolver=resolver1"
        - "traefik.http.routers.nginx_exporter.service=nginx_exporter"
        - "traefik.http.routers.nginx_exporter.middlewares=nginx_exporter-auth@docker"
        - "traefik.http.services.nginx_exporter.loadbalancer.server.port=9113"
        # Protection de l'url par un mot de passe traefik généré avec la commande : echo $(htpasswd -nbB  adobis motdepasse) | sed -e s/\\$/\\$\\$/g
        - "traefik.http.middlewares.nginx_exporter-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.nginx_exporter-auth.basicauth.removeheader=true"
    environment:
      # récupération de l'information dans la page stub_status
      # La la status est exposé sur le port 8080 à partir de la version 8.6
      - SCRAPE_URI=http://dc-web-ui:8080/stub_status
      - NGINX_RETRIES=20
      # disponible sous /nginx-exporter
      - TELEMETRY_PATH=/nginx-exporter

Module Backend

La supervision est native pour le composant, via Spring Actuator, avec activation et mise à disposition des métriques.

Configuration du module (généralement backend.env)
# Configuration prometheus
management.endpoints.web.base-path=/actuator-backend
management.server.address=0.0.0.0
management.metrics.export.prometheus.enabled=true
Fichier docker-compose.yml
version: "3.7"
services:

  # Déclaration des autres services
  # Other service declaration

  dc_backend:
    image: ${HARBOR_REGISTRY}/dc/backend:${PRODUCT_VERSION}
    networks:
      # Disponible sur le réseau traefik, car disponible via le proxy traefik
      traefik_network:
      # Disponible sur le réseau dc_network
      dc_network:
        aliases:
          - dc-backend
    env_file: backend.env
    deploy:
      mode: replicated
      replicas: 1
      labels:
        # Exposition via traefik
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_network"
        # disponible sur l'URL ADMIN_URL à l'uri /actuator-backend (voir configuration ci-dessous)
        - "traefik.http.routers.dc_backend_actuator.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/actuator-backend`)"
        # URL traefik sécurisée
        - "traefik.http.routers.dc_backend_actuator.entrypoints=websecure"
        - "traefik.http.routers.dc_backend_actuator.tls=true"
        - "traefik.http.routers.dc_backend_actuator.tls.certresolver=resolver1"
        - "traefik.http.routers.dc_backend_actuator.service=dc_backend_actuator"
        - "traefik.http.services.dc_backend_actuator.loadbalancer.server.port=9089"
        - "traefik.http.routers.dc_backend_actuator.middlewares=dc_backend_actuator-auth@docker"
        # Protection de l'url par un mot de passe traefik généré avec la commande : echo $(htpasswd -nbB  adobis motdepasse) | sed -e s/\\$/\\$\\$/g
        - "traefik.http.middlewares.dc_backend_actuator-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.dc_backend_actuator-auth.basicauth.removeheader=true"

Module Spark

La supervision est native pour le composant, via Spring Actuator, avec activation et mise à disposition des métriques.

Configuration du module (généralement spark.env)
# Configuration prometheus
management.endpoints.web.base-path=/actuator-spark
management.server.address=0.0.0.0
management.prometheus.metrics.export.enabled=true
Fichier docker-compose.yml
version: "3.7"
services:

  # Déclaration des autres services
  # Other service declaration

  dc_spark:
    image: ${HARBOR_REGISTRY}/dc/spark:${PRODUCT_VERSION}
    networks:
      # Disponible sur le réseau traefik, car disponible via le proxy traefik
      traefik_network:
      # Disponible sur le réseau dc_network
      dc_network:
        aliases:
          - dc-spark
    env_file: spark.env
    deploy:
      mode: replicated
      replicas: 1
      labels:
        # Exposition via traefik
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_network"
        # disponible sur l'URL ADMIN_URL à l'uri /actuator-spark (voir configuration ci-dessous)
        - "traefik.http.routers.dc_spark_actuator.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/actuator-spark`)"
        # URL traefik sécurisée
        - "traefik.http.routers.dc_spark_actuator.entrypoints=websecure"
        - "traefik.http.routers.dc_spark_actuator.tls=true"
        - "traefik.http.routers.dc_spark_actuator.tls.certresolver=resolver1"
        - "traefik.http.routers.dc_spark_actuator.service=dc_spark_actuator"
        - "traefik.http.services.dc_spark_actuator.loadbalancer.server.port=9090"
        - "traefik.http.routers.dc_spark_actuator.middlewares=dc_spark_actuator-auth@docker"
        # Protection de l'url par un mot de passe traefik généré avec la commande : echo $(htpasswd -nbB  adobis motdepasse) | sed -e s/\\$/\\$\\$/g
        - "traefik.http.middlewares.dc_spark_actuator-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.dc_spark_actuator-auth.basicauth.removeheader=true"

Sauvegarde et restauration

Nous conseillons d’effectuer des sauvegardes à froid, avec au préalable arrêt des services utilisant les éléments à sauvegarder. Pour Datachain Core, les éléments à sauvegarder sont :

  • la base de données adobis (configuration, pipelines, tâches), et la base expose (données exposées) : voir Exploitation - Gestion des données ;

  • le système de fichiers de Spark (répertoire monté sur /data).

Sauvegarde et restauration du système de fichiers

Dans la version actuelle de Datachain, le système de fichier HDFS est divisé en deux répertoires input et output. Le répertoire output contient essentiellement les éléments produits par les pipelines de traitement, les publications, ainsi que le cache (persistances notamment). De fait, le répertoire output peut devenir très vite volumineux.

Hors backup logiciel, d’autres technologies (hors scope de cette documentation) permettent de faire des backups de système de fichiers (snapshot de vm, réplication de disques, …​). Il peut être plus approprié d’adapter ce type de sauvegarde, plutôt que les sauvegardes proposées ci-dessous.

Sans cluster HDFS

Dans le cas de contexte spark sans cluster Spark/Hadoop, les fichiers sont directement accessibles dans le volume docker. Il suffit donc juste de procéder à la sauvegarde du répertoire.

  dc_spark1:
    image: ${HARBOR_REGISTRY}/dc/spark:${PRODUCT_VERSION}
    # ...
    volumes:
        - /opt/adobis/data/datachain/hdfs:/data # Volume Standard
    # ...

Dans le cas ci-dessus, il faudra donc procéder à une sauvegarde du répertoire /opt/adobis/data/datachain/hdfs, sur chaque machine sur lequel se trouve un contexte Spark.

Avec cluster HDFS

Dans le cas de contexte spark avec cluster Spark/Hadoop, Hadoop met nativement en œuvre un système de réplication de données sur tous les nœuds du cluster. Il parait peu opportun d’utiliser des techniques standard de sauvegarde.

En cas de besoin d’une mise en œuvre d’une procédure de sauvegarde logicielle, merci de suivre les préconisations Hadoop sur le sujet.

Dernière mise à jour le 2 novembre 2026 à 15:16