Gestion des logs et Monitoring de la solution de Datachain

Les différentes briques de Datachain Core peuvent mettre à disposition un certain nombre de métriques de manière directe ou via des conteneurs standard du marché. Cette page présente les éléments à mettre en place afin de disposer de ces métriques.

L’intégralité des métriques est mise à disposition au format Prometheus et peut-être intégré dans la plupart des outils de monitoring du marché.

Le tableau récapitulatif suivant présente les solutions proposées pour les modules Datachain.

Module

Type de monitoring

Web

Brique externe nginx-prometheus-exporter

Backend

Monitoring interne, via Spring Actuator

Spark

Monitoring interne, via Spring Actuator

Base PostgreSql

Brique externe postgres-exporter

Console

Monitoring interne, via Spring Actuator

MarketPlace

Monitoring interne, via Spring Actuator

Généralités sur les éléments à monitorer

Les éléments à monitorer de datachain core sont assez semblables à ceux de la plupart des applications. Cela consiste à monitorer :

  • Les ressources systèmes :

  • Les pools de connexions : il faudra s’assurer de ne pas arriver à saturation de ces pools *

Mise en place du monitoring sur les modules

Monitoring du Module Web

Ce monitoring se fait par l’intermédiaire de l’image nginx-prometheus-exporter, via ajout dans le fichier de déploiement.

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

Monitoring du Module Backend

Ce monitoring est natif 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"

Monitoring du Module Spark

Ce monitoring est natif 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.metrics.export.prometheus.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"

Monitoring des Modules Postgresql

Ce monitoring se fait par l’intermédiaire de l’image postgres-exporter, via le déploiement d’un service supplémentaire dans le fichier de déploiement.

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

  # Déclaration des autres services
  # Other service declaration

  pg_exporter:
    image: quay.io/prometheuscommunity/postgres-exporter:${PG_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 pg, dont un alias sur ce réseau est 'dc-pg'
      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 /pg-exporter (voir configuration ci-dessous)
        - "traefik.http.routers.pg_exporter.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/pg-exporter`)"
        # URL traefik sécurisée
        - "traefik.http.routers.pg_exporter.tls=true"
        - "traefik.http.routers.pg_exporter.tls.certresolver=resolver1"
        - "traefik.http.routers.pg_exporter.entrypoints=websecure"
        - "traefik.http.routers.pg_exporter.service=pg_exporter"
        - "traefik.http.services.pg_exporter.loadbalancer.server.port=9187"
        - "traefik.http.routers.pg_exporter.middlewares=pg_exporter-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.pg_exporter-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.pg_exporter-auth.basicauth.removeheader=true"
    environment:
      # récupération des informations auprès de la base dc-pg
      - DATA_SOURCE_URI=dc-pg:5432/postgres?sslmode=disable
      - DATA_SOURCE_USER=postgres
      # - DATA_SOURCE_PASS_FILE peut être utilisé avec docker secret
      - DATA_SOURCE_PASS=motdepasse
      # disponible sous /pg-exporter
      - PG_EXPORTER_WEB_TELEMETRY_PATH=/pg-exporter

Monitoring du Module Console (beta)

Ce monitoring est natif pour le composant, via Spring Actuator, avec activation et mise à disposition des métriques.

Configuration du module (généralement console.env)
# Configuration prometheus
management.endpoints.web.base-path=/actuator-console
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

  console:
    image: ${HARBOR_REGISTRY}/dc/console:${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-console
    env_file: console.env
    deploy:
      mode: replicated
      replicas: 1
      labels:
        # Exposition via traefik
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_network"
        # console disponible sur son port Standard sur son url public
        - "traefik.http.routers.console.rule=Host(`${CONSOLE_URL}`) && PathPrefix(`/`)"
        - "traefik.http.routers.console.entrypoints=websecure"
        - "traefik.http.routers.console.tls=true"
        - "traefik.http.routers.console.tls.certresolver=resolver1"
        - "traefik.http.routers.console.service=console"
        - "traefik.http.services.console.loadbalancer.server.port=8093"
        # métriques disponibles sur l'URL ADMIN_URL à l'uri /actuator-backend (voir configuration ci-dessous)
        - "traefik.http.routers.dc_console_actuator.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/actuator-console`)"
        # URL traefik sécurisée
        - "traefik.http.routers.dc_console_actuator.entrypoints=websecure"
        - "traefik.http.routers.dc_console_actuator.tls=true"
        - "traefik.http.routers.dc_console_actuator.tls.certresolver=resolver1"
        - "traefik.http.routers.dc_console_actuator.service=dc_console_actuator"
        - "traefik.http.services.dc_console_actuator.loadbalancer.server.port=9093"
        - "traefik.http.routers.dc_console_actuator.middlewares=dc_console_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_console_actuator-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.dc_console_actuator-auth.basicauth.removeheader=true"

Monitoring du Module MarketPlace (beta)

Ce monitoring est natif pour le composant, via Spring Actuator, avec activation et mise à disposition des métriques.

Configuration du module (généralement marketplace.env)
# Configuration prometheus
management.endpoints.web.base-path=/actuator-marketplace
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

  marketplace:
    image: ${HARBOR_REGISTRY}/dc/data_view:${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-data-view
    env_file: marketplace.env
    deploy:
      mode: replicated
      replicas: 1
      labels:
        # Exposition via traefik
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_network"
        # marketplace disponible sur son port Standard sur son url public
        - "traefik.http.routers.marketplace.rule=Host(`${MARKETPLACE_URL}`) && PathPrefix(`/`)"
        - "traefik.http.routers.marketplace.entrypoints=websecure"
        - "traefik.http.routers.marketplace.tls=true"
        - "traefik.http.routers.marketplace.tls.certresolver=resolver1"
        - "traefik.http.routers.marketplace.service=marketplace"
        - "traefik.http.services.marketplace.loadbalancer.server.port=8093"
        # métriques disponibles sur l'URL ADMIN_URL à l'uri /actuator-backend (voir configuration ci-dessous)
        - "traefik.http.routers.dc_marketplace_actuator.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/actuator-marketplace`)"
        # URL traefik sécurisée
        - "traefik.http.routers.dc_marketplace_actuator.entrypoints=websecure"
        - "traefik.http.routers.dc_marketplace_actuator.tls=true"
        - "traefik.http.routers.dc_marketplace_actuator.tls.certresolver=resolver1"
        - "traefik.http.routers.dc_marketplace_actuator.service=dc_marketplace_actuator"
        - "traefik.http.services.dc_marketplace_actuator.loadbalancer.server.port=9093"
        - "traefik.http.routers.dc_marketplace_actuator.middlewares=dc_marketplace_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_marketplace_actuator-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.dc_marketplace_actuator-auth.basicauth.removeheader=true"