OpenTelemetry 런타임 메트릭

개요

런타임 메트릭은 메모리 사용량, 가비지 수집, 병렬화 등 애플리케이션 성능에 관한 인사이트를 제공합니다. Datadog 추적 라이브러리는 지원되는 각 언어에 런타임 메트릭 수집 서비스를 제공하며, OpenTelemetry(OTel)도 OpenTelemetry SDK를 통해 Datadog로 전송할 수 있는 호환되는 런타임 메트릭을 수집합니다.

호환성

Datadog는 다음 언어에 OpenTelemetry 런타임 메트릭을 지원합니다.

  • Java
  • .NET
  • Go

호스트 및 컨테이너 메트릭 매핑에 관한 자세한 내용은 OpenTelemetry 메트릭 매핑을 참조하세요.

설정 지침

1. 사전 요건

2. 애플리케이션 설정

런타임 메트릭을 전송하도록 OpenTelemetry SDK를 설정하기 위한 지침을 보려면 언어를 선택하세요.

자동 계측

If you use OpenTelemetry automatic instrumentation for Java applications, runtime metrics are enabled by default.

수동 계측

If you use OpenTelemetry manual instrumentation, follow the guides for your Java version:

OpenTelemetry Go applications are instrumented manually. To enable runtime metrics, see the documentation for the runtime package.

The minimum supported version of the .NET OpenTelemetry SDK is 1.5.0

자동 계측

.NET 애플리케이션에 OpenTelemetry 자동 계측을 사용하는 경우 런타임 메트릭이 기본적으로 활성화됩니다.

수동 계측

OpenTelemetry 매뉴얼 계측을 사용하는 경우 OpenTelemetry.Instrumentation.Runtime 라이브러리 설명서를 참조하세요.

메트릭 내보내기 간격

.NET OTel SDK의 기본 메트릭 내보내기 간격은 Datadog.NET SDK의 기본값과 다릅니다. Datadog는 .NET 서비스에서 OTEL_METRIC_EXPORT_INTERVAL 환경 변수를 기본 Datadog 메트릭 내보내기 간격과 일치하도록 설정할 것을 권장합니다.

OTEL_METRIC_EXPORT_INTERVAL=10000

런타임 메트릭 대시보드 보기

설정이 완료되면 런타임 메트릭을 볼 수 있습니다.

  • 서비스 상세 정보 페이지(아래 Java 예시 참조)
  • 플레임 그래프 메트릭 탭
  • 기본값 런타임 대시보드
JVM 메트릭 탭에서 OpenTelemetry 런타임 메트릭을 표시하는 서비스 페이지

수집한 데이터

Datadog와 함께 OpenTelemetry 런타임 메트릭을 사용하는 경우 다음 두 항목 모두를 수신하게 됩니다.

  • 원본 OpenTelemetry 런타임 메트릭
  • 동등한 메트릭의 Datadog 런타임 메트릭 매핑

OpenTelemetry 런타임 메트릭에는 소스에 따라 다음과 같은 접두사가 붙습니다.

소스접두사
OTel Collector Datadog Exporterotel.process.runtime.*
Datadog Agent OTLP Ingestprocess.runtime.*

다음은 OpenTelemetry 매핑을 통해 지원되는 Datadog 런타임 메트릭 목록입니다. “N/A"는 메트릭에 해당하는 OpenTelemetry가 없음을 나타냅니다.

OpenTelemetry 런타임 메트릭은 메트릭 이름별로 Datadog에 매핑됩니다. 매핑이 깨지므로 OpenTelemetry 런타임 메트릭의 호스트 메트릭 이름을 바꾸지 마세요.
Datadog 메트릭설명OpenTelemetry 메트릭
jvm.heap_memory사용된 Java 힙(heap) 메모리입니다.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.heap_memory_committed사용하기 위해 커밋된 총 Java 힙 메모리입니다.process.runtime.jvm.memory.committed
jvm.memory.committed
jvm.heap_memory_init할당된 초기 Java 힙 메모리입니다.process.runtime.jvm.memory.init
jvm.memory.init
jvm.heap_memory_max사용 가능한 최대 Java 힙 메모리입니다.process.runtime.jvm.memory.limit
jvm.memory.limit
jvm.non_heap_memory사용된 총 Java 비-힙 메모리입니다. 비-힙 메모리는 Metaspace + CompressedClassSpace + CodeCache입니다.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.non_heap_memory_committed사용하기 위해 커밋된 총 Java 비-힙 메모리입니다.process.runtime.jvm.memory.committed
jvm.memory.committed
jvm.non_heap_memory_init할당된 초기 Java 비-힙 메모리입니다.process.runtime.jvm.memory.init
jvm.memory.init
jvm.non_heap_memory_max사용 가능한 최대 Java 비-힙 메모리입니다.process.runtime.jvm.memory.limit
jvm.memory.limit
jvm.gc.old_gen_size구세대 메모리 풀의 현재 Java 힙 메모리 사용량입니다.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.eden_sizeEden 메모리 풀의 현재 Java 힙 메모리 사용량입니다.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.survivor_sizeSurvivor 메모리 풀의 현재 Java 힙 메모리 사용량입니다.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.gc.metaspace_sizeMetaspace 메모리 풀의 현재 Java 비-힙 메모리 사용량입니다.process.runtime.jvm.memory.usage
jvm.memory.used
jvm.thread_count실시간 스레드 수입니다.process.runtime.jvm.threads.count
jvm.thread.count
jvm.loaded_classes현재 로드된 클래스 수입니다.process.runtime.jvm.classes.current_loaded
jvm.class.count
jvm.cpu_load.system전체 시스템의 최근 CPU 사용률입니다.process.runtime.jvm.system.cpu.utilization
jvm.system.cpu.utilization
jvm.cpu_load.process프로세스의 최근 CPU 사용률process.runtime.jvm.cpu.utilization
jvm.cpu.recent_utilization
jvm.buffer_pool.direct.used직접 버퍼가 사용하는 메모리 측정값입니다.process.runtime.jvm.buffer.usage
jvm.buffer.memory.usage
jvm.buffer_pool.direct.count풀의 직접 버퍼 개수입니다.process.runtime.jvm.buffer.count
jvm.buffer.count
jvm.buffer_pool.direct.limit직접 버퍼의 총 메모리 용량을 측정합니다.process.runtime.jvm.buffer.limit
jvm.buffer.memory.limit
jvm.buffer_pool.mapped.used매핑된 버퍼가 사용하는 메모리 측정값입니다.process.runtime.jvm.buffer.usage
jvm.buffer.memory.usage
jvm.buffer_pool.mapped.count풀에 매핑된 버퍼의 개수입니다.process.runtime.jvm.buffer.count
jvm.buffer.count
jvm.buffer_pool.mapped.limit매핑된 버퍼의 총 메모리 용량을 측정합니다.process.runtime.jvm.buffer.limit
jvm.buffer.memory.limit
jvm.gc.parnew.time경과된 대략적인 누적 가비지 수집 시간입니다.N/A
jvm.gc.cms.count발생한 총 가비지 수집 횟수입니다.N/A
jvm.gc.major_collection_count주요 가비지 수집률입니다. 이 메트릭을 수신하도록 new_gc_metrics: true를 설정합니다.N/A
jvm.gc.minor_collection_count부수적 가비지 수거률입니다. 이 메트릭을 수신하도록 new_gc_metrics: true를 설정합니다.N/A
jvm.gc.major_collection_time주요 가비지 수거에 소요되는 시간 비율입니다. new_gc_metrics: true를 설정하여 메트릭을 수신합니다.N/A
jvm.gc.minor_collection_time부수적 가비지 수거에 소요되는 시간 비율입니다. 이 메트릭을 수신하도록 new_gc_metrics: true를 설정합니다.N/A
jvm.os.open_file_descriptors오픈 파일 디스크립터의 수입니다.N/A
Datadog 메트릭설명OpenTelemetry 메트릭
runtime.go.num_goroutine생성된 goroutine 수입니다.process.runtime.go.goroutines
runtime.go.num_cgo_callCGO 호출 횟수입니다.process.runtime.go.cgo.calls
runtime.go.mem_stats.lookups런타임이 실행한 포인터 조회 횟수입니다.process.runtime.go.mem.lookups
runtime.go.mem_stats.heap_alloc할당된 힙 객체의 바이트 수입니다.process.runtime.go.mem.heap_alloc
runtime.go.mem_stats.heap_sys운영 체제에서 가져온 힙 메모리의 바이트 수입니다.process.runtime.go.mem.heap_sys
runtime.go.mem_stats.heap_idle유휴(사용되지 않은) 스팬의 바이트 수입니다.process.runtime.go.mem.heap_idle
runtime.go.mem_stats.heap_inuse사용 중인 스팬의 바이트 수입니다.process.runtime.go.mem.heap_inuse
runtime.go.mem_stats.heap_released운영 체제에 반환된 물리적 메모리 바이트 수입니다.process.runtime.go.mem.heap_released
runtime.go.mem_stats.heap_objects할당된 힙 객체 수입니다.process.runtime.go.mem.heap_objects
runtime.go.mem_stats.pause_total_ns가비지 수집 누적 나노초(GC)입니다.process.runtime.go.gc.pause_total_ns
runtime.go.mem_stats.num_gc완료된 GC 주기 수입니다.process.runtime.go.gc.count
runtime.go.num_cpu런타임에 감지된 CPU 수입니다.N/A
runtime.go.mem_stats.alloc할당된 힙 객체의 바이트 수입니다.N/A
runtime.go.mem_stats.total_alloc힙 객체에 할당된 누적 바이트 수입니다.N/A
runtime.go.mem_stats.sys운영 체제에서 얻은 총 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.mallocs할당된 힙 객체의 누적 개수입니다.N/A
runtime.go.mem_stats.frees해제된 힙 객체의 누적 개수입니다.N/A
runtime.go.mem_stats.stack_inuse스택 스팬의 바이트 수입니다.N/A
runtime.go.mem_stats.stack_sys운영 체제에서 가져온 스택 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.m_span_inuse할당된 mspan 구조의 바이트 수입니다.N/A
runtime.go.mem_stats.m_span_sys운영 체제에서 mspan 구조와 관련해 획득한 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.m_cache_inuse할당된 캐시 구조의 바이트 수입니다.N/A
runtime.go.mem_stats.m_cache_sys운영 체제에서 캐시 구조와 관련해 얻은 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.buck_hash_sys프로파일링 버킷 해시 테이블의 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.gc_sys가비지 수집 메타데이터의 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.other_sys다양한 오프 힙의 메모리 바이트 수입니다.N/A
runtime.go.mem_stats.next_gc다음 GC 주기의 목표 힙 크기입니다.N/A
runtime.go.mem_stats.last_gcUNIX 시대 이후 나노초 단위로 마지막 가비지 수집이 완료되었습니다.N/A
runtime.go.mem_stats.num_forced_gc애플리케이션이 강제로 GC 기능을 호출한 GC 주기 횟수입니다.N/A
runtime.go.mem_stats.gc_cpu_fraction프로그램 시작 이후 GC가 사용한 이 프로그램의 가용 CPU 시간 중 일부입니다.N/A
runtime.go.gc_stats.pause_quantiles.minGC 배포 일시 중지 시간: 최소값입니다.N/A
runtime.go.gc_stats.pause_quantiles.25pGC 배포 일시 중지 시간의 백분위수: 25번째 백분위수입니다.N/A
runtime.go.gc_stats.pause_quantiles.50pGC 베포 일시 중지 시간의 백분위수: 50번째 백분위수입니다.N/A
runtime.go.gc_stats.pause_quantiles.75pGC 베포 일시 중지 시간의 백분위수: 75번째 백분위수입니다.N/A
runtime.go.gc_stats.pause_quantiles.maxGC 배포 일시 중지 시간: 최대값입니다.N/A
Datadog 메트릭설명OpenTelemetry 메트릭
runtime.dotnet.threads.contention_count스레드가 잠금을 기다리기 위해 중지된 횟수입니다.process.runtime.dotnet.
monitor.lock_contention.count
runtime.dotnet.exceptions.count첫 번째 기회 예외의 수입니다.process.runtime.dotnet.
exceptions.count
runtime.dotnet.gc.size.gen00세대 힙의 크기입니다.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.gen11세대 힙의 크기입니다.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.gen22세대 힙의 크기입니다.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.size.loh대형 객체 힙의 크기입니다.process.runtime.dotnet.
gc.heap.size
runtime.dotnet.gc.count.gen00세대 가비지 수집의 개수입니다.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.gc.count.gen11세대 가비지 수집의 개수입니다.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.gc.count.gen22세대 가비지 수집의 개수입니다.process.runtime.dotnet.
gc.collections.count
runtime.dotnet.cpu.system커널에서 실행되는 시간(밀리초)입니다.N/A
runtime.dotnet.cpu.user커널 외부에서 실행되는 밀리초 수입니다.N/A
runtime.dotnet.cpu.percent애플리케이션이 사용하는 총 CPU의 백분율입니다.N/A
runtime.dotnet.mem.committed메모리 사용량입니다.N/A
runtime.dotnet.threads.count스레드 수입니다.N/A
runtime.dotnet.threads.workers_count스레드 풀의 워커 수입니다(.NET Core에만 해당).N/A
runtime.dotnet.threads.contention_time잠금을 기다리는 스레드가 소비한 누적 시간입니다(.NET Core에만 해당).N/A
runtime.dotnet.gc.memory_load프로세스에서 사용하는 총 메모리의 백분율입니다. 이 값이 85를 초과하면 가비지 수집(GC) 동작이 변경됩니다(.NET Core에만 해당).N/A
runtime.dotnet.gc.pause_timeGC가 애플리케이션 스레드를 일시 중지한 시간입니다(.NET Core만 해당).N/A
runtime.dotnet.aspnetcore.
requests.total
서버가 수신한 총 HTTP 요청 수입니다(.NET Core만 해당).N/A
runtime.dotnet.aspnetcore.
requests.failed
서버가 수신한 실패한 HTTP 요청의 수입니다(.NET Core만 해당).N/A
runtime.dotnet.aspnetcore.
requests.current
시작되었지만 아직 중지되지 않은 HTTP 요청의 총 수입니다(.NET Core만 해당).N/A
runtime.dotnet.aspnetcore.
requests.queue_length
서버 HTTP 요청 대기열의 현재 길이입니다(.NET Core에만 해당).N/A
runtime.dotnet.aspnetcore.
connections.total
서버에 설정된 총 HTTP 연결 수입니다(.NET Core만 해당).N/A
runtime.dotnet.aspnetcore.
connections.current
서버의 현재 활성 HTTP 연결 수입니다(.NET 코어에만 해당).N/A
runtime.dotnet.aspnetcore.
connections.queue_length
HTTP 서버 연결 대기열의 현재 길이입니다(.NET Core에만 해당).N/A

참고 자료

PREVIEWING: guacbot/translation-pipeline