Métriques de runtime OpenTelemetry

Section Overview

Les métriques runtime fournissent des informations sur les performances des applications, notamment l’utilisation de la mémoire, la collecte des déchets et la parallélisation. Les bibliothèques de traçage de Datadog proposent la collecte de métriques runtime pour chaque langage pris en charge, et OpenTelemetry (OTel) collecte également des métriques runtime compatibles pouvant être envoyées à Datadog via les SDK OpenTelemetry.

Compatibilité

Datadog prend en charge les métriques runtime OpenTelemetry pour les langages suivants :

  • Java
  • .NET
  • Go

Pour en savoir plus sur le mappage des métriques de host et de conteneur, consultez la page Mappage des métriques OpenTelemetry.

Instructions de configuration

1. Prérequis

2. Configurer votre application

Sélectionnez votre langage pour afficher les instructions de configuration du SDK OpenTelemetry afin d’envoyer des métriques runtime :

Instrumentation automatique

Si vous utilisez l’instrumentation automatique OpenTelemetry pour les applications Java, les métriques runtime sont activées par défaut.

Instrumentation manuelle

Si vous utilisez l’instrumentation manuelle OpenTelemetry, suivez les guides correspondant à votre version de Java :

Les applications OpenTelemetry Go sont instrumentées manuellement. Pour activer les métriques runtime, consultez la documentation du package runtime.

La version minimale prise en charge du SDK OpenTelemetry pour .NET est la 1.5.0

Instrumentation automatique

Si vous utilisez l’instrumentation automatique OpenTelemetry pour les applications .NET, les métriques runtime sont activées par défaut.

Instrumentation manuelle

Si vous utilisez l’instrumentation manuelle OpenTelemetry, consultez la documentation de la bibliothèque OpenTelemetry.Instrumentation.Runtime.

Intervalle d’export des métriques

L’intervalle d’export des métriques par défaut pour le SDK OTel .NET diffère de celui du SDK Datadog .NET. Datadog recommande de définir la variable d’environnement OTEL_METRIC_EXPORT_INTERVAL sur votre service .NET afin de l’aligner sur l’intervalle d’export des métriques par défaut de Datadog :

OTEL_METRIC_EXPORT_INTERVAL=10000

Afficher les dashboards de métriques runtime

Une fois la configuration terminée, vous pouvez afficher les métriques runtime dans :

  • La page de détails du service (exemple avec Java ci-dessous)
  • L’onglet des métriques du flame graph
  • Dashboards runtime par défaut
Page des services affichant les métriques runtime OpenTelemetry dans l'onglet JVM Metrics

Données collectées

Lorsque vous utilisez les métriques runtime OpenTelemetry avec Datadog, vous recevez à la fois :

  • Les métriques runtime OpenTelemetry d’origine
  • Les métriques runtime Datadog mappées pour les métriques équivalentes

Les métriques runtime OpenTelemetry ont les préfixes suivants selon leur source :

SourcePréfixe
Exportateur Datadog pour le Collector OTelotel.process.runtime.*
Ingestion OTLP par l’Agent Datadogprocess.runtime.*

Les tableaux suivants listent les métriques runtime Datadog prises en charge via le mapping OpenTelemetry. “N/A” signifie qu’il n’existe pas de métrique équivalente dans OpenTelemetry.

Les métriques runtime OpenTelemetry sont mappées vers Datadog par nom de métrique. Ne renommez pas les métriques host pour les métriques runtime OpenTelemetry, car cela rompt le mapping.
Métrique DatadogRôleMétrique OpenTelemetry
jvm.heap_memoryLa mémoire totale du tas Java utilisée.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.heap_memory_committedLa mémoire totale du tas Java engagée pour être utilisée.process.runtime.jvm.memory.committed
jvm.memory.committed
jvm.heap_memory_initLa mémoire initiale du tas Java allouée.process.runtime.jvm.memory.init
jvm.memory.init
jvm.heap_memory_maxLa mémoire maximale du tas Java disponible.process.runtime.jvm.memory.limit
jvm.memory.limit
jvm.non_heap_memoryLa mémoire non-tas Java totale utilisée. La mémoire non-tas correspond à : Metaspace + CompressedClassSpace + CodeCache.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.non_heap_memory_committedLa mémoire non-tas Java totale engagée pour être utilisée.process.runtime.jvm.memory.committed
jvm.memory.committed
jvm.non_heap_memory_initLa mémoire non-tas Java initiale allouée.process.runtime.jvm.memory.init
jvm.memory.init
jvm.non_heap_memory_maxLa mémoire non-tas Java maximale disponible.process.runtime.jvm.memory.limit
jvm.memory.limit
jvm.gc.old_gen_sizeL’utilisation actuelle de la mémoire du tas Java du pool Old Generation.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.eden_sizeL’utilisation actuelle de la mémoire du tas Java du pool Eden.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.survivor_sizeL’utilisation actuelle de la mémoire du tas Java du pool Survivor.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.metaspace_sizeL’utilisation actuelle de la mémoire non-tas Java du pool Metaspace.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.thread_countLe nombre de threads actifs.process.runtime.jvm.threads.count
jvm.thread.count
jvm.loaded_classesNombre de classes actuellement chargées.process.runtime.jvm.classes.current_loaded
jvm.class.count
jvm.cpu_load.systemUtilisation récente du CPU pour l’ensemble du système.process.runtime.jvm.system.cpu.utilization
jvm.system.cpu.utilization
jvm.cpu_load.processUtilisation récente du CPU pour le processus.process.runtime.jvm.cpu.utilization
jvm.cpu.recent_utilization
jvm.buffer_pool.direct.usedMesure de la mémoire utilisée par les buffers directs.process.runtime.jvm.buffer.usage
jvm.buffer.memory.usage
jvm.buffer_pool.direct.countNombre de buffers directs dans le pool.process.runtime.jvm.buffer.count
jvm.buffer.count
jvm.buffer_pool.direct.limitMesure de la capacité mémoire totale des buffers directs.process.runtime.jvm.buffer.limit
jvm.buffer.memory.limit
jvm.buffer_pool.mapped.usedMesure de la mémoire utilisée par les buffers mappés.process.runtime.jvm.buffer.usage
jvm.buffer.memory.usage
jvm.buffer_pool.mapped.countNombre de buffers mappés dans le pool.process.runtime.jvm.buffer.count
jvm.buffer.count
jvm.buffer_pool.mapped.limitMesure de la capacité mémoire totale des buffers mappés.process.runtime.jvm.buffer.limit
jvm.buffer.memory.limit
jvm.gc.parnew.timeLe temps approximatif cumulé écoulé pour la collecte des déchets.S. O.
jvm.gc.cms.countLe nombre total de collectes des déchets effectuées.S. O.
jvm.gc.major_collection_countLe taux de collectes majeures des déchets. Activez new_gc_metrics: true pour recevoir cette métrique.S. O.
jvm.gc.minor_collection_countLe taux de collectes mineures des déchets. Activez new_gc_metrics: true pour recevoir cette métrique.S. O.
jvm.gc.major_collection_timeLa fraction de temps passée en collecte majeure des déchets. Activez new_gc_metrics: true pour recevoir cette métrique.S. O.
jvm.gc.minor_collection_timeLa fraction de temps passée en collecte mineure des déchets. Activez new_gc_metrics: true pour recevoir cette métrique.S. O.
jvm.os.open_file_descriptorsLe nombre de descripteurs de fichiers ouverts.S. O.
Métrique DatadogRôleMétrique OpenTelemetry
runtime.go.num_goroutineNombre de goroutines créées.process.runtime.go.goroutines
runtime.go.num_cgo_callNombre d’appels CGO effectués.process.runtime.go.cgo.calls
runtime.go.mem_stats.lookupsNombre de recherches de pointeurs effectuées par le runtime.process.runtime.go.mem.lookups
runtime.go.mem_stats.heap_allocOctets alloués pour les objets du tas.process.runtime.go.mem.heap_alloc
runtime.go.mem_stats.heap_sysOctets de mémoire du tas obtenus auprès du système d’exploitation.process.runtime.go.mem.heap_sys
runtime.go.mem_stats.heap_idleOctets dans les spans inactives (non utilisées).process.runtime.go.mem.heap_idle
runtime.go.mem_stats.heap_inuseOctets dans les spans utilisées.process.runtime.go.mem.heap_inuse
runtime.go.mem_stats.heap_releasedOctets de mémoire physique retournés au système d’exploitation.process.runtime.go.mem.heap_released
runtime.go.mem_stats.heap_objectsNombre d’objets alloués dans le tas.process.runtime.go.mem.heap_objects
runtime.go.mem_stats.pause_total_nsNanosecondes cumulées en collecte des déchets (GC).process.runtime.go.gc.pause_total_ns
runtime.go.mem_stats.num_gcNombre de cycles de GC terminés.process.runtime.go.gc.count
runtime.go.num_cpuNombre de CPU détectés par le runtime.S. O.
runtime.go.mem_stats.allocOctets alloués pour les objets du tas.S. O.
runtime.go.mem_stats.total_allocOctets cumulés alloués pour les objets du tas.S. O.
runtime.go.mem_stats.sysTotal des octets de mémoire obtenus auprès du système d’exploitation.S. O.
runtime.go.mem_stats.mallocsNombre cumulé d’objets du tas alloués.S. O.
runtime.go.mem_stats.freesNombre cumulé d’objets du tas libérés.S. O.
runtime.go.mem_stats.stack_inuseOctets dans les spans de pile.S. O.
runtime.go.mem_stats.stack_sysOctets de mémoire de pile obtenus auprès du système d’exploitation.S. O.
runtime.go.mem_stats.m_span_inuseOctets alloués pour les structures mspan.S. O.
runtime.go.mem_stats.m_span_sysOctets de mémoire obtenus auprès du système d’exploitation pour les structures mspan.S. O.
runtime.go.mem_stats.m_cache_inuseOctets alloués pour les structures mcache.S. O.
runtime.go.mem_stats.m_cache_sysOctets de mémoire obtenus auprès du système d’exploitation pour les structures mcache.S. O.
runtime.go.mem_stats.buck_hash_sysOctets de mémoire dans les tables de hachage des buckets de profilage.S. O.
runtime.go.mem_stats.gc_sysOctets de mémoire dans les métadonnées de collecte des déchets.S. O.
runtime.go.mem_stats.other_sysOctets de mémoire dans la mémoire hors tas diversifiée.S. O.
runtime.go.mem_stats.next_gcTaille cible du tas pour le prochain cycle de GC.S. O.
runtime.go.mem_stats.last_gcDernière collecte des déchets terminée, en nanosecondes depuis l’époque UNIX.S. O.
runtime.go.mem_stats.num_forced_gcNombre de cycles de GC forcés par l’application appelant la fonction GC.S. O.
runtime.go.mem_stats.gc_cpu_fractionFraction du temps CPU disponible pour ce programme utilisée par la GC depuis le démarrage du programme.S. O.
runtime.go.gc_stats.pause_quantiles.minDistribution des temps de pause GC : valeurs minimales.S. O.
runtime.go.gc_stats.pause_quantiles.25pDistribution des temps de pause GC : 25e percentile.S. O.
runtime.go.gc_stats.pause_quantiles.50pDistribution des temps de pause GC : 50e percentile.S. O.
runtime.go.gc_stats.pause_quantiles.75pDistribution des temps de pause GC : 75e percentile.S. O.
runtime.go.gc_stats.pause_quantiles.maxDistribution des temps de pause GC : valeurs maximales.S. O.
Métrique DatadogRôleMétrique OpenTelemetry
runtime.dotnet.threads.contention_countNombre de fois où un thread s’est arrêté pour attendre un verrou.process.runtime.dotnet.
monitor.lock_contention.count
runtime.dotnet.exceptions.countLe nombre d’exceptions de premier niveau.process.runtime.dotnet.
exceptions.count
runtime.dotnet.gc.size.gen0La taille du tas génération 0.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.gen1La taille du tas génération 1.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.gen2La taille du tas génération 2.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.lohLa taille du tas des gros objets.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.count.gen0Le nombre de collectes des déchets génération 0.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.gc.count.gen1Le nombre de collectes des déchets génération 1.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.gc.count.gen2Le nombre de collectes des déchets génération 2.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.cpu.systemLe nombre de millisecondes passées en exécution dans le noyau.S. O.
runtime.dotnet.cpu.userLe nombre de millisecondes passées en exécution hors noyau.S. O.
runtime.dotnet.cpu.percentLe pourcentage du CPU total utilisé par l’application.S. O.
runtime.dotnet.mem.committedUtilisation de la mémoire.S. O.
runtime.dotnet.threads.countLe nombre de threads.S. O.
runtime.dotnet.threads.workers_countLe nombre de workers dans le threadpool (uniquement .NET Core).S. O.
runtime.dotnet.threads.contention_timeLe temps cumulé passé par les threads à attendre un verrou (uniquement .NET Core).S. O.
runtime.dotnet.gc.memory_loadLe pourcentage d’utilisation totale de la mémoire par le processus. Le processus de garbage collection (GC) modifie son comportement lorsque cette valeur est supérieure à 85. (.NET Core uniquement)S. O.
runtime.dotnet.gc.pause_timeLa durée pendant laquelle la GC a suspendu les threads de l’application (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
requests.total
Le nombre total de requêtes HTTP reçues par le serveur (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
requests.failed
Le nombre de requêtes HTTP échouées reçues par le serveur (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
requests.current
Le nombre total de requêtes HTTP démarrées mais pas encore terminées (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
requests.queue_length
La longueur actuelle de la file d’attente des requêtes HTTP du serveur (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
connections.total
Le nombre total de connexions HTTP établies avec le serveur (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
connections.current
Le nombre actuel de connexions HTTP actives avec le serveur (uniquement .NET Core).S. O.
runtime.dotnet.aspnetcore.
connections.queue_length
La longueur actuelle de la file d’attente des connexions HTTP du serveur (uniquement .NET Core).S. O.

Pour aller plus loin