런타임 메트릭 (Runtime Metrics)
런타임 메트릭으로 애플리케이션의 메모리 사용량, 가비지 컬렉션, 병렬화를 모니터링할 수 있어요. Datadog SDK는 지원되는 환경에서 이 메트릭을 자동으로 수집해 Datadog Agent로 보내요.
출처: 문서
본문
개요 (Overview)
런타임 메트릭은 캐스팅 포함 애플리케이션의 메모리 사용량, 가비지 컬렉션(garbage collection), 병렬화(parallelization)를 모니터링해요. Datadog SDK는 지원되는 환경에서 이러한 메트릭을 자동으로 수집해 Datadog Agent로 보내요.
이 메트릭은 병목을 식별하고, 성능 문제를 트러블슈팅하고, 리소스 사용을 최적화하는 데 도움이 돼요. trace·로그와 함께 런타임 메트릭을 보면 애플리케이션의 상태와 성능에 대한 포괄적인 가시성을 얻을 수 있어요.
Datadog tracing 라이브러리 대신 OpenTelemetry로 애플리케이션을 계측한다면 OpenTelemetry Runtime Metrics에서 설정 지침을 확인해요.
호환성 (Compatibility)
런타임 메트릭은 여러 프로그래밍 언어와 런타임에서 사용할 수 있으며, 지원 수준과 구성 옵션이 다양해요.
Java
- 기본 활성화: 예
- 라이브러리 버전: 0.29.0+
- 런타임: Java 8+
⚠️ JMX 메트릭 수집은 AWS Lambda 환경에서 지원되지 않아요.
Python
- 기본 활성화: 아니요
- 라이브러리 버전: 0.30.0+
- 지원 수준: Preview
- 런타임: 지원되는 모든 Python 버전
Ruby
- 기본 활성화: 아니요
- 라이브러리 버전: 0.44.0+
- 런타임: 지원되는 모든 Ruby 버전
💡 애플리케이션에 dogstatsd-ruby 젬을 추가해야 해요.
Go
- 기본 활성화: 아니요
- 라이브러리 버전: 1.18.0+
- 런타임: 지원되는 모든 Go 버전
Node.js
- 기본 활성화: 아니요
- 라이브러리 버전: 3.0.0+
- 런타임: 지원되는 모든 Node.js 버전
.NET
- 기본 활성화: 예, .NET 6+ (v3.40.0+)에서.
- 라이브러리 버전: 1.23.0+
- 런타임: .NET Framework 4.6.1+ 및 .NET Core 3.1+ (.NET 5 이상 포함)
IIS (Internet Information Services) 권한 (.NET Framework 전용) — .NET Framework에서 메트릭은 성능 카운터를 사용해 수집돼요. 비대화형 로그온 세션의 사용자(IIS 애플리케이션 풀 계정과 일부 서비스 계정 포함)는 카운터 데이터에 접근하려면 Performance Monitoring Users 그룹에 추가되어야 해요.
IIS 애플리케이션 풀은 사용자 목록에 표시되지 않는 특수 계정을 사용해요. 이 계정을 Performance Monitoring Users 그룹에 추가하려면 IIS APPPOOL\<name of the pool>을 찾아요. 예를 들어 DefaultAppPool 사용자는 IIS APPPOOL\DefaultAppPool이에요.
이 작업은 "Computer Management" UI 또는 관리자 명령 프롬프트에서 할 수 있어요:
net localgroup "Performance Monitor Users" "IIS APPPOOL\DefaultAppPool" /add
PHP
⚠️ PHP의 런타임 메트릭은 지원되지 않아요.
C++
⚠️ C++의 런타임 메트릭은 지원되지 않아요.
설정 지침 (Setup instructions)
런타임 메트릭을 설정하려면 Datadog Agent와 애플리케이션을 모두 구성해야 해요.
1. Datadog Agent 구성하기
Agent용 DogStatsD를 활성화해요. 기본적으로 Datadog Agent는 UDP 포트 8125로 메트릭을 수집하도록 구성돼 있어요.
컨테이너별 구성 — 컨테이너화된 환경에서 Agent를 실행할 때 추가 구성이 필요해요:
- DogStatsD 비로컬 트래픽이 활성화되어 있는지 확인해요. 이 설정은 기본적으로 활성화돼 있어요. 이전에 비활성화했다면 기본
datadog.yaml구성 파일에서dogstatsd_non_local_traffic: true를 설정하거나 환경 변수DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true를 설정해요. - 다음 컨테이너별 설정 지침을 따라요:
⚠️ us3.datadoghq.com, us5.datadoghq.com, app.datadoghq.eu, app.ddog-gov.com, us2.ddog-gov.com, ap1.datadoghq.com, ap2.datadoghq.com, uk1.datadoghq.com Datadog 사이트 사용자분들께.
Agent가 올바른 Datadog 위치로 데이터를 보내도록 Datadog Agent에서
DD_SITE를 <YOUR_DATADOG_SITE>로 설정해요.
2. 애플리케이션 구성하기
환경 변수를 사용해 애플리케이션에서 런타임 메트릭을 구성해요. 일부 언어는 코드에서 직접 런타임 메트릭을 구성하는 것도 지원해요.
환경 변수 — 애플리케이션에서 런타임 메트릭을 구성하려면 다음 환경 변수를 사용해요:
DD_RUNTIME_METRICS_ENABLED
기본값: Java와 .NET 6+ (v3.40.0+)에서는 true, 다른 모든 언어와 런타임에서는 false. 설명: 런타임 메트릭 수집을 활성화해요. 메트릭은 계측된 애플리케이션에 대해 구성된 대로 Datadog agent로 보내져요.
DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED
기본값: Java에서는 true, Node.js, Ruby, Python에서는 false. .NET과 Go에는 존재하지 않아요. runtime_id는 항상 보고돼요. 설명: 모든 메트릭과 함께 runtime_id 태그를 제공하는 향상된 런타임 메트릭을 활성화해요. runtime_id는 애플리케이션의 프로세스 식별자를 나타내며 개별 실행 중인 애플리케이션과 런타임 메트릭을 직접 연결할 수 있게 해줘요.
DD_AGENT_HOST
기본값: localhost 설명: SDK의 메트릭 제출을 위한 호스트 주소를 설정해요. 호스트 이름 또는 IP 주소가 될 수 있어요.
DD_DOGSTATSD_PORT
기본값: 8125 설명: SDK의 메트릭 제출용 포트를 설정해요.
DD_RUNTIME_METRICS_DIAGNOSTICS_METRICS_API_ENABLED
기본값: .NET 8+ 및 (.NET 6/7에서 DD_RUNTIME_METRICS_ENABLED가 명시적으로 설정되지 않은 경우) tracer v3.40.0+부터 true, 그 외에는 false. 설명: .NET 6부터 사용할 수 있어요. .NET tracer가 EventListener 기반 수집기 대신 새 System.Diagnostics.Metrics API를 사용해 메트릭을 수집할지 제어해요.
코드 기반 구성 — 환경 변수 외에도 일부 언어는 코드에서 직접 런타임 메트릭을 구성하는 것을 지원해요.
Java: 환경 변수로만 런타임 메트릭을 활성화할 수 있어요. 다만 커스텀 JMX 메트릭을 추가해 수집되는 메트릭을 확장할 수 있어요. 자세한 내용은 JMX Integration 문서를 참고해요.
Python: 환경 변수나 코드로 런타임 메트릭을 활성화할 수 있어요:
from ddtrace.runtime import RuntimeMetrics
RuntimeMetrics.enable()
⚠️ 이 설정은
ddtrace-run을 사용하지 않는 경우에만 적용돼요.
Ruby: 환경 변수나 코드로 런타임 메트릭을 활성화할 수 있어요:
# config/initializers/datadog.rb
require 'datadog/statsd'
require 'datadog' # Use 'ddtrace' if you're using v1.x
Datadog.configure do |c|
c.runtime_metrics.enabled = true
# Optionally, you can configure the DogStatsD instance used for sending runtime metrics.
# DogStatsD is automatically configured with default settings if `dogstatsd-ruby` is available.
# You can configure with host and port of Datadog agent; defaults to 'localhost:8125'.
c.runtime_metrics.statsd = Datadog::Statsd.new
end
Go: 환경 변수나 코드로 런타임 메트릭을 활성화할 수 있어요:
// Basic configuration
tracer.Start(tracer.WithRuntimeMetrics())
// With custom DogStatsD address
tracer.Start(
tracer.WithRuntimeMetrics(),
tracer.WithDogstatsdAddr("custom-host:8125")
)
WithDogstatsdAddr 옵션을 사용하면 DogStatsD 서버의 커스텀 주소를 지정할 수 있어요. 주소가 기본값 localhost:8125와 다르면 WithDogstatsdAddr(또는 WithDogstatsdAddress v1) 옵션을 사용해요. (1.18.0+에서 사용 가능)
Node.js: 환경 변수나 코드로 런타임 메트릭을 활성화할 수 있어요:
const tracer = require('dd-trace').init({
// Other tracer options...
runtimeMetrics: true
})
.NET: 환경 변수로만 런타임 메트릭을 활성화할 수 있어요.
대시보드 (Dashboards)
설정이 완료되면 다음 위치에서 런타임 메트릭을 볼 수 있어요:
- 계측된 서비스의 세부 정보 페이지
- 플레임 그래프의 Metrics 탭
- 기본 런타임 대시보드
트러블슈팅 (Troubleshooting)
- 플레임 그래프 안에서 런타임 메트릭을 연관시키려면 환경 전반에
env태그(대문자·소문자 구분)가 설정되어 있고 일치하는지 확인해요. - Fargate 사용 시 서비스 페이지에 런타임 메트릭이 표시되도록 하려면 Agent 태스크에
DD_DOGSTATSD_TAGS가 설정되어 있고, 구성된env태그가 계측된 서비스의env와 일치하는지 확인해요.
수집되는 데이터 (Data collected)
각 지원 언어는 메모리 사용량, 가비지 컬렉션, CPU 사용률 및 기타 성능 지표에 대한 인사이트를 제공하는 런타임 메트릭 집합을 수집해요.
Java
| 메트릭 | 설명 |
|---|---|
| jvm.heap_memory(gauge) | 사용 중인 총 Java 힙 메모리단위: byte |
| jvm.heap_memory_committed(gauge) | 사용하도록 커밋된 총 Java 힙 메모리단위: byte |
| jvm.heap_memory_init(gauge) | 할당된 초기 Java 힙 메모리단위: byte |
| jvm.heap_memory_max(gauge) | 사용 가능한 최대 Java 힙 메모리단위: byte |
| jvm.loaded_classes(gauge) | 현재 로드된 클래스 수. |
| jvm.non_heap_memory(gauge) | 사용 중인 총 Java 비힙 메모리. 비힙 메모리는 Metaspace + CompressedClassSpace + CodeCache로 계산돼요단위: byte |
| jvm.non_heap_memory_committed(gauge) | 사용하도록 커밋된 총 Java 비힙 메모리단위: byte |
| jvm.non_heap_memory_init(gauge) | 할당된 초기 Java 비힙 메모리단위: byte |
| jvm.non_heap_memory_max(gauge) | 사용 가능한 최대 Java 비힙 메모리단위: byte |
| jvm.thread_count(count) | 활성 스레드 수단위: thread |
| jvm.gc.cms.count(count) | 발생한 가비지 컬렉션의 총 횟수. |
| jvm.gc.major_collection_count(gauge) | 주요 가비지 컬렉션 비율. 이 메트릭을 받으려면 new_gc_metrics: true를 설정해요. |
| jvm.gc.minor_collection_count(gauge) | 부(minor) 가비지 컬렉션 비율. 이 메트릭을 받으려면 new_gc_metrics: true를 설정해요. |
| jvm.gc.parnew.time(gauge) | 경과된 대략적인 누적 가비지 컬렉션 시간단위: millisecond |
| jvm.gc.major_collection_time(gauge) | 주요 가비지 컬렉션에 소요된 시간 비율. 이 메트릭을 받으려면 new_gc_metrics: true를 설정해요단위: permille |
| jvm.gc.minor_collection_time(gauge) | 부 가비지 컬렉션에 소요된 시간 비율. 이 메트릭을 받으려면 new_gc_metrics: true를 설정해요단위: permille |
| jvm.gc.old_gen_size(gauge) | Old Generation 메모리 풀의 현재 Java 힙 메모리 사용량단위: byte |
| jvm.gc.eden_size(gauge) | Eden 메모리 풀의 현재 Java 힙 메모리 사용량단위: byte |
| jvm.gc.survivor_size(gauge) | Survivor 메모리 풀의 현재 Java 힙 메모리 사용량단위: byte |
| jvm.gc.metaspace_size(gauge) | Metaspace 메모리 풀의 현재 Java 비힙 메모리 사용량단위: byte |
| jvm.cpu_load.system(gauge) | 전체 시스템의 최근 CPU 사용률단위: fraction |
| jvm.cpu_load.process(gauge) | 프로세스의 최근 CPU 사용률단위: fraction |
| jvm.buffer_pool.direct.used(gauge) | 다이렉트 버퍼가 사용하는 메모리 측정값단위: byte |
| jvm.buffer_pool.direct.count(gauge) | 풀의 다이렉트 버퍼 수. |
| jvm.buffer_pool.direct.capacity(gauge) | 다이렉트 버퍼의 총 메모리 용량 측정값단위: byte |
| jvm.buffer_pool.mapped.used(gauge) | 매핑된 버퍼가 사용하는 메모리 측정값단위: byte |
| jvm.buffer_pool.mapped.count(gauge) | 풀의 매핑된 버퍼 수. |
| jvm.buffer_pool.mapped.capacity(gauge) | 매핑된 버퍼의 총 메모리 용량 측정값단위: byte |
| jvm.os.open_file_descriptors(gauge) | 열린 파일 디스크립터 수. |
참고: jmx.d/conf.yaml에서 new_gc_metrics: true를 설정하면 다음 메트릭이 교체돼요:
jvm.gc.cms.count => jvm.gc.minor_collection_count
jvm.gc.major_collection_count
jvm.gc.parnew.time => jvm.gc.minor_collection_time
jvm.gc.major_collection_time
Python
| 메트릭 | 설명 |
|---|---|
| runtime.python.cpu.time.sys(gauge) | 커널에서 실행한 초 수단위: second |
| runtime.python.cpu.time.user(gauge) | 커널 외부에서 실행한 초 수단위: second |
| runtime.python.cpu.percent(gauge) | CPU 사용률 퍼센트단위: percent |
| runtime.python.cpu.ctx_switch.voluntary(gauge) | 자발적 컨텍스트 스위치 수단위: invocation |
| runtime.python.cpu.ctx_switch.involuntary(gauge) | 비자발적 컨텍스트 스위치 수단위: invocation |
| runtime.python.gc.count.gen0(gauge) | generation 0 객체 수단위: resource |
| runtime.python.gc.count.gen1(gauge) | generation 1 객체 수단위: resource |
| runtime.python.gc.count.gen2(gauge) | generation 2 객체 수단위: resource |
| runtime.python.mem.rss(gauge) | resident set 메모리단위: byte |
| runtime.python.thread_count(gauge) | 스레드 수단위: thread |
Ruby
| 메트릭 | 설명 |
|---|---|
| runtime.ruby.class_count(gauge) | 로드된 총 클래스 수단위: resource |
| runtime.ruby.gc.remembered_wb_unprotected_objects(gauge) | remembered set의 write-barrier 비보호 객체 수단위: resource |
| runtime.ruby.gc.remembered_wb_unprotected_objects_limit(gauge) | remembered set에서 허용되는 write-barrier 비보호 객체 한도단위: resource |
| runtime.ruby.gc.oldmalloc_increase_bytes(gauge) | old 객체에 할당된 총 바이트단위: byte |
| runtime.ruby.gc.oldmalloc_increase_bytes_limit(gauge) | old 객체의 가비지 컬렉션을 트리거할 바이트 한도단위: byte |
| runtime.ruby.gc.malloc_increase_bytes(gauge) | 객체에 할당된 총 바이트단위: byte |
| runtime.ruby.gc.malloc_increase_bytes_limit(gauge) | 객체의 가비지 컬렉션을 트리거할 바이트 한도단위: byte |
| runtime.ruby.gc.total_allocated_objects(gauge) | 이 프로세스 수명 동안 할당된 총 객체 수단위: resource |
| runtime.ruby.gc.total_freed_objects(gauge) | 이 프로세스 수명 동안 해제된 총 객체 수단위: resource |
| runtime.ruby.gc.total_allocated_pages(gauge) | 이 프로세스 수명 동안 할당된 총 페이지 수단위: page |
| runtime.ruby.gc.total_freed_pages(gauge) | 이 프로세스 수명 동안 해제된 총 페이지 수단위: page |
| runtime.ruby.gc.heap_live_slots(gauge) | 활성 객체 슬롯 수단위: resource |
| runtime.ruby.gc.heap_final_slots(gauge) | finalizer가 연결된 객체 슬롯 수단위: resource |
| runtime.ruby.gc.heap_marked_slots(gauge) | 3번 이상의 GC 사이클을 견딘 old 객체 수와 write-barrier 비보호 객체 수단위: resource |
| runtime.ruby.gc.heap_available_slots(gauge) | 힙 페이지의 총 슬롯 수단위: resource |
| runtime.ruby.gc.heap_free_slots(gauge) | 힙 페이지의 여유 슬롯 수단위: resource |
| runtime.ruby.thread_count(gauge) | 총 스레드 수단위: thread |
| runtime.ruby.gc.old_objects(gauge) | 총 old 객체 수단위: resource |
| runtime.ruby.gc.old_objects_limit(gauge) | old 객체 수 한도단위: resource |
| runtime.ruby.global_constant_state(gauge) | 전역 상수 캐시 세대단위: event |
| runtime.ruby.global_method_state(gauge) | 전역 메서드 캐시 세대단위: event |
| runtime.ruby.constant_cache_invalidations(gauge) | 상수 캐시 무효화단위: resource |
| runtime.ruby.constant_cache_misses(gauge) | 상수 캐시 미스단위: resource |
Go
| 메트릭 | 설명 |
|---|---|
| runtime.go.num_cpu(gauge) | 런타임이 감지한 CPU단위: resource |
| runtime.go.num_goroutine(gauge) | 생성된 goroutine단위: invocation |
| runtime.go.num_cgo_call(gauge) | 수행된 CGO 호출단위: invocation |
| runtime.go.mem_stats.alloc(gauge) | 할당된 힙 객체의 바이트(Alloc)단위: byte |
| runtime.go.mem_stats.total_alloc(gauge) | 힙 객체에 누적 할당된 바이트(TotalAlloc)단위: byte |
| runtime.go.mem_stats.sys(gauge) | OS에서 얻은 총 메모리 바이트(Sys)단위: byte |
| runtime.go.mem_stats.lookups(gauge) | 수행된 포인터 룩업 수(Lookups)단위: unit |
| runtime.go.mem_stats.mallocs(gauge) | 할당된 힙 객체의 누적 수(Mallocs)단위: unit |
| runtime.go.mem_stats.frees(gauge) | 해제된 힙 객체의 누적 수(Frees)단위: unit |
| runtime.go.mem_stats.heap_alloc(gauge) | 할당된 힙 객체의 바이트(HeapAlloc)단위: byte |
| runtime.go.mem_stats.heap_sys(gauge) | OS에서 얻은 힙 메모리의 바이트(HeapSys)단위: byte |
| runtime.go.mem_stats.heap_idle(gauge) | 유휴(미사용) 스팬의 바이트(HeapIdle)단위: byte |
| runtime.go.mem_stats.heap_inuse(gauge) | 사용 중인 스팬의 바이트(HeapInuse)단위: byte |
| runtime.go.mem_stats.heap_released(gauge) | OS로 반환된 물리적 메모리의 바이트(HeapReleased)단위: byte |
| runtime.go.mem_stats.heap_objects(gauge) | 할당된 힙 객체 수(HeapObjects)단위: unit |
| runtime.go.mem_stats.stack_inuse(gauge) | 스택 스팬의 바이트(StackInuse)단위: byte |
| runtime.go.mem_stats.stack_sys(gauge) | OS에서 얻은 스택 메모리의 바이트(StackSys)단위: byte |
| runtime.go.mem_stats.m_span_inuse(gauge) | 할당된 mspan 구조체의 바이트(MSpanInuse)단위: byte |
| runtime.go.mem_stats.m_span_sys(gauge) | mspan 구조체용으로 OS에서 얻은 메모리의 바이트(MSpanSys)단위: byte |
| runtime.go.mem_stats.m_cache_inuse(gauge) | 할당된 mcache 구조체의 바이트(MCacheInuse)단위: byte |
| runtime.go.mem_stats.m_cache_sys(gauge) | mcache 구조체용으로 OS에서 얻은 메모리의 바이트(MCacheSys)단위: byte |
| runtime.go.mem_stats.buck_hash_sys(gauge) | 프로파일링 버킷 해시 테이블의 메모리 바이트(BuckHashSys)단위: byte |
| runtime.go.mem_stats.gc_sys(gauge) | 가비지 컬렉션 메타데이터의 메모리 바이트(GCSys)단위: byte |
| runtime.go.mem_stats.other_sys(gauge) | 기타 오프힙 메모리의 바이트(OtherSys)단위: byte |
| runtime.go.mem_stats.next_gc(gauge) | 다음 GC 사이클의 목표 힙 크기(NextGC)단위: byte |
| runtime.go.mem_stats.last_gc(gauge) | 마지막 가비지 컬렉션이 끝난 시간, 1970년(UNIX epoch) 이후 나노초(LastGC)단위: nanosecond |
| runtime.go.mem_stats.pause_total_ns(gauge) | GC의 누적 나노초(PauseTotalNs)단위: nanosecond |
| runtime.go.mem_stats.num_gc(gauge) | 완료된 GC 사이클 수(NumGC)단위: unit |
| runtime.go.mem_stats.num_forced_gc(gauge) | 애플리케이션이 GC 함수를 호출해 강제한 GC 사이클 수(NumForcedGC)단위: unit |
| runtime.go.mem_stats.gc_cpu_fraction(gauge) | 프로그램 시작 이후 GC가 사용한 이 프로그램의 사용 가능한 CPU 시간 비율(GCCPUFraction)단위: fraction |
| runtime.go.gc_stats.pause_quantiles.min(gauge) | GC 일시 중지 시간 분포: 최솟값단위: nanosecond |
| runtime.go.gc_stats.pause_quantiles.25p(gauge) | GC 일시 중지 시간 분포: 25번째 백분위수단위: nanosecond |
| runtime.go.gc_stats.pause_quantiles.75p(gauge) | GC 일시 중지 시간 분포: 50번째 백분위수단위: nanosecond |
| runtime.go.gc_stats.pause_quantiles.95p(gauge) | GC 일시 중지 시간 분포: 75번째 백분위수단위: nanosecond |
| runtime.go.gc_stats.pause_quantiles.max(gauge) | GC 일시 중지 시간 분포: 최댓값단위: nanosecond |
Node.js
| 메트릭 | 설명 |
|---|---|
| runtime.node.cpu.user(gauge) | 사용자 코드의 CPU 사용량단위: percent |
| runtime.node.cpu.system(gauge) | 시스템 코드의 CPU 사용량단위: percent |
| runtime.node.cpu.total(gauge) | 총 CPU 사용량단위: percent |
| runtime.node.mem.rss(gauge) | resident set 크기단위: byte |
| runtime.node.mem.heap_total(gauge) | 총 힙 메모리단위: byte |
| runtime.node.mem.heap_used(gauge) | 힙 메모리 사용량단위: byte |
| runtime.node.mem.total(gauge) | 총 시스템 메모리 크기단위: byte |
| runtime.node.mem.free(gauge) | 여유 시스템 메모리 크기단위: byte |
| runtime.node.mem.external(gauge) | 외부 메모리단위: byte |
| runtime.node.heap.total_heap_size(gauge) | 총 힙 크기단위: byte |
| runtime.node.heap.total_heap_size_executable(gauge) | 총 실행 가능 힙 크기단위: byte |
| runtime.node.heap.total_physical_size(gauge) | 총 물리 힙 크기단위: byte |
| runtime.node.heap.used_heap_size(gauge) | 사용된 힙 크기단위: byte |
| runtime.node.heap.heap_size_limit(gauge) | 힙 크기 한도단위: byte |
| runtime.node.heap.malloced_memory(gauge) | malloc된 메모리단위: byte |
| runtime.node.heap.peak_malloced_memory(gauge) | 최고 할당 메모리단위: byte |
| runtime.node.heap.size.by.space(gauge) | 힙 공간 크기단위: byte |
| runtime.node.heap.used_size.by.space(gauge) | 힙 공간 사용 크기단위: byte |
| runtime.node.heap.available_size.by.space(gauge) | 힙 공간 사용 가능 크기단위: byte |
| runtime.node.heap.physical_size.by.space(gauge) | 힙 공간 물리 크기단위: byte |
| runtime.node.process.uptime(gauge) | 프로세스 업타임단위: second |
| runtime.node.event_loop.delay.max(gauge) | 최대 이벤트 루프 지연단위: nanosecond |
| runtime.node.event_loop.delay.min(gauge) | 최소 이벤트 루프 지연단위: nanosecond |
| runtime.node.event_loop.delay.avg(gauge) | 평균 이벤트 루프 지연단위: nanosecond |
| runtime.node.event_loop.delay.sum(rate) | 총 이벤트 루프 지연단위: nanosecond |
| runtime.node.event_loop.delay.median(gauge) | 중앙값 이벤트 루프 지연단위: nanosecond |
| runtime.node.event_loop.delay.95percentile(gauge) | 95번째 백분위수 이벤트 루프 지연단위: nanosecond |
| runtime.node.event_loop.delay.count(rate) | 지연이 감지된 이벤트 루프 반복 횟수단위: execution |
| runtime.node.event_loop.utilization(gauge) | 이벤트 루프가 활성인 시간의 비율단위: unit |
| runtime.node.gc.pause.max(gauge) | 최대 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.min(gauge) | 최소 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.avg(gauge) | 평균 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.sum(rate) | 총 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.median(gauge) | 중앙값 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.95percentile(gauge) | 95번째 백분위수 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.count(rate) | 가비지 컬렉션 수단위: garbage collection |
| runtime.node.gc.pause.by.type.max(gauge) | 유형별 최대 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.by.type.min(gauge) | 유형별 최소 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.by.type.avg(gauge) | 유형별 평균 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.by.type.sum(rate) | 유형별 총 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.by.type.median(gauge) | 유형별 중앙값 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.by.type.95percentile(gauge) | 유형별 95번째 백분위수 가비지 컬렉션 일시 중지단위: nanosecond |
| runtime.node.gc.pause.by.type.count(rate) | 유형별 가비지 컬렉션 수단위: garbage collection |
.NET
| 메트릭 | 설명 |
|---|---|
| runtime.dotnet.cpu.system(gauge) | 커널에서 실행한 밀리초 수단위: millisecond |
| runtime.dotnet.cpu.user(gauge) | 커널 외부에서 실행한 밀리초 수단위: millisecond |
| runtime.dotnet.cpu.percent(gauge) | 애플리케이션이 사용한 총 CPU 비율단위: percent |
| runtime.dotnet.mem.committed(gauge) | 메모리 사용량단위: byte |
| runtime.dotnet.threads.count(gauge) | 스레드 수단위: thread |
| runtime.dotnet.threads.workers_count(gauge) | 스레드풀의 워커 수 (.NET Core 3.1+ 전용)단위: thread |
| runtime.dotnet.threads.contention_time(gauge) | 스레드가 락을 기다리며 보낸 누적 시간 (.NET Core 3.1+ 전용)단위: millisecond |
| runtime.dotnet.threads.contention_count(count) | 스레드가 락을 기다리기 위해 멈춘 횟수 |
| runtime.dotnet.exceptions.count(count) | first-chance 예외 수단위: exception |
| runtime.dotnet.gc.size.gen0(gauge) | gen 0 힙 크기단위: byte |
| runtime.dotnet.gc.size.gen1(gauge) | gen 1 힙 크기단위: byte |
| runtime.dotnet.gc.size.gen2(gauge) | gen 2 힙 크기단위: byte |
| runtime.dotnet.gc.size.loh(gauge) | 대형 객체 힙 크기단위: byte |
| runtime.dotnet.gc.memory_load(gauge) | 프로세스가 사용한 총 메모리 비율. GC는 이 값이 85를 넘으면 동작을 변경해요. (.NET Core 3.1+ 전용)단위: percent |
| runtime.dotnet.gc.pause_time(gauge) | GC가 애플리케이션 스레드를 일시 중지한 시간 (.NET Core 3.1+ 전용)단위: millisecond |
| runtime.dotnet.gc.count.gen0(count) | gen 0 가비지 컬렉션 수단위: garbage collection |
| runtime.dotnet.gc.count.gen1(count) | gen 1 가비지 컬렉션 수단위: garbage collection |
| runtime.dotnet.gc.count.gen2(count) | gen 2 가비지 컬렉션 수단위: garbage collection |
| runtime.dotnet.aspnetcore.requests.total(gauge) | 서버가 수신한 총 HTTP 요청 수 (.NET Core 3.1+ 전용)단위: request |
| runtime.dotnet.aspnetcore.requests.failed(gauge) | 서버가 수신한 실패한 HTTP 요청 수 (.NET Core 3.1+ 전용)단위: request |
| runtime.dotnet.aspnetcore.requests.current(gauge) | 시작했지만 아직 멈추지 않은 총 HTTP 요청 수 (.NET Core 3.1+ 전용)단위: request |
| runtime.dotnet.aspnetcore.requests.queue_length(gauge) | 서버 HTTP 요청 큐의 현재 길이 (.NET 5+ 전용)단위: request |
| runtime.dotnet.aspnetcore.connections.total(gauge) | 서버에 설정된 총 HTTP 연결 수 (.NET 5+ 전용)단위: connection |
| runtime.dotnet.aspnetcore.connections.current(gauge) | 서버에 대한 현재 활성 HTTP 연결 수 (.NET 5+ 전용)단위: connection |
| runtime.dotnet.aspnetcore.connections.queue_length(gauge) | HTTP 서버 연결 큐의 현재 길이 (.NET 5+ 전용)단위: connection |