문서정보 : 2023.08.25.~09.05. 작성, 작성자 @SAgiKPJH
모니터링에 대한 모든 할 수 있는 내용을 정리합니다.
- powershell, docker grafana prometheus를 활용한 모니터링입니다.



- : Process Poweshell 모니터링
- : Docker Grafana Prometeus 활용한 모니터링
- : Docker Grafana Prometeus 활용한 다중 PC 모니터링
- : Docker Grafana Prometeus 활용한 nvidia GPU 모니터링
- PowerShell로 특정 Process의 CPU 사용량 및 메모리 사용량을 획득합니다.
- 기본적인 명령어는 다음과 같습니다.
Get-Process Get-Process -Name notepad
- 다음과 같이 특정 프로세스의 CPU, Memory 사용량을 획득할 수 있습니다.
(Get-Process -name PBM_Reader).CPU (Get-Process -name PBM_Reader).WorkingSet
- Power Shell에서 다음과 같이 코드를 구성하여 CPU 및 Memory 사용량을 획득할 수 있습니다.
while ($true) { $process = Get-Process -Name notepad Write-Host "CPU Usage: $($process.CPU)" Write-Host "Memory Usage: $($process.WorkingSet)" Start-Sleep -Seconds 5 }
- 이를 파일로 저장하면 다음과 같습니다.
$LogFilePath = ".\PBM_Reader_Usage_Log.txt" while ($true) { $process = Get-Process -Name PBM_Reader $CurrentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $CPUUsage = $process.CPU $MemoryUsage = $process.WorkingSet $Output = "$CurrentTime CPU Usage: $CPUUsage Memory Usage: $MemoryUsage" # 로그 파일에 기록 Add-Content -Path $LogFilePath -Value $Output # 화면에 출력 Write-Host $Output Write-Host "" Start-Sleep -Seconds 5 }
- 이를 (.ps1) 파일로 저장하여 스크립트 파일로 만들어 실행할 수 있도록 합니다.
- PC의 CPU, Memory 사용량 등을 모니터링합니다.
- 기본적으로 다음과 같이 모니터링을 진행합니다.
- Docker로 띄운 NodeExporter(PC 정보 수집, Prometeus 제공 프로그램 사용)로 정보 수집
- Docker로 띄운 Prometeus로 정보 전송
- Docker로 띄운 Grafana로 정보 모니터링
- 위 세가지 조건을 만족하도록 Docker-compose를 작성합니다. (docker-compose.yml)
version: '3' services: node-exporter: image: prom/node-exporter ports: - 9100:9100 prometheus: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - 3000:3000 networks: promnet: driver: bridge
- 그리고 prometeus.yml을 작성하여 환경을 설정합니다.
global: scrape_interval: 15s scrape_configs: - job_name: 'node-exporter' static_configs: - targets: ['node-exporter:9100']
- 다음 명령어를 통해 실행합니다.
cd "Docker-Compose Directory" docker-compose -f docker-compose.yml up -d
- 다음과 같이 설치가 되며 실행 됩니다.
- 웹브라우저를 통해 node-expoter에 접속(http://localhost:9100/metrics)하여 정상 수집하고 있는지 확인합니다.
- 웹브라우저를 통해 Prometeus의 Port로 접속(http://127.0.0.1:9090) -> Status > Targets > node-exporter를 확인합니다.
- 마찬가지로 Grafana로 접속(http://127.0.0.1:3000), Login admin/admin, Menu > Dashboards > New > Imports > 1860 입력 > Load > Import >
- 프로메테우스 미설정시 : prometeus - Configure a new data source > Prometeus > URL 입력 (127.0.0.1 또는 LocalHost가 아닌 IP번호를 입력해야 합니다) > Save & Test
- 기존 Docker Grafana Prometeus 활용한 모니터링에서 다음 내용을 추가합니다.
- Port를 변경합니다. (3000 -> 13000, 9090 -> 19090, 9000 -> 19000)
- Prometeus에서 입력 Port를 추가합니다. (총 2대의 PC 정보를 추가하기 때문에 2개의 Port를 추가합니다)
- 각 PC에 node-expoter docker를 실행합니다.
- docker-compose.yml
version: '3' services: node-exporter: image: prom/node-exporter ports: - 19100:9100 prometheus: image: prom/prometheus ports: - 19090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - 13000:3000 networks: promnet: driver: bridge
- prometeus.yml을 작성하여 환경을 설정합니다.
global: scrape_interval: 15s scrape_configs: - job_name: 'node-exporter-170-3' static_configs: - targets: ['192.168.170.3:19100'] - job_name: 'node-exporter-100-185' static_configs: - targets: ['192.168.100.185:19100'] - job_name: 'node-exporter-70-27' static_configs: - targets: ['192.168.70.27:19100']
- 다음 명령어를 통해 실행합니다.
docker-compose -f docker-compose.yml up -d
- 각 PC에는 다음을 통해 node-expoter를 구성합니다.
docker run -d -p 19100:9100 --name=node-exporter prom/node-exporter
- http://http://localhost:19090에 접근하여 Prometheus가 정상 수집하는지 확인한다.
- Status > Targets
- 다음과 같이 상태를 확인할 수 있습니다.
- Docker Compose를 Down(삭제)을 할 때는 다음과 같이 합니다.
docker-compose -f docker-compose.yml down
- 이미 실행중인 Docker Compose 내용을 업데이트 할 경우엔, 처음 실행한 내용과 같이 명령어를 입력합니다.
- Nvidia smi Expoter를 통해 GPU 상태를 모니터링 합니다.
- Nvidia에서 제공하는 Expoter가 존재합니다.
- 다음과 같이 Docker Run 합니다.
docker run -d --gpus all --rm -p 19101:9400 --name=nvidia-dcgm-exporter nvcr.io/nvidia/k8s/dcgm-exporter:3.2.5-3.1.7-ubuntu20.04
unknown flag : --gpus
-> 버전 차이로 나타난 문제, 다음과 같이 입력합니다. (https://kkkkhd.tistory.com/426)
nvidia-docker run -d --rm -p 19101:9400 --name=nvidia-dcgm-exporter nvcr.io/nvidia/k8s/dcgm-exporter:3.2.5-3.1.7-ubuntu20.04
- 다음과 같이 Exporter가 정상 수집하는지 확인합니다.
curl localhost:19101/metrics
- 또는 사이트
http://localhost:19101/metrics
접근합니다.
- Grafana는 다음과 같이 진행합니다.
- 사이트 Grafana NVIDIA DCGM Exporter Dashboard DashBoard를 띄웁니다.
- 또는 다음 사이트를 활용할 수 있습니다. (ID : 15117) Grafana NVIDIA DCGM Exporter
- Grafana ID를 12239로 입력하여 Load합니다.
docker compose nvidia 추가한 내용 확인
- 위 nvidia를 추가한 docker compose를 아래와 같이 구성할 수 있습니다.
version: '3' services: node-exporter: image: prom/node-exporter ports: - 19100:9100 prometheus: image: prom/prometheus ports: - 19090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - 13000:3000 nvidia-dcgm-exporter: image: nvcr.io/nvidia/k8s/dcgm-exporter:3.2.5-3.1.7-ubuntu20.04 ports: - 19101:9400 runtime: nvidia networks: promnet: driver: bridge
- 단, Docker-Compose를 위한 NVIDIA 관련 파일을 설치해야 합니다.
보다 더 자세히 알아보기
- 활용할 nvidia-smi-expoter은 다음과 같습니다.
- 다음과 같이 Docker Run 합니다.
docker run -d --name nvidia-exporter --privileged -p 19101:9835 utkuozdemir/nvidia_gpu_exporter:1.2.0
- Docker Grafana Prometeus 활용한 다중 PC 모니터링와 같이 prometheus.yml파일을 수정합니다.
global: scrape_interval: 15s scrape_configs: - job_name: 'node-exporter-170-3' static_configs: - targets: ['192.168.170.3:19100'] - job_name: 'node-exporter-100-185' static_configs: - targets: ['192.168.100.185:19100'] - job_name: 'node-exporter-70-27' static_configs: - targets: ['192.168.70.27:19100'] - job_name: 'node-exporter-100-185-GPU' static_configs: - targets: ['192.168.100.185:19101'] - job_name: 'node-exporter-70-27-GPU' static_configs: - targets: ['192.168.70.27:19101']
- Grafana ID를 14574로 입력하여 Load합니다.
- 현재 GPU의 Grafana는 단일 Job에 대해서 동작합니다.
- 이를 여러 Job을 선택할 수 있도록 개선합니다.
- 생성한 GPU의 DashBoard에서 Settings (톱니바퀴) > Variables > [+ New Variable]
- New Variable Job
- Name : job
- Label : Job
- Query
- Type : Label values
- Label : job
- Metric : node_uname_info
- Sort : Alphabetical (asc)
- New Variable node
- Name : node
- Label : Host:
- Query
- Type : Label values
- Label : instance
- Metric : node_uname_info
- Label filters : job = $job
- Sort : Alphabetical (asc)





nvidia_smi_utilization_gpu_ratio{instance="$node", job="$job", uuid="$gpu"}
- 작성중...
<br/>
### BugRoger nvidia-expoter
- 활용할 nvidia-smi-expoter은 다음과 같습니다.
- [Grafana BugRoger Nvidia-smi-exporter](https://grafana.com/grafana/dashboards/6387-gpus/)
- [GitHub BugRoger/nvidia-smi-exporter](https://github.com/BugRoger/nvidia-exporter)
- [Docker Hub bugroger/nvidia-exporter](https://hub.docker.com/r/bugroger/nvidia-exporter)
- 다음과 같이 Docker Run 합니다.
```bash
docker run -d --name nvidia-exporter --privileged -p 19101:9401 bugroger/nvidia-exporter:latest
- 정상동작 함을 접속하여 확인합니다. (http://localhost:19101/metrics)
- Docker Grafana Prometeus 활용한 다중 PC 모니터링와 같이 prometheus.yml파일을 수정합니다.
global: scrape_interval: 15s scrape_configs: - job_name: 'node-exporter-170-3' static_configs: - targets: ['192.168.170.3:19100'] - job_name: 'node-exporter-100-185' static_configs: - targets: ['192.168.100.185:19100'] - targets: ['192.168.100.185:19101'] - job_name: 'node-exporter-70-27' static_configs: - targets: ['192.168.70.27:19100'] - targets: ['192.168.70.27:19101']
- Grafana ID를 6387로 입력하여 Load합니다.
- 위의 BugRoger/nvidia-smi-exporter GitHub를 다운받아 Dockerfile을 빌드합니다.
docker build -t bugroger/nvidia-smi-exporter .
- 이후 Docker Run을 합니다.
- Docker Image 공유
또는 BugRoger nvidia-smi-exporter를 활용합니다. (https://hub.docker.com/r/bugroger/nvidia-exporter) Docker Image를 쉽게 실행할 수 있도록 다음과 같이 구성하였습니다. (https://hub.docker.com/r/juhyung1021/bugroger-nvidia-smi-exporter)
- 다음 명령어를 통해 실행합니다.
docker run -d --gpus all -p 19101:9401 --name=nvidia-smi-exporter juhyung1021/bugroger-nvidia-smi-exporter:latest