Métriques

Etat du service

Le service, responsable de la rendition des documents, est à surveiller afin de superviser un serveur de rendition.

Pour cela, il suffit de s’appuyer sur le statut du service pour vérifier son état.

Selon les systèmes d’exploitation, l’identification du statut indiquant le fonctionnement normal diffère :

$> sc query ARenderRenditionService

Si le service est correctement démarré, cette commande doit retourner l’état : State : 4 RUNNING

Si le système possède systemd comme composant d’initialisation de votre système:

$> systemctl status ARenderRenditionEngineService.service

Si initd est le composant d’initialisation de votre système, vous devrez lancer :

$> service ARenderRenditionEngineService status

Si le service est correctement démarré, cette commande doit retourner le code : STARTED

Système de monitoring

Depuis la version 4, ARender permet d’envoyer des journaux de performances à ElasticSearch et de visualiser les métriques sur le tableau de bord Kibana. Cela est intéressant d’avoir les données de métriques d’un service mais nous ne devons pas nous restreindre à un système de monitoring. C’est pour cela que nous avons intégré Micrometer à ARender afin de faciliter les envoies de métriques sur différents systèmes de monitoring.

Pour l’instant nous avons mis seulement ces systèmes de monitoring à disposition : Prometheus, Elasticsearch, CloudWatch et Datadog.

Nous rajouterons par la suite, d’autres systèmes afin de ne pas être limité à seulement ceux là.

Configuration du système de monitoring

Propriétés Web-UI Serveur

Vous trouverez ci-dessous la liste des propriétés par défaut.

arender-server-default.properties
arender.server.metrics.tags.host=arender-hmi
arender.server.metrics.tags.application=arender

arender.server.metrics.process.enabled=false
arender.server.metrics.jvm.enabled=false
arender.server.metrics.system.enabled=false

# Set the registry name to use to export metrics
# Possible value : prometheus, elastic, datadog
# Default to elastic
arender.server.meter.registry.name=elastic

# Prometheus configurations
arender.server.export.prometheus.enabled=false
arender.server.export.prometheus.descriptions=false
arender.server.export.prometheus.frequency.amount=5
arender.server.export.prometheus.frequency.unit=MINUTES

# Elastic configurations
arender.server.export.elastic.enabled=false
arender.server.export.elastic.host=http://localhost:9200
arender.server.export.elastic.index=arender-micrometer-metrics
arender.server.export.elastic.index-date-format=yyyy-MM
arender.server.export.elastic.timestamp-field-name=@timestamp
arender.server.export.elastic.auto-create-index=true
arender.server.export.elastic.user-name=
arender.server.export.elastic.password=
arender.server.export.elastic.frequency.amount=5
arender.server.export.elastic.frequency.unit=MINUTES

# Datadog configurations
arender.server.export.datadog.enabled=false
arender.server.export.datadog.api-key=
arender.server.export.datadog.application-key=
arender.server.export.datadog.descriptions=false
arender.server.export.datadog.host-tag=instance
arender.server.export.datadog.uri=https://app.datadoghq.com
arender.server.export.datadog.frequency.amount=5
arender.server.export.datadog.frequency.unit=MINUTES

# CloudWatch configurations
arender.server.export.cloudwatch.enabled=false
arender.server.export.cloudwatch.namespace=arenderHMI
arender.server.export.cloudwatch.region=eu-west-1
arender.server.export.cloudwatch.frequency.amount=5
arender.server.export.cloudwatch.frequency.unit=MINUTES
Propriétés Rendition

Vous trouverez ci-dessous la liste des propriétés par défaut pour tous les services de la rendition permettant de configurer le système de monitoring.

management.metrics.tags.host=arender-broker
management.metrics.tags.application=arender
management.metrics.distribution.percentiles-histogram.http.server.requests=true
management.metrics.distribution.sla.http.server.requests=100ms, 400ms, 500ms, 2000ms
management.metrics.distribution.percentiles.http.server.requests=0.5, 0.9, 0.95, 0.99

management.metrics.enable.tomcat=false
management.metrics.enable.http=false
management.metrics.enable.logback=false
management.metrics.enable.jvm=false
management.metrics.enable.process=false
management.metrics.enable.system=false
management.metrics.enable.application=false
management.metrics.enable.executor=false
management.metrics.enable.disk=false

# Prometheus monitoring system
management.endpoints.web.exposure.include=prometheus,metrics,health
management.endpoint.prometheus.enabled=false
management.endpoint.metrics.enabled=true


# ElasticSearch monitoring system
management.metrics.export.elastic.enabled=false
management.metrics.export.elastic.step=5m
management.metrics.export.elastic.index=arender-micrometer-metrics
management.metrics.export.elastic.host=http://localhost:9200


# DataDog monitoring system
management.metrics.export.datadog.enabled=false
# Datadog API key
management.metrics.export.datadog.api-key=YOUR_KEY
# The step size to use (ie the reporting frequency).
management.metrics.export.datadog.step=5m
management.metrics.export.datadog.uri=https://app.datadoghq.com/


# StatsD monitoring system
management.metrics.export.statsd.enabled=false
management.metrics.export.statsd.step=5m
management.metrics.export.statsd.host=localhost
management.metrics.export.statsd.port=8125


# CloudWatch monitoring system
management.metrics.export.cloudwatch.enabled=false
management.metrics.export.cloudwatch.namespace=brokerNameSpace
management.metrics.export.cloudwatch.step=5m
management.metrics.export.cloudwatch.batchSize=20
management.metrics.export.cloudwatch.region=eu-west-1
management.metrics.tags.host=arender-taskconversion
management.metrics.tags.application=arender
management.metrics.distribution.percentiles-histogram.http.server.requests=true
management.metrics.distribution.sla.http.server.requests=100ms, 400ms, 500ms, 2000ms
management.metrics.distribution.percentiles.http.server.requests=0.5, 0.9, 0.95, 0.99

management.metrics.enable.tomcat=false
management.metrics.enable.http=false
management.metrics.enable.logback=false
management.metrics.enable.jvm=false
management.metrics.enable.process=false
management.metrics.enable.system=false
management.metrics.enable.application=false
management.metrics.enable.executor=false
management.metrics.enable.disk=false

# Prometheus monitoring system
management.endpoints.web.exposure.include=prometheus,metrics,health,shutdown
management.endpoint.prometheus.enabled=false
management.endpoint.metrics.enabled=true


# ElasticSearch monitoring system
management.metrics.export.elastic.enabled=false
management.metrics.export.elastic.step=5m
management.metrics.export.elastic.index=arender-micrometer-metrics
management.metrics.export.elastic.host=http://localhost:9200


# DataDog monitoring system
management.metrics.export.datadog.enabled=false
# Datadog API key
management.metrics.export.datadog.api-key=YOUR_KEY
# The step size to use (ie the reporting frequency).
management.metrics.export.datadog.step=5m
management.metrics.export.datadog.uri=https://app.datadoghq.com/


# StatsD monitoring system
management.metrics.export.statsd.enabled=false
management.metrics.export.statsd.step=5m
management.metrics.export.statsd.host=localhost
management.metrics.export.statsd.port=8125


# CloudWatch monitoring system
management.metrics.export.cloudwatch.enabled=false
management.metrics.export.cloudwatch.namespace=converterNameSpace
management.metrics.export.cloudwatch.step=5m
management.metrics.export.cloudwatch.batchSize=20
management.metrics.export.cloudwatch.region=eu-west-1
management.metrics.tags.host=arender-pdfbox
management.metrics.tags.application=arender
management.metrics.distribution.percentiles-histogram.http.server.requests=true
management.metrics.distribution.sla.http.server.requests=100ms, 400ms, 500ms, 2000ms
management.metrics.distribution.percentiles.http.server.requests=0.5, 0.9, 0.95, 0.99

management.metrics.enable.tomcat=false
management.metrics.enable.http=false
management.metrics.enable.logback=false
management.metrics.enable.jvm=false
management.metrics.enable.process=false
management.metrics.enable.system=false
management.metrics.enable.application=false
management.metrics.enable.executor=false
management.metrics.enable.disk=false

# Prometheus monitoring system
management.endpoints.web.exposure.include=prometheus,metrics,health,shutdown
management.endpoint.prometheus.enabled=false
management.endpoint.metrics.enabled=true


# ElasticSearch monitoring system
management.metrics.export.elastic.enabled=false
management.metrics.export.elastic.step=5m
management.metrics.export.elastic.index=arender-micrometer-metrics
management.metrics.export.elastic.host=http://localhost:9200


# DataDog monitoring system
management.metrics.export.datadog.enabled=false
# Datadog API key
management.metrics.export.datadog.api-key=YOUR_KEY
# The step size to use (ie the reporting frequency).
management.metrics.export.datadog.step=5m
management.metrics.export.datadog.uri=https://app.datadoghq.com/


# StatsD monitoring system
management.metrics.export.statsd.enabled=false
management.metrics.export.statsd.step=5m
management.metrics.export.statsd.host=localhost
management.metrics.export.statsd.port=8125


# CloudWatch monitoring system
management.metrics.export.cloudwatch.enabled=false
management.metrics.export.cloudwatch.namespace=pdfboxNameSpace
management.metrics.export.cloudwatch.step=5m
management.metrics.export.cloudwatch.batchSize=20
management.metrics.export.cloudwatch.region=eu-west-1
management.metrics.tags.host=arender-jni
management.metrics.tags.application=arender
management.metrics.distribution.percentiles-histogram.http.server.requests=true
management.metrics.distribution.sla.http.server.requests=100ms, 400ms, 500ms, 2000ms
management.metrics.distribution.percentiles.http.server.requests=0.5, 0.9, 0.95, 0.99

management.metrics.enable.tomcat=false
management.metrics.enable.http=false
management.metrics.enable.logback=false
management.metrics.enable.jvm=false
management.metrics.enable.process=false
management.metrics.enable.system=false
management.metrics.enable.application=false
management.metrics.enable.executor=false
management.metrics.enable.disk=false

# Prometheus monitoring system
management.endpoints.web.exposure.include=prometheus,metrics,health,shutdown
management.endpoint.prometheus.enabled=false
management.endpoint.metrics.enabled=true


# ElasticSearch monitoring system
management.metrics.export.elastic.enabled=false
management.metrics.export.elastic.step=5m
management.metrics.export.elastic.index=arender-micrometer-metrics
management.metrics.export.elastic.host=http://localhost:9200


# DataDog monitoring system
management.metrics.export.datadog.enabled=false
# Datadog API key
management.metrics.export.datadog.api-key=YOUR_KEY
# The step size to use (ie the reporting frequency).
management.metrics.export.datadog.step=5m
management.metrics.export.datadog.uri=https://app.datadoghq.com/


# StatsD monitoring system
management.metrics.export.statsd.enabled=false
management.metrics.export.statsd.step=5m
management.metrics.export.statsd.host=localhost
management.metrics.export.statsd.port=8125


# CloudWatch monitoring system
management.metrics.export.cloudwatch.enabled=false
management.metrics.export.cloudwatch.namespace=rendererNameSpace
management.metrics.export.cloudwatch.step=5m
management.metrics.export.cloudwatch.batchSize=20
management.metrics.export.cloudwatch.region=eu-west-1

Configuration des métriques envoyées

ARender envoie différentes métriques au système de monitoring. Pour éviter de surcharger le système avec les dizaines de métriques envoyées par ARender, des propriétés sont mises à disposition afin que vous puissiez activer/désactiver les métriques et les tags/dimensions dont vous avez besoin.

Propriétés Web-UI Serveur
arender-server-default.properties
# ARender endpoint export metric
arender.endpoint.metrics.export.has.document.enabled=false
arender.endpoint.metrics.export.bookmarks.enabled=false
arender.endpoint.metrics.export.document.layout.enabled=false
arender.endpoint.metrics.export.document.metadata.enabled=false
arender.endpoint.metrics.export.image.enabled=false
arender.endpoint.metrics.export.page.contents.enabled=false
arender.endpoint.metrics.export.search.enabled=false
arender.endpoint.metrics.export.advanced.search.enabled=false
arender.endpoint.metrics.export.load.document.enabled=false
arender.endpoint.metrics.export.evict.enabled=false
arender.endpoint.metrics.export.alter.document.enabled=false
arender.endpoint.metrics.export.annotation.enabled=false
arender.endpoint.metrics.export.compare.enabled=false
arender.endpoint.metrics.export.named.destination=false
arender.endpoint.metrics.export.get.file.chunk.enabled=false
arender.endpoint.metrics.export.weather.enabled=false
arender.endpoint.metrics.export.readiness.enabled=false
arender.endpoint.metrics.export.signature.enabled=false
arender.endpoint.metrics.export.printable.pdf.enabled=false
arender.endpoint.metrics.export.opening.time.enabled=false
arender.endpoint.metrics.export.url.parsing.enabled=false
arender.endpoint.metrics.export.document.accessor.enabled=false
arender.endpoint.metrics.export.document.size.enabled=false

# Whitelist tags to be exported, comma separated
arender.endpoint.metrics.export.whitelist.tags=host,mimeType

# Blacklist tags to be exported from system meter (jvm, process, http, tomcat, etc)
arender.system.metrics.export.blacklist.tags=

# Metric tool to time or count the request. Possible values : TIMER, COUNTER
arender.metric.meter.tool=COUNTER

Vous trouverez plus bas, la liste des noms de métriques ainsi que les tags/dimensions envoyés, pouvant être utilisés pour “whitelister” les tags à envoyer.

Propriété Rendition

Vous trouverez ci-dessous la liste des propriétés permettant de désactiver les métriques ainsi que mettre sur liste blanche les tags à envoyer.

Note : Ce sont les mêmes propriétés pour chacun des services de la rendition.

application.properties
# ARender endpoint metrics export
arender.endpoint.metrics.export.has.document.enabled=false
arender.endpoint.metrics.export.bookmarks.enabled=false
arender.endpoint.metrics.export.document.layout.enabled=false
arender.endpoint.metrics.export.load.document.content.enabled=false
arender.endpoint.metrics.export.get.file.chunk.enabled=false
arender.endpoint.metrics.export.text.position.enabled=false
arender.endpoint.metrics.export.document.annotation.enabled=false
arender.endpoint.metrics.export.transformation.enabled=false
arender.endpoint.metrics.export.document.metadata.enabled=false
arender.endpoint.metrics.export.image.enabled=false
arender.endpoint.metrics.export.page.contents.enabled=false
arender.endpoint.metrics.export.search.enabled=false
arender.endpoint.metrics.export.advanced.search.enabled=false
arender.endpoint.metrics.export.load.document.enabled=false
arender.endpoint.metrics.export.evict.enabled=false
arender.endpoint.metrics.export.annotation.enabled=false
arender.endpoint.metrics.export.compare.enabled=false
arender.endpoint.metrics.export.named.destination=false
arender.endpoint.metrics.export.weather.enabled=false
arender.endpoint.metrics.export.readiness.enabled=false
arender.endpoint.metrics.export.signature.enabled=false
arender.endpoint.metrics.export.printable.pdf.enabled=false
arender.endpoint.metrics.export.convert.enabled=false
arender.endpoint.metrics.export.health.record.enabled=false

# Whitelist tags to be exported, comma separated
arender.endpoint.metrics.export.whitelist.tags=host,mimeType
arender.endpoint.metrics.export.correlation.id.tag.enabled=false

# Blacklist tags to be exported from system meter (jvm, process, http, tomcat, etc)
arender.system.metrics.export.blacklist.tags=

# Metric tool to time or count the request. Possible values : TIMER, COUNTER
arender.metric.meter.tool=COUNTER

Liste de toutes les métriques

Vous trouverez ci-dessous la liste de toutes les métriques envoyées au système de monitoring configuré :

Nom Tags / Dimensions
arender.annotation.accessor documentId
arender.annotation.convert.annotations sourceType, targetType, documentId, Accept
arender.annotation.extract documentId
arender.annotation.search.text documentId
arender.application.opening.time documentId, mimetype
arender.comparison.post.comparison comparisonRequest
arender.comparison.get.comparisonOrder comparisonOrderId
arender.comparison.get.difference leftDocumentId, rightDocumentId
arender.conversion.get.conversion.order conversionOrderId
arender.conversion.post.conversion.order conversionOrderRequest
arender.conversion.delete.all.conversion.order
arender.conversion.delete.conversion.order conversionOrderId
arender.document documentId
arender.document.accessor documentId, selector
arender.document.accessor.content.raw documentId, selector
arender.document.advanced.search documentId
arender.document.advanced.search.page documentId
arender.document.alter documentIds
arender.document.bookmarks documentId
arender.document.compare documentIdLeft, documentIdRight
arender.document.compare.image documentIdLeft, documentIdRight
arender.document.content documentId, format
arender.document.convert documentId, mimeType
arender.document.printable.document documentId
arender.document.document.annotations documentId
arender.document.document.check documentId
arender.document.evict documentId
arender.document.file.chunk documentId, format, range
arender.document.image documentId, page, pageDescription, pageWidth, pageRotation
arender.document.image.svg documentId, page, pageDescription , pageWidth, pageRotation
arender.document.layout documentId
arender.document.layout.progressive.update documentId
arender.document.load
arender.document.accessor.load
arender.document.metadata documentId
arender.document.named.destinations documentId
arender.document.opening documentId, mimeType
arender.document.opening.time documentId, mimeType
arender.document.page.contents documentId, page
arender.document.page.search.result documentId, searchText, caseSensitive, accentSensitive, regex
arender.document.search.page documentId
arender.document.search.page.for.text.position documentId, searchText, page, caseSensitive, accentSensitive, regex
arender.document.search.pages documentId
arender.document.signatures documentId
arender.document.text.position documentId, page
arender.document.upload documentId, mimeType, documentTitle, documentUrl
arender.document.upload.document.layout documentLayout
arender.health.readiness
arender.health.record
arender.transformation.all.transformation.order
arender.transformation.delete.all.transformation.order
arender.transformation.delete.transformation.order transformationOrderId
arender.transformation.post.transformation.order transformationRequest
arender.transformation.get.transformation.order transformationOrderId, timeoutMs
arender.weather

Toutes ces propriétés ont des tags/dimensions en communs : exceptionClass, exceptionMessage, host et correlationId. Les tags exceptionClass et exceptionMessage ne sont ajoutés aux métriques que s’ils ne sont pas vide ou null.

Exemples

Prometheus

Pour activer l’envoie des métriques côté Web-UI, il suffit, tout d’abord d’indiquer le registry souhaité parmi les 3 registry possibles : prometheus, elastic et datadog. Puis d’activer l’export sur le système de monitoring souhaité.

Ici, nous utiliserons Prometheus.

arender-server-default.properties
arender.server.meter.registry.name=prometheus
arender.server.export.prometheus.enabled=true

Ensuite, il faudra indiquer dans la configuration du serveur Prometheus le end point sur lequel il doit récupérer les métriques. Les métriques de Prometheus côté Web-UI sont exposées sur le end point /arendergwt/prometheus ainsi que le host/port sur lequel est déployé ARender Web-UI. Vous devriez avoir quelque chose de similaire à cette configuration ci-dessous :

<PROMETHEUS_SERVER_PATH>/prometheus.yaml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    metrics_path: '/arendergwt/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:8080"]

Par ailleurs, pour la partie rendition, il suffit d’activer l’export des métriques sur Prometheus sur chacun des services de rendition.

application.properties
management.endpoint.prometheus.enabled=true

De la même manière que la partie Web-UI, il faut également indiquer le end point sur lequel les métriques sont exposées. Côté rendition, cela est exposé sur le end point /actuator/prometheus.

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:8761"]
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:19999"]
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:8899"]
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:9091"]