RBLN 메트릭 게시자¶
RBLN SDK는 Rebellions NPU 디바이스와 관련된 상세 메트릭을 Prometheus 형식으로 노출하는 Metrics Exporter를 제공합니다. 이 메트릭들은 Prometheus가 쉽게 수집하고 Grafana를 사용하여 시각화할 수 있도록 설계되어, Rebellions NPU 디바이스를 전반적으로 모니터링할 수 있도록 돕습니다.
exporter는 두 가지 실행 모드로 동작합니다. 기본값인 local 모드는 자체 노드의 메트릭을 수집하고, 게이트웨이 모드는 여러 원격 호스트의 메트릭을 대신 수집합니다.
배포¶
1단계: NPU 노드 준비¶
디바이스 플러그인 문서에 설명된 대로 RBLN NPU가 장착된 Kubernetes 노드를 준비하고 RBLN 드라이버를 설치하세요.
2단계: 프로메테우스 배포¶
Kubernetes 클러스터에 프로메테우스를 헬름(Helm) 또는 오퍼레이터(Operator)를 사용하여 배포하세요.
프로메테우스를 미리 배포하지 않아도 RBLN 메트릭 게시자를 배포할 수 있습니다.
3단계: RBLN 메트릭 게시자 배포¶
각 노드에 RBLN 메트릭 게시자를 데몬셋(DaemonSet) 파드로 배포하세요.
제공된 매니페스트에는 Metrics Exporter가 RBLN NPU가 장착된 노드에만 배포되도록 하는 어피니티(affinity) 규칙이 포함되어 있습니다. 특히, nodeAffinity를 사용하여 rebellions.ai/npu.present 레이블이 "true"로 설정된 노드를 대상으로 하며, 이 레이블은 일반적으로 rbln-npu-feature-discovery에 의해 설정됩니다.
Kubernetes 모드¶
Kubernetes 환경이 아닐 때는 pod 리소스 조회와 레이블 의존성을 비활성화할 수 있습니다.
- 매니페스트 env:
RBLN_METRICS_EXPORTER_KUBERNETES_MODE=off - 바이너리 플래그:
./rbln-metrics-exporter --kubernetes-mode=off
Prometheus 규약 메트릭 이름¶
Exporter는 PROMETHEUS_METRIC_NAMES=true일 때 Prometheus 명명 규약을 따르는 메트릭 이름(rbln_npu_temperature, rbln_npu_power 등)을 내보냅니다. RBLN_DEVICE_STATUS:* 이름은 deprecated 별칭으로 계속 사용할 수 있습니다.
NPU Operator는 기본적으로 PROMETHEUS_METRIC_NAMES를 활성화하므로 대시보드와 알람에서는 메트릭 정보에 정리된 rbln_npu_* 이름을 사용하세요.
4단계: (선택 사항) Prometheus 메트릭 스크랩 설정¶
Prometheus가 RBLN Metrics Exporter에서 메트릭을 자동으로 찾아 스크랩하게 하려면, ServiceMonitor 리소스를 생성할 수 있습니다. Prometheus Operator를 사용한다면 특히 유용하게 사용할 수 있습니다. 다음은 ServiceMonitor 설정 예시입니다:
selector 레이블이 RBLN Metrics Exporter 파드의 레이블과 일치하는지, 그리고 release 레이블(사용하는 경우)이 Prometheus 배포와 일치하는지 확인하세요. 이 ServiceMonitor는 kubectl apply -f servicemonitor.yaml 명령으로 적용할 수 있습니다.
5단계: (선택 사항) 그라파나 배포¶
프로메테우스 메트릭을 그라파나 대시보드로 시각화하려면, Kubernetes 클러스터에 그라파나를 헬름(Helm) 또는 오퍼레이터(Operator)를 사용하여 배포하세요.
멀티 타겟 게이트웨이 모드¶
Metrics Exporter v0.3.1부터는 단일 exporter 인스턴스가 여러 원격 호스트의 메트릭을 대신 수집하는 게이트웨이 모드를 제공합니다. 게이트웨이 모드는 Prometheus의 멀티 타겟 exporter 패턴을 따르며, 호스트마다 exporter를 배포하기 어려운 베어메탈/비-쿠버네티스 환경을 위한 기능입니다.
| 항목 | local (기본값) |
gateway |
|---|---|---|
| 배포 형태 | 노드마다 1개 (DaemonSet) | 중앙에 1개 |
| 수집 대상 | 로컬 노드의 rbln-smd |
스크랩마다 지정되는 원격 rbln-smd |
| 타겟 지정 | 없음 (자체 노드) | ?target=<host:port> 쿼리 파라미터 |
| Kubernetes 파드 레이블 | 제공 | 미제공 (하드웨어 메트릭 전용) |
동작 방식¶
Prometheus가 /metrics?target=<host:port> 형태로 게이트웨이를 스크랩하면, 게이트웨이는 해당 타겟의 rbln-smd에 gRPC로 접속하여 요청 시점에 전체 메트릭을 수집하고 Prometheus 형식으로 응답합니다. 게이트웨이는 요청 사이에 메트릭 상태를 저장하지 않으며 타겟 목록도 갖지 않습니다. 타겟 목록은 전적으로 Prometheus 스크랩 설정에서 관리됩니다. 타겟별 gRPC 연결은 캐시되어 재사용되고 끊어지면 자동으로 재연결됩니다.
게이트웨이 실행¶
exporter는 두 가지 실행 모드 중 하나로 동작하며, 시작 시 --mode 플래그 또는 RBLN_METRICS_EXPORTER_MODE 환경 변수로 선택합니다.
| 변수 | 설명 | 기본값 |
|---|---|---|
RBLN_METRICS_EXPORTER_MODE |
exporter의 실행 모드. local은 exporter가 실행 중인 노드의 rbln-smd에서 메트릭을 수집하고, gateway는 스크랩 요청마다 지정되는 원격 rbln-smd에서 메트릭을 수집합니다. |
local |
Prometheus 스크랩 설정¶
NPU 호스트 목록을 타겟으로 나열하고, relabeling으로 각 타겟을 ?target= 파라미터로 변환한 뒤 실제 HTTP 요청은 게이트웨이로 보내도록 설정하세요.
이 설정으로 Prometheus는 호스트마다 http://rbln-gateway:9200/metrics?target=npu-host-1:50051을 스크랩하고, 모든 시리즈를 instance="npu-host-1:50051" 레이블과 함께 저장합니다.
제한 사항¶
- 수집이 스크랩 요청 안에서 일어나므로 느린 타겟은 스크랩 시간을 소모합니다. 게이트웨이는 Prometheus가 보내는
X-Prometheus-Scrape-Timeout-Seconds헤더를 준수하므로, 느린 링크에는scrape_timeout값을 늘려야 합니다. - 파드/네임스페이스/컨테이너 레이블은 제공되지 않습니다. kubelet pod-resources API는 노드 로컬 전용이어서 원격 호스트의 할당 정보를 조회할 수 없습니다. 쿠버네티스 클러스터에서는
local모드(DaemonSet)를 사용하세요. hostname레이블에는 타겟 주소의 호스트 부분이 채워집니다.- 타겟과의 gRPC 연결은 평문입니다. 데몬 포트는 게이트웨이에서 접근 가능하되 신뢰할 수 있는 네트워크로 제한하세요.
메트릭 정보¶
다음 메트릭들은 각 NPU 디바이스에 대해 내보내지며, 디바이스 식별자(UUID), 카드 이름, 캐릭터 디바이스 노드(rblnN)로 태그가 지정됩니다.
| 이름 | Deprecated 별칭 | 설명 | 단위 | 최소 버전 |
|---|---|---|---|---|
rbln_npu_temperature |
RBLN_DEVICE_STATUS:TEMPERATURE |
온도 | °C | v0.2.0 |
rbln_npu_power |
RBLN_DEVICE_STATUS:CARD_POWER |
전력 사용량 | W | v0.2.0 |
rbln_npu_memory_used |
RBLN_DEVICE_STATUS:DRAM_USED |
사용 중인 DRAM | Bytes | v0.2.0 |
rbln_npu_memory_total |
RBLN_DEVICE_STATUS:DRAM_TOTAL |
총 DRAM | Bytes | v0.2.0 |
rbln_npu_utilization |
RBLN_DEVICE_STATUS:UTILIZATION |
활용률 | % | v0.2.0 |
rbln_npu_health |
RBLN_DEVICE_STATUS:HEALTH |
NPU 상태 | 0/1 | v0.2.0 |
rbln_npu_device_status |
N/A | 디바이스 상태 머신 상태 (state 레이블별 시리즈, 현재 상태만 1) |
0/1 | v0.3.0 |
rbln_npu_power_state |
N/A | DVFS 성능 상태 | 레벨 | v0.3.0 |
rbln_npu_pcie_link_speed_gts |
N/A | 현재 PCIe 링크 속도 | GT/s | v0.3.0 |
rbln_npu_pcie_link_width |
N/A | 현재 PCIe 링크 폭 | 레인 | v0.3.0 |
rbln_npu_device_info |
N/A | 디바이스 식별 정보와 정적 속성을 레이블로 노출 | 항상 1 | v0.3.0 |
rbln_up |
N/A | 마지막 RSMD 메트릭 수집 성공 여부 | 0/1 | v0.3.1 |
rbln_npu_device_shared |
N/A | 여러 파드가 디바이스의 ResourceClaim을 공유해 Kubernetes 레이블이 그중 한 파드만 가리키는 상태인지 여부 |
0/1 | v0.3.3 |
Note
rbln_npu_health(deprecated 별칭: RBLN_DEVICE_STATUS:HEALTH)는 이진 상태 지표입니다. 0은 NPU가 활성 상태임을, 1은 비활성 상태임을 의미합니다.
Note
rbln_up은 Exporter 시작 후 첫 수집 사이클 전까지는 0으로 노출합니다.
Exporter는 다음 메트릭을 확인하지 못한 경우 해당 메트릭을 노출하지 않습니다.
rbln_npu_power_state: 데몬이 성능 상태 값을 제공하지 않는 디바이스rbln_npu_pcie_link_speed_gts,rbln_npu_pcie_link_width: 토폴로지 정보를 조회하지 못한 디바이스
공통 NPU 메트릭 레이블 속성¶
| 레이블 | 설명 |
|---|---|
name |
커널 드라이버가 노출하는 캐릭터 디바이스 노드(Device.name, 예: rbln0) |
uuid |
NPU 디바이스의 전역 고유 식별자(Device.uuid) |
card |
Device.card_name에서 노출되는 카드 제품명(예: RBLN-CA25) |
deviceID |
프로토에 보고된 PCIe 디바이스 ID(Device.dev_id, 예: 1250) |
hostname |
해당 NPU를 사용하는 파드가 스케줄된 Kubernetes 노드 이름 |
driver_version |
VersionInfo.drv_version에서 반환되는 커널 드라이버 버전 |
firmware_version |
VersionInfo.fw_version에서 반환되는 NPU 펌웨어 버전 |
Kubernetes NPU 메트릭 레이블 속성¶
| 레이블 | 설명 |
|---|---|
namespace |
NPU를 사용하는 워크로드의 Pod.metadata.namespace |
container |
NPU를 소비하는 컨테이너 이름(Pod.spec.containers[].name) |
pod |
NPU 할당을 보유한 파드 이름(Pod.metadata.name) |
Dynamic Resource Allocation¶
Exporter가 kubelet pod-resources API의 device plugin 필드와 DRA 필드를 모두 읽으므로, 클러스터에서 Device Plugin과 NPU DRA Driver 중 어느 방식을 사용해도 할당된 디바이스에 파드 레이블이 붙습니다.
DRA 기반 레이블링 요구 사항
DRA 기반 레이블링에는 Metrics Exporter v0.3.3 이상과 Kubernetes 1.34 이상이 필요합니다. Kubernetes 1.34에서는 필요한 kubelet 기능 게이트가 기본적으로 활성화되므로 별도의 kubelet 플래그가 필요하지 않습니다. DRA 드라이버는 resource.k8s.io/v1 API를 사용합니다.
메트릭 시리즈 하나에는 파드 레이블 한 세트만 붙지만, DRA에서는 한 디바이스에 여러 요청자가 있을 수 있습니다. Exporter는 시리즈가 분리되지 않도록 스크랩마다 항상 같은 요청자를 선택합니다.
- 한 파드의 여러 컨테이너가 클레임을 공유하는 경우:
namespace와pod는 정확하며, 컨테이너 이름 중 하나가 사용됩니다. - 여러 파드가 하나의
ResourceClaim을 공유하는 경우: 나머지 파드는 레이블에 포함되지 않으며, 해당 디바이스의rbln_npu_device_shared값은1로 설정됩니다. 따라서 로그를 확인하지 않아도 대시보드에서 일부 요청자 정보만 레이블에 반영되었음을 알 수 있습니다.
메트릭별 추가 레이블 속성¶
rbln_npu_device_status는 공통 레이블에 더해 state 레이블을 사용합니다.
| 레이블 | 사용 메트릭 | 값 |
|---|---|---|
state |
rbln_npu_device_status |
ready · busy · init · fault · finish · not_found |
디바이스 정보 메트릭 레이블 속성¶
rbln_npu_device_info는 공통 레이블에 더해 다음 레이블로 디바이스의 정적 속성을 노출합니다.
| 레이블 | 설명 |
|---|---|
smc_version |
SMC 펌웨어 버전 |
pci_bus_id |
PCI 버스 주소 |
numa_node |
디바이스가 연결된 NUMA 노드 번호(NUMA 정보가 없으면 -1) |
rsd_group |
디바이스가 속한 RSD 그룹 |
cpu_list |
디바이스의 로컬 CPU 목록 |
is_vf |
SR-IOV 가상 함수(VF) 여부(true/false) |
parent_name |
VF인 경우 부모 물리 디바이스 이름 |
num_vfs |
물리 디바이스에 구성된 VF 수 |
Note
numa_node, rsd_group, cpu_list는 토폴로지 정보를 조회하지 못한 경우 Exporter는 이 레이블을 빈 값으로 노출합니다.
메트릭 예제¶
다음은 Exporter가 생성하는 Prometheus 규약 메트릭 텍스트 형식의 예시입니다.
로깅¶
Exporter는 구조화된 로그를 stdout에 출력합니다. 다음 환경 변수로 로그 레벨과 출력 형식을 설정합니다.
| 변수 | 설명 | 기본값 |
|---|---|---|
RBLN_METRICS_EXPORTER_LOG_LEVEL |
로그 상세도: error, warning(또는 warn), info, debug, trace. |
info |
RBLN_METRICS_EXPORTER_LOG_FORMAT |
출력 형식: json 또는 text. |
json |
warning은 레코드에 "level":"warn"으로 기록되므로 대시보드와 알람 필터는 warn 기준으로 작성하세요. trace는 요청 페이로드까지 남기므로 운영 환경에는 적합하지 않습니다. 잘못된 값을 지정해도 중단되지 않고 기본값으로 되돌아가면서 경고를 남깁니다.
RBLN NPU Operator로 배포한 경우 차트의 metricsExporter.logging 값으로 설정하세요. 컴포넌트 로깅을 참고하세요.