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.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 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.
# 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.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 :
# 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.
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"]