youngseo's TECH blog

[ELK] GPU 성능 모니터링: Metricbeat와 ELK 스택 본문

INFRA

[ELK] GPU 성능 모니터링: Metricbeat와 ELK 스택

jeonyoungseo 2023. 9. 11. 18:37

개요

Elastic Observability로 NVIDIA GPU 메트릭을 모니터링하는 방법 을 참고하여 작업하였습니다.
해당 서버는 Linux에서 NVIDIA CUDA가 설치되어 GPU가 세팅되어 있는 환경이다. 해당 GPU가 얼마만큼 사용되는지 nvidia-smi 명령어를 사용하면 알 수 있지만, cmd 창에서 일일히 확인하지 않고 kibana 등을 이용하여 시각화하기 위해서 GPU 성능 모니터링 ELK 를 탑재하였다 !

예시 사진

 

DCGM

DCGM (Data Center GPU Management) 툴은 NVIDIA GPU의 성능 및 상태를 실시간으로 모니터링하여 GPU의 온도, 전력 소비, 메모리 사용량, 그래픽 작업 부하 등의 데이터를 수집하고 분석할 수 있는 툴이다. 
GPU와 관련한 데이터는 metricbeat에서 기본적으로 제공해주지 않기 때문에 따로 설정해주어야 한다.
이 세팅을 위해 소스코드(Go)에서 NVIDIA GPU 모니터링 도구를 빌드한다.
1. NVIDIA gpu-monitoring-tools를 빌드를 위해 Golang 설치

cd /tmp wget <https://golang.org/dl/go1.15.7.linux-amd64.tar.gz> 
sudo mv go1.15.7.linux-amd64.tar.gz /usr/local/ 
cd /usr/local/ 
sudo tar -zxf go1.15.7.linux-amd64.tar.gz 
sudo rm go1.15.7.linux-amd64.tar.gz

2. Github에 있는 NVIDIA gpu-monitoring-tools 설치

cd /tmp 
git clone <https://github.com/NVIDIA/gpu-monitoring-tools.git> 
cd gpu-monitoring-tools/ 
sudo env "PATH=$PATH:/usr/local/go/bin" make install

3. prometheus.yml 활성화 시키기

sudo metricbeat modules enable prometheus

4. Metric 데이터 내보내기

dcgm-exporter --address localhost:9090 
# 출력 INFO[0000] Starting dcgm-exporter INFO[0000] DCGM successfully initialized! 
INFO[0000] Not collecting DCP metrics: Error getting supported metrics: This request is serviced by a module of DCGM that is not currently loaded 
INFO[0000] Pipeline starting 
INFO[0000] Starting webserver

5. metricbeat 시작

# log 출력을 실시간으로 확인하며 바로 실행하는 명령어  
sudo ./metricbeat -e
# cmd를 꺼도 실행되도록 백그라운드에서 실행
nohup sudo ./metricbeat -e &

6. GPU 모니터링 가능
/etc/dcgm-exporter/dcp-metrics-included.csv 에서 아래와 같이 GPU와 관련해 사용할 수 있는 데이터를 미리 확인해볼 수 있다. GPU의 온도, 사용량 등을 파악할 수 있겠다!

DCGM_FI_DEV_POWER_USAGE,              gauge, Power draw (in W).
DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION, counter, Total energy consumption since boot (in mJ).

# PCIE,,
# DCGM_FI_DEV_PCIE_TX_THROUGHPUT,  counter, Total number of bytes transmitted through PCIe TX (in KB) via NVML.
# DCGM_FI_DEV_PCIE_RX_THROUGHPUT,  counter, Total number of bytes received through PCIe RX (in KB) via NVML.
DCGM_FI_DEV_PCIE_REPLAY_COUNTER, counter, Total number of PCIe retries.

# Utilization (the sample period varies depending on the product),,
DCGM_FI_DEV_GPU_UTIL,      gauge, GPU utilization (in %).
DCGM_FI_DEV_MEM_COPY_UTIL, gauge, Memory utilization (in %).
DCGM_FI_DEV_ENC_UTIL,      gauge, Encoder utilization (in %).
DCGM_FI_DEV_DEC_UTIL ,     gauge, Decoder utilization (in %).

 
7. 키바나 대쉬보드
다음과 같이 GPU 성능을 모니터링할 수 있다. 아주 멋있다! 🤩

사진 첨부 불가로 예시 이미지 첨부

 


트러블 슈팅

1. x509: certificate signed by unknown authority

상황

 

개발 서버에 go 설치 
github에서 gpu-monitoring-tools라는 모듈 clone 
gpu-monitoring-tools 경로에서 sudo env "PATH=$PATH:/usr/local/go/bin" make install 명령어 실행

 

오류 코드

root@***:/tmp# cd gpu-monitoring-tools/
root@***:/tmp/gpu-monitoring-tools# sudo env "PATH=$PATH:/usr/local/go/bin" make install
cd pkg; go build
go: github.com/Masterminds/semver@v1.5.0: Get "<https://proxy.golang.org/github.com/%21masterminds/semver/@v/v1.5.0.mod>": x509: certificate signed by unknown authority
go: downloading github.com/gorilla/mux v1.8.0
go: downloading k8s.io/kubelet v0.20.2
go: downloading google.golang.org/grpc v1.35.0
go: downloading github.com/sirupsen/logrus v1.7.0
go: downloading github.com/urfave/cli/v2 v2.3.0
go: downloading github.com/Masterminds/semver v1.5.0
go: github.com/Masterminds/semver@v1.5.0: Get "<https://proxy.golang.org/github.com/%21masterminds/semver/@v/v1.5.0.mod>": x509: certificate signed by unknown authority
Makefile:31: recipe for target 'binary' failed
make: *** [binary] Error 1
root@***:/tmp/gpu-monitoring-tools#

관련 github 이슈

https://github.com/golang/go/issues/45569
https://github.com/golang/go/issues/45569
해당 이슈에서 같은 방법으로 명령어를 쳐본 결과 나도 아래와 같이 출력되었다.

더보기

root@pororosvr:/usr/local# openssl s_client -showcerts -connect storage.googleapis.com:443 http://ocsp.pki.goog/gts1c3 CA Issuers - URI:http://pki.goog/repo/certs/gts1c3.der X509v3 Subject Alternative Name: DNS:storage.googleapis.com X509v3 Certificate Policies: Policy: ~~ Policy: ~~~ CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : ~~~ Timestamp : Aug 7 13:25:18.774 2023 GMT Extensions: none Signature : ~~~ Signed Certificate Timestamp: Version : v1 (0x0) Log ID : ~~~ Timestamp : Aug 7 13:25:18.773 2023 GMT Extensions: none Signature : ecdsa-with-SHA256 ~~~ Signature Algorithm: sha256WithRSAEncryption ~~~

  • 대략적인 해석??
    1. verify error:num=19:self signed certificate in certificate chain: "self signed certificate" 은 방화벽이나 중간 프록시가 인증서 연결을 검증하면서 자체 서명된 인증서를 사용하는 서버와의 연결을 허용하지 않는다는 가능성을 나타낼 수 있다.
    2. depth=2 C = US, ST = California, L = Los Altos, O = netSkope Inc, OU = Cert Management, CN = caadmin.netskope.com, emailAddress = certadmin@netskope.com: 이 부분은 인증서 체인의 일부를 나타냅니다. 여기서 언급된 **netskope.com**과 같은 조직의 이름은 방화벽 구성과 관련이 있을 수 있다.
    3. Issuer: C = US, ST = CA, L = Mountain View, O = Intuit, OU = 80c975da8527600ce4c6d21ba2e4c4bc, CN = ca.intuitprd.goskope.com, emailAddress = certadmin@netskope.com: 이 또한 방화벽이 서버와의 통신을 제한하고 있을 수 있음을 의미한다.

해결 방법??

github 이슈에서는 NetSkope(회사 방화벽)을 비활성화 해서 문제를 해결했다고 하였다. 회사 네트워크 관계자 분께 해당 오류를 공유드렸다.

해결 !!><><

역씨나 !!! 복호화 솔루션에서 차단되고 있었다.
SSL 복호화 솔루션 SSL은 통신단계에서 암호화해서 데이터 노출 방지 목적(스니핑 등)으로 만들어졌는데, 엔드포인트(PC/서버)에서만 데이터 확인이 가능하다고 한다. SSL복호화는 해당 데이터나 URL이 엔드포인트까지 도달하기 전에 복호화해서 데이터 안전여부 체크가 필요해서 나온 솔루션이라고 말씀해주셨다. 결론적으론 ! 우회처리해서 해결해주셨다. 🩷

2. 빌드 오류(Error getting device information: API version mismatch)

상황

gpu-monitoring-tools를 다운받았다.
datacenter-gpu-manager를 통해 dcgm-exporter를 이용해 메트릭을 내보내려는 상황.

오류 코드

root@***:/home/niceadmin# dcgm-exporter --address localhost:9090
INFO[0000] Starting dcgm-exporter
INFO[0000] DCGM successfully initialized!
INFO[0000] Not collecting DCP metrics: Error getting supported metrics: API version mismatch
FATA[0000] Error getting device information: API version mismatch

버전오류

<https://forums.developer.nvidia.com/t/dcgm-exporter-api-version-mismatch/146393/3>
오류 원인은 명백히 버전 때문이다. ㅠㅠㅠㅠㅠ

해결방법??

MakeFile을 확인하였다. 우선 Makefile이란 뭘까??

Makefile의 정의
- linux상에서 반복 적으로 발생하는 컴파일을 쉽게하기위해서 사용하는 make 프로그램의 설정 파일이다.
- Makefile을 통하여 library 및 컴파일 환경을 관리 할수 있다.

gpu-monitoring-tools 깃허브/Makefile 코드를 확인해보면 여러 버전들을 확인해볼 수 있었다.

DCGM_VERSION   := 2.2.9
GOLANG_VERSION := 1.14.2
VERSION        := 2.4.0
FULL_VERSION   := $(DCGM_VERSION)-$(VERSION)

이후 명령어를 통해 datacenter-gpu-manager 패키지의 사용 가능한 버전 목록을 확인한다. 또는 여기 에서 확인할 수 있다.

apt-cache madison datacenter-gpu-manager

datacenter-gpu-manager도 위의 DCGM_VERSION과 맞추어 재설치해주었다.

sudo apt-get install -y datacenter-gpu-manager=2.2.9

해결!>< 왕뿌듯… 버전 오류는 항상 우릴 힘들게 해...