Prometheus 는 시스템 모니터링 도구로, 서버나 애플리케이션의 성능 데이터를 수집하고 경고를 설정해 문제 발생 시 알림을 주는 역할을 합니다.
Grafana 는 Prometheus 가 수집한 데이터를 시각화해 대시보드로 보여주는 도구로, 다양한 차트와 그래프로 데이터를 쉽게 분석할 수 있게 도와줍니다.
두 도구는 주로 함께 사용되어 실시간 모니터링과 시각화를 제공합니다.
RockyLinux 9 서버에 두개의 도구를 설치하고 사용하는 방법에 대해 설명합니다.
1. Grafana 설치
그라파나 리포지토리를 설정하기 전에 아래 명령을 실행하여 기본 암호화 정책 백엔드를 ‘SHA1’ 로 설정하고 서버를 재부팅하여 변경 사항을 적용합니다.
# update-crypto-policies –set DEFAULT:SHA1
# reboot
부팅이 완료되면 리포지토리를 추가합니다.
# vi /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
그라파나를 설치합니다.
# dnf -y install grafana
설치가 완료되면 변경된 systemd 상태를 다시 불러옵니다.
# systemctl daemon-reload
부팅 실행 설정과 동시에 가동해줍니다.
# dnf -y install chkconfig
# systemctl enable –now grafana-server
2. Grafana 설정
# cp -arp /etc/grafana/grafana.ini /etc/grafana/grafana.ini.ori
# vi /etc/grafana/grafana.ini
[server]
# 바인딩 할 IP 주소
http_addr = 127.0.0.1
# 사용할 http 포트
http_port = 3000
# 브라우저에서 grafana 에 접근할 도메인 이름
domain = grafana.sysdocu.kr
그라파나 데몬을 재시작하여 적용합니다.
# systemctl restart grafana-server
3. Nginx 설치
Nginx 웹 서버를 설치하고 Grafana 서버의 역 프록시로 구성합니다.
# dnf -y install nginx
그라파나 도메인 설정을 추가합니다.
설정 내용중에 SSL 인증서와 키는 미리 생성해놓은 Let’s Encrypt SSL 을 이용하였으며, 인증서 발급 과정은 생략하였으니 다음 URL 을 확인하여 진행하시기 바랍니다.
– Let’s Encrypt SSL 인증서 생성 : https://sysdocu.tistory.com/1710
# vi /etc/nginx/conf.d/grafana.conf
# Grafana Live WebSocket 연결을 프록시하는 데 필요
map $http_upgrade $connection_upgrade {
default upgrade;
” close;
}
server {
listen 80;
server_name grafana.sysdocu.kr;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name grafana.sysdocu.kr;
root /usr/share/nginx/html;
index index.html index.htm;
ssl_certificate /etc/nginx/ssl/grafana.sysdocu.kr/fullchain1.pem;
ssl_certificate_key /etc/nginx/ssl/grafana.sysdocu.kr/privkey1.pem;
access_log /var/log/nginx/grafana-access.log;
error_log /var/log/nginx/grafana-error.log;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000/;
}
# Grafana Live WebSocket 연결 프록시
location /api/live {
rewrite ^/(.*) /$1 break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000/;
}
}
설정에 이상이 없는지 확인합니다.
# nginx -t
이상이 없으면 부팅 실행 설정과 동시에 가동해줍니다.
# systemctl enable –now nginx
* 참고
방화벽이나 SELinux 활성화시 nginx 구동이 되지 않으므로, 아래와 같이 처리 후 진행하면 됩니다.
# systemctl stop firewalld
# setenforce 0
이제 웹브라우저에서 그라파나 대시보드에 접속할 수 있습니다.
주소는 아래와 같고, 기본 관리자 계정은 admin / admin 입니다.
로그인시 비밀번호 변경을 권장하고 있으므로, 바로 변경하여 보안을 강화하세요.
https://grafana.sysdocu.kr
4. Prometheus & Node Exporter 설치
Prometheus 는 시계열 데이터를 수집하고 저장하는 시스템으로, 주요 기능은 모니터링과 알림 기능을 제공하는 것입니다.
Node Exporter는 Prometheus와 함께 사용되는 도구로 CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 통계 등과 같은 메트릭 정보를 수집합니다.
설치를 위해 아래 내용으로 리포지토리를 추가합니다.
# vi /etc/yum.repos.d/prometheus.repo
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
Prometheus 와 Node Exporter 를 설치합니다.
# dnf -y install prometheus2 node_exporter
부팅 가동 설정과 동시에 데몬을 가동합니다.
# systemctl enable –now prometheus
# systemctl enable –now node_exporter
프로메테우스는 기본적으로 비밀번호 인증 없이 제공되어 보안상 취약합니다.
그러므로 다음과 같이 basic_auth 를 설정하여 보안을 강화 합니다.
HTTPS 까지 설정하고 싶은 경우 본 매뉴얼 최상단 [출처] 를 확인하세요.
# dnf -y install httpd-tools
# htpasswd -nB promadmin
New password: (신규 패스워드 입력)
Re-type new password: (신규 패스워드 재입력)
promadmin:$2y$05$jq0lO73ur6QiAHyT8SWODuUSS6MgWDqApaXNcRqrL45HsQWra7hoy
위에 출력된 값을 활용하여 새로운 프로메테우스 구성 파일을 만듭니다.
# vi /etc/prometheus/web.yml
basic_auth_users:
promadmin: $2y$05$jq0lO73ur6QiAHyT8SWODuUSS6MgWDqApaXNcRqrL45HsQWra7hoy
그다음 아래 파일을 열고 맨 뒤에 –web.config.file=/etc/prometheus/web.yml 옵션을 추가해 줍니다.
# vi /etc/default/prometheus
PROMETHEUS_OPTS=’–config.file=/etc/prometheus/prometheus.yml –storage.tsdb.path=/var/lib/prometheus/data –web.console.libraries=/usr/share/prometheus/console_libraries –web.console.templates=/usr/share/prometheus/consoles –web.config.file=/etc/prometheus/web.yml’
프로메테우스 설정 파일을 열고 scrape_configs 섹션만 아래와 같이 수정합니다.
설정에 SSL 사용이 가능한데, 사용방법은 본 매뉴얼 최상단 [출처] 에서 확인해 주세요.
# cp -arp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.ori
# vi /etc/prometheus/prometheus.yml
…
scrape_configs:
– job_name: ‘prometheus’
static_configs:
– targets: [‘localhost:9090’]
basic_auth:
username: ‘promadmin’
password: ‘12345678’
– job_name: “node_exporter”
static_configs:
– targets: [“localhost:9100”]
변경된 설정을 적용하기 위해 데몬을 재시작 합니다.
# systemctl restart prometheus
# systemctl restart node_exporter
웹브라우저에서 다음 주소를 이용해 시각화 된 메트릭 정보를 확인 할 수 있습니다.
계정은 위에서 htpasswd 명령으로 생성한 것을 이용합니다.
http://grafana.sysdocu.kr:9090
5. 프로메테우스와 그라파나 연결
이제 최종적으로 하려는 작업은, 프로메테우스에서 수집된 메트릭 데이터 (데이터 소스) 를 그라파나로 출력하는 것입니다.
그라파나 대시보드에 로그인하여 아래 메뉴를 따라 이동합니다.
– Home > Connections > Data sources
열린 페이지에서 계속 진행
[ Add data source ] 클릭 > [ Prometheus ] 클릭
– Prometheus server URL : http://grafana.sysdocu.kr:9090
– Authentication methods : Basic authentication (선택), User, Password 입력 (prometheus.yml 에서 입력한 promadmin / 12345678)
– TLS settings : Skip TLS certificate validation (체크)
페이지 맨 하단의 [Save & test] 버튼을 눌러 이상이 없어야 합니다.
아래 메뉴를 따라 이동하여 대시보드 모니터링 스타일을 설정합니다.
– Dashboard > 열린 페이지에서 우측 상단 [New] 를 누르면 Import 가 보입니다. 이를 클릭합니다.
가운데 Grafana.com 의 대시보드 ID 를 넣을 수 있습니다. ‘15172’ 를 입력하고 로드 합니다.
맨 아래 메뉴 ‘Select a Prometheus data source’ 에서 ‘Prometheus’ 선택 후 [Import] 를 누릅니다.
마지막으로, 아래 메뉴를 따라 선택하면 선택한 스타일의 대시보드에 데이터 소스값이 출력됩니다.
– Dashboards > (리스트에서) Node Exporter for Prometheus Dashboard based on 11074 > ‘Resource Details: [grafana.sysdocu.kr]’ 을 눌러 아래로 펼칩니다.
* 대시보드 레이아웃 제공 : https://grafana.com/grafana/dashboards/
※ GPU 서버 메트릭 수집
[참고] https://medium.com/@smda1215/nvidia-gpu-metrics-performance-monitor-in-grafana-prometheus-3a4bc7198cf9
NVIDIA GPU 서버를 모니터링 할 경우 아래와 같이 셋팅 합니다.
1) NVIDIA 드라이버 및 CUDA 설치
# dnf install -y epel-release
# dnf install -y gcc kernel-devel kernel-headers dkms make
# dnf config-manager –add-repo=http://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/cuda-rhel9.repo
# dnf install -y nvidia-driver nvidia-settings nvidia-driver-libs
# dnf install -y cuda
설치를 확인합니다.
# nvidia-smi
2) NVIDIA GPU Exporter 설치
# rpm -ivh https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.1/nvidia-gpu-exporter_1.2.1_linux_amd64.rpm
OS 가 다른 경우, 또는 다른 버전의 패키지를 설치할 경우 배포 사이트를 방문해 보세요.
https://github.com/utkuozdemir/nvidia_gpu_exporter/releases
설치된 명령어가 확인됩니다.
# ll /usr/bin/nvidia_gpu_exporter
-rwxr-xr-x. 1 root root 10367128 6월 28 17:45 /usr/bin/nvidia_gpu_exporter
사용자와 그룹을 다음과 같이 생성합니다.
패키지 설치시 자동으로 생성되는 경우가 있습니다.
# useradd -m -s /bin/false nvidia_gpu_exporter
서비스 파일을 아래와 같이 생성합니다.
NVIDIA GPU Exporter 서비스의 기본 포트는 9835 입니다.
# vi /etc/systemd/system/nvidia_gpu_exporter.service
[Unit]
Description=Nvidia GPU Exporter
After=network-online.target
[Service]
Type=simple
User=nvidia_gpu_exporter
Group=nvidia_gpu_exporter
ExecStart=/usr/bin/nvidia_gpu_exporter
SyslogIdentifier=nvidia_gpu_exporter
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
서비스를 시작하고 상태를 확인합니다.
# systemctl start nvidia_gpu_exporter.service
# systemctl enable nvidia_gpu_exporter.service
# systemctl status nvidia_gpu_exporter.service
웹브라우저를 통해 서비스가 잘 동작하는지 확인합니다.
http://grafana.sysdocu.kr:9835/metrics
3) 프로메테우스 설정
Nvidia GPU 매트릭을 출력할 준비가 되었습니다.
그라파나 대시보드에서 메트릭을 수집할 수 있도록 프로메테우스 설정을 변경 합니다.
# vi /etc/prometheus/prometheus.yml
…
scrape_configs:
– job_name: ‘node_exporter’
static_configs:
– targets: [‘localhost:9835’]
basic_auth:
username: ‘promadmin’
password: ‘12345678’
변경된 설정을 적용하기 위해 데몬을 재시작 합니다.
# systemctl restart prometheus
4) 그라파나 대시보드 설정
그라파나에서 소스데이터와 대시보드를 추가합니다.
그라파나 대시보드에 로그인하여 아래 메뉴를 따라 이동합니다.
– Home > Connections > Data sources
열린 페이지에서 계속 진행
[ Add data source ] 클릭 > [ Prometheus ] 클릭
– Prometheus server URL : http://grafana.sysdocu.kr:9090
– Authentication methods : Basic authentication (선택), User, Password 입력 (prometheus.yml 에서 입력한 promadmin / 12345678)
– TLS settings : Skip TLS certificate validation (체크)
페이지 맨 하단의 [Save & test] 버튼을 눌러 이상이 없어야 합니다.
아래 메뉴를 따라 이동하여 대시보드 모니터링 스타일을 설정합니다.
– Dashboard > 열린 페이지에서 우측 상단 [New] 를 누르면 Import 가 보입니다. 이를 클릭합니다.
가운데 Grafana.com 의 대시보드 ID 를 넣을 수 있습니다. ‘14574’ 를 입력하고 로드 합니다.
맨 아래 메뉴 ‘Select a Prometheus data source’ 에서 ‘Prometheus’ 선택 후 [Import] 를 누릅니다.
마지막으로, 아래 메뉴를 따라 선택하면 선택한 스타일의 대시보드에 데이터 소스값이 출력됩니다.
– Dashboards > (리스트에서) Nvidia GPU Metrics 를 누르면 대시보드가 출력됩니다.
* NVIDIA 를 기준으로 하였지만, Tesla 도 되는듯 합니다.