Métricas de tiempo de ejecución de OpenTelemetry

Información general

Las métricas de tiempo de ejecución proporcionan información sobre el rendimiento de las aplicaciones, incluido el uso de memoria, la recopilación de elementos no usados y la paralelización. Las bibliotecas de rastreo de Datadog ofrece recopilación de métricas de tiempo de ejecución para cada lenguaje compatible, y OpenTelemetry (OTel) también recopila métricas de tiempo de ejecución compatibles que pueden enviarse a Datadog a través de los SDKs de OpenTelemetry.

Compatibilidad

Datadog es compatible con las métricas en tiempo de ejecución de OpenTelemetry para los siguientes lenguajes:

  • Java
  • .NET
  • Go

Para más detalles sobre la asignación de métricas de host y contenedor, véase OpenTelemetry Metrics Mapping.

Instrucciones de instalación

1. Requisitos previos

2. Configurar la aplicación

Selecciona tu lenguaje para ver las instrucciones de configuración del SDK de OpenTelemetry para enviar métricas en tiempo de ejecución:

Instrumentación automática

Si utilizas instrumentación automática de OpenTelemetry para aplicaciones Java, las métricas de tiempo de ejecución están activadas por defecto.

Instrumentación manual

Si utilizas instrumentación manual de OpenTelemetry, sigue las guías para tu versión de Java:

Las aplicaciones de OpenTelemetry Go son instrumentadas manualmente. Para activar las métricas en tiempo de ejecución, consulta la documentación del paquete de tiempo de ejecución.

La versión mínima compatible del SDK de .NET OpenTelemetry es 1.5.0

Instrumentación automática

Si utilizas instrumentación automática de OpenTelemetry para aplicaciones .NET, las métricas de tiempo de ejecución están activadas por defecto.

Instrumentación manual

Si utilizas instrumentación manual de OpenTelemetry, consulta la documentación de biblioteca OpenTelemetry.Instrumentation.Runtime.

Intervalo de exportación de métricas

El intervalo de exportación predeterminado de métricas para el SDK de .NET OTel es diferente del intervalo predeterminado del SDK de Datadog .NET. Datadog recomienda configurar la variable de entorno OTEL_METRIC_EXPORT_INTERVAL en tu servicio de .NET para que coincida con el intervalo de exportación predeterminado de métricas de Datadog:

OTEL_METRIC_EXPORT_INTERVAL=10000

Ver dashboards de métricas de tiempo de ejecución

Una vez finalizada la configuración, puedes ver las métricas de tiempo de ejecución en:

  • La página de detalles del servicio (véase el ejemplo de Java a continuación)
  • La pestaña de métricas de la gráfica de llamas
  • Dashboard de tiempo de ejecución por defecto
Página de servicios que muestra las métricas de tiempo de ejecución de OpenTelemetry en la pestaña de Métricas de JVM

Datos recopilados

Cuando se utilizan las métricas en tiempo de ejecución de OpenTelemetry con Datadog, se reciben ambas:

  • Métricas originales en tiempo de ejecución de OpenTelemetry
  • Métricas de tiempo de ejecución de Datadog asignadas para métricas equivalentes

Las métricas en tiempo de ejecución de OpenTelemetry tienen los siguientes prefijos basados en su fuente:

FuentePrefijo
OTel Collector Datadog Exporterotel.process.runtime.*
Datadog Agent OTLP Ingestprocess.runtime.*

Las siguientes tablas enumeran las métricas de tiempo de ejecución de Datadog que son compatibles a través de la asignación de OpenTelemetry. “N/A” indica que no hay métrica equivalente de OpenTelemetry disponible.

Las métricas en tiempo de ejecución de OpenTelemetry se asignan a Datadog por el nombre métrica. No cambies el nombre de las métricas de host por métricas de tiempo de ejecución de OpenTelemetry, ya que esto rompe la asignación.
Métrica de DatadogDescripciónMétrica de OpenTelemetry
jvm.heap_memoryEl total de memoria heap utilizada en Java.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.heap_memory_committedEl total de memoria heap comprometida en Java para ser utilizada.process.runtime.jvm.memory.committed
jvm.memory.committed
jvm.heap_memory_initLa memoria heap inicial de Java asignada.process.runtime.jvm.memory.init
jvm.memory.init
jvm.heap_memory_maxLa memoria heap máxima disponible en Java.process.runtime.jvm.memory.limit
jvm.memory.limit
jvm.non_heap_memoryEl total de memoria no heap de Java utilizada. La memoria no heap es: Metaspace + CompressedClassSpace + CodeCache.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.non_heap_memory_committedEl total de memoria no heap comprometida en Java para ser utilizada.process.runtime.jvm.memory.committed
jvm.memory.committed
jvm.non_heap_memory_initLa memoria no heap inicial de Java asignada.process.runtime.jvm.memory.init
jvm.memory.init
jvm.non_heap_memory_maxLa memoria no heap máxima disponible en Java.process.runtime.jvm.memory.limit
jvm.memory.limit
jvm.gc.old_gen_sizeEl uso actual de memoria heap de Java del grupo de memoria Old Generation.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.eden_sizeEl uso actual de memoria heap de Java del grupo de memoria Eden.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.survivor_sizeEl uso actual de memoria heap de Java del grupo de memoria Survivor.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.metaspace_sizeEl uso actual de memoria no heap de Java del grupo de memoria Metaspace.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.thread_countEl número de subprocesos en directo.process.runtime.jvm.threads.count
jvm.thread.count
jvm.loaded_classesNúmero de clases cargadas actualmente.process.runtime.jvm.classes.current_loaded
jvm.class.count
jvm.cpu_load.systemUso reciente de la CPU para todo el sistema.process.runtime.jvm.system.cpu.utilization
jvm.system.cpu.utilization
jvm.cpu_load.processUso reciente de la CPU en proceso.process.runtime.jvm.cpu.utilization
jvm.cpu.recent_utilization
jvm.buffer_pool.direct.usedMedida de la memoria utilizada por buffers.process.runtime.jvm.buffer.usage
jvm.buffer.memory.usage
jvm.buffer_pool.direct.countNúmero de buffers directos en el grupo.process.runtime.jvm.buffer.count
jvm.buffer.count
jvm.buffer_pool.direct.limitMedida de la capacidad total de memoria de buffers directos.process.runtime.jvm.buffer.limit
jvm.buffer.memory.limit
jvm.buffer_pool.mapped.usedMedida de la memoria utilizada por los buffers asignados.process.runtime.jvm.buffer.usage
jvm.buffer.memory.usage
jvm.buffer_pool.mapped.countNúmero de buffers asignados en el grupo.process.runtime.jvm.buffer.count
jvm.buffer.count
jvm.buffer_pool.mapped.limitMedida de la capacidad total de memoria de buffers asignados.process.runtime.jvm.buffer.limit
jvm.buffer.memory.limit
jvm.gc.parnew.timeEl tiempo acumulado aproximado de recopilación de elementos no usados transcurrido.N/A
jvm.gc.cms.countEl número total de recopilaciones de elementos no usados que se han producido.N/A
jvm.gc.major_collection_countEl índice de las principales recopilaciones de elementos no usados. Configura new_gc_metrics: true para recibir esta métrica.N/A
jvm.gc.minor_collection_countLa tasa de recopilaciones secundarias de elementos no usados. Establece new_gc_metrics: true para recibir esta métrica.N/A
jvm.gc.major_collection_timeLa fracción de tiempo empleado en la recopilación principal de elementos no usados. Configura new_gc_metrics: true para recibir esta métrica.N/A
jvm.gc.minor_collection_timeLa fracción de tiempo empleado en la recopilación secundaria de elementos no usados. Configura new_gc_metrics: true para recibir esta métrica.N/A
jvm.os.open_file_descriptorsEl número de descriptores de archivo abiertos.N/A
Métrica de DatadogDescripciónMétrica de OpenTelemetry
runtime.go.num_goroutineNúmero de goroutines generadas.process.runtime.go.goroutines
runtime.go.num_cgo_callNúmero de llamadas CGO realizadas.process.runtime.go.cgo.calls
runtime.go.mem_stats.lookupsNúmero de búsquedas de punteros realizadas por el tiempo de ejecución.process.runtime.go.mem.lookups
runtime.go.mem_stats.heap_allocBytes de objetos heap asignados.process.runtime.go.mem.heap_alloc
runtime.go.mem_stats.heap_sysBytes de memoria heap obtenidos del sistema operativo.process.runtime.go.mem.heap_sys
runtime.go.mem_stats.heap_idleBytes en tramos (spans) en reposo (no utilizados).process.runtime.go.mem.heap_idle
runtime.go.mem_stats.heap_inuseBytes de tramos en uso.process.runtime.go.mem.heap_inuse
runtime.go.mem_stats.heap_releasedBytes de memoria física devueltos al sistema operativo.process.runtime.go.mem.heap_released
runtime.go.mem_stats.heap_objectsNúmero de objetos heap asignados.process.runtime.go.mem.heap_objects
runtime.go.mem_stats.pause_total_nsNanosegundos acumulados en la recopilación de elementos no usados (GC).process.runtime.go.gc.pause_total_ns
runtime.go.mem_stats.num_gcNúmero de ciclos de GC completados.process.runtime.go.gc.count
runtime.go.num_cpuNúmero de CPUs detectadas por el tiempo de ejecución.N/A
runtime.go.mem_stats.allocBytes de objetos heap asignados.N/A
runtime.go.mem_stats.total_allocBytes acumulados asignados a objetos heap.N/A
runtime.go.mem_stats.sysTotal de bytes de memoria obtenidos del sistema operativo.N/A
runtime.go.mem_stats.mallocsRecuento acumulativo de objetos heap asignados.N/A
runtime.go.mem_stats.freesRecuento acumulativo de objetos heap liberados.N/A
runtime.go.mem_stats.stack_inuseBytes en tramos de stack.N/A
runtime.go.mem_stats.stack_sysBytes de memoria de stack obtenidos del sistema operativo.N/A
runtime.go.mem_stats.m_span_inuseBytes de las estructuras mspan asignadas.N/A
runtime.go.mem_stats.m_span_sysBytes de memoria obtenidos del sistema operativo para las estructuras mspan.N/A
runtime.go.mem_stats.m_cache_inuseBytes de estructuras mcache asignadas.N/A
runtime.go.mem_stats.m_cache_sysBytes de memoria obtenidos del sistema operativo para las estructuras mcache.N/A
runtime.go.mem_stats.buck_hash_sysBytes de memoria en tablas hash de buckets de perfiles.N/A
runtime.go.mem_stats.gc_sysBytes de memoria en metadatos de recopilación de elementos no usados.N/A
runtime.go.mem_stats.other_sysBytes de memoria en miscelánea fuera de heap.N/A
runtime.go.mem_stats.next_gcTamaño de heap objetivo del siguiente ciclo de GC.N/A
runtime.go.mem_stats.last_gcÚltima recopilación de elementos no usados finalizada, en nanosegundos desde la epoch de UNIX.N/A
runtime.go.mem_stats.num_forced_gcNúmero de ciclos de GC forzados por la aplicación que llama a la función de GC.N/A
runtime.go.mem_stats.gc_cpu_fractionFracción del tiempo de CPU disponible de este programa utilizado por la GC desde que se inició el programa.N/A
runtime.go.gc_stats.pause_quantiles.minDistribución de los tiempos de pausa de la GC: valores mínimos.N/A
runtime.go.gc_stats.pause_quantiles.25pDistribución de los tiempos de pausa de la GC: percentil 25.N/A
runtime.go.gc_stats.pause_quantiles.50pDistribución de los tiempos de pausa de la GC: percentil 50.N/A
runtime.go.gc_stats.pause_quantiles.75pDistribución de los tiempos de pausa de la GC: percentil 75.N/A
runtime.go.gc_stats.pause_quantiles.maxDistribución de los tiempos de pausa de la GC: valores máximos.N/A
Métrica de DatadogDescripciónMétrica de OpenTelemetry
runtime.dotnet.threads.contention_countEl número de veces que un subproceso se detuvo para esperar un bloqueo.process.runtime.dotnet.
monitor.lock_contention.count
runtime.dotnet.exceptions.countEl número de excepciones por primera vez.process.runtime.dotnet.
exceptions.count
runtime.dotnet.gc.size.gen0El tamaño del heap de generación 0.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.gen1El tamaño del heap de generación 1.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.gen2El tamaño del heap de generación 2.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.lohEl tamaño del heap de grandes objetos.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.count.gen0El número de recopilaciones de elementos no usados de generación 0.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.gc.count.gen1El número de recopilaciones de elementos no usados de generación 1.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.gc.count.gen2El número de recopilaciones de elementos no usados de generación 2.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.cpu.systemEl número de milisegundos de ejecución en el kernel.N/A
runtime.dotnet.cpu.userEl número de milisegundos de ejecución fuera del kernel.N/A
runtime.dotnet.cpu.percentEl porcentaje de CPU total utilizado por la aplicación.N/A
runtime.dotnet.mem.committedUso de memoria.N/A
runtime.dotnet.threads.countEl número de subprocesos.N/A
runtime.dotnet.threads.workers_countEl número de trabajadores en el grupo de subprocesos. (Solo.NET Core)N/A
runtime.dotnet.threads.contention_timeEl tiempo acumulado que pasan los subprocesos esperando un bloqueo. (Solo .NET Core)N/A
runtime.dotnet.gc.memory_loadEl porcentaje de la memoria total utilizada por el proceso. La recopilación de elementos no usados (GC) cambia su comportamiento cuando este valor supera el 85. (Solo .NET Core)N/A
runtime.dotnet.gc.pause_timeLa cantidad de tiempo que la GC pausó los subprocesos de la aplicación. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
requests.total
El número total de solicitudes HTTP recibidas por el servidor. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
requests.failed
El número de solicitudes HTTP fallidas recibidas por el servidor. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
requests.current
El número total de solicitudes HTTP que se han iniciado, pero aún no se han detenido. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
requests.queue_length
La longitud actual de la cola de solicitudes HTTP del servidor. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
connections.total
El número total de conexiones HTTP establecidas con el servidor. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
connections.current
El número actual de conexiones HTTP activas al servidor. (Solo .NET Core)N/A
runtime.dotnet.aspnetcore.
connections.queue_length
La longitud actual de la cola de conexión del servidor HTTP. (Solo .NET Core)N/A

Referencias adicionales