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.
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 prometheus
management.endpoints.web.base-path=/actuator-backend
management.server.address=0.0.0.0
management.metrics.export.prometheus.enabled=true
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 prometheus
management.endpoints.web.base-path=/actuator-spark
management.server.address=0.0.0.0
management.metrics.export.prometheus.enabled=true
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.
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 prometheus
management.endpoints.web.base-path=/actuator-console
management.server.address=0.0.0.0
management.metrics.export.prometheus.enabled=true
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 prometheus
management.endpoints.web.base-path=/actuator-marketplace
management.server.address=0.0.0.0
management.metrics.export.prometheus.enabled=true
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"