서버 모니터링을 위한 그라파나와 프로메테우스 활용
모니터링 배경
최근에 팀에서 진행하는 국가 과제로 Kafka와 MongoDB를 활용한 고가용성 서비스 구축을 맡게 됐다. 회사에 도움이 되고자 AWS에 서비스를 올리기 전에, 일단 내 개인 리눅스 서버에 환경을 구축하고 개발을 진행 했다. 사전 작업으로는 Kafka 리플리케이션 클러스터링과 MongoDB 샤딩을 간단히 설정해뒀다. 이러한 설정들을 위해서는 서버 모니터링이 필수적이라고 생각되어, 그라파나와 프로메테우스를 이용해서 리소스 상태를 확인하기 시작했다.
node_exporter
최근에 프로메테우스에서 제공하는 오픈 소스 모니터링 도구인 node_exporter를 이용하기 시작했다. node_exporter는 시스템의 다양한 메트릭을 수집해서 프로메테우스 서버로 전송하는 역할을 한다. 리눅스나 유닉스 기반의 시스템에서 CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 상태, 시스템 로그 같은 여러 정보를 모은다.
이렇게 모인 정보들은 프로메테우스 서버에 저장되고, 그 정보를 바탕으로 그라파나를 통해 시각화하거나 알람을 설정하는 등 다양하게 활용할 수 있다.
설치
node_exporter 설치 방법에 대해서도 고민해봤다. 도커를 사용하는 방법도 생각해 봤지만, 설치나 설정이 복잡하지 않고 어차피 계속 실행할 거라서 리눅스 시스템에 직접 설치하기로 결정했다.
# 다운로드
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
# 압축해제
tar xvfz node_exporter-1.8.0.linux-amd64.tar.gz
# 폴더로 가서 백그라운드로 실행
nohup ./node_exporter > /dev/null 2>&1 &
# 방화벽 설정
sudo iptables -I INPUT -p tcp --dport 9100 -j ACCEPT
sudo firewall-cmd --zone=public --add-port=9100/tcp --permanent
sudo firewall-cmd --reload
설치가 완료되고 http://172.30.1.77:9100/metric 주소로 실행 확인.(172.30.1.77은 내 리눅스의 내부망 IP)
프로메테우스(Prometheus)
Prometheus는 node_exporter로부터 수집된 메트릭을 저장하고 관리하는 시계열 데이터베이스 및 모니터링 시스템이다. 이 시스템을 사용하여 시스템의 상태를 모니터링하고, 필요한 경우 알림을 보내는 역할을 수행한다. Prometheus 자체적으로도 기본적인 데이터 시각화 기능을 제공한다.
설치
이번에도 마찬가지로 리눅스 시스템에 직접 설치하기로 결정했다.
# 다운
wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz
# 압축해제
tar xvfz prometheus-2.30.0.linux-amd64.tar.gz
prometheus.yml 설정
시계열 데이터 수집 경로 설정
...
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
...
실행 및 방화벽 해제
아래와 같이 실행후 http://172.30.1.77:9090 에서 실행 확인.
# 백그라운드로 실행
nohup ./prometheus --config.file=prometheus.yml &
# 방화벽 해제
sudo iptables -I INPUT -p tcp --dport 9090 -j ACCEPT
sudo firewall-cmd --zone=public --add-port=9090/tcp --permanent
sudo firewall-cmd --reload
그라파나
사용자가 Prometheus에서 저장한 시계열 데이터를 기반으로 복잡하고 상세한 대시보드를 생성하고 시각화할 수 있게 해주는 도구이다. Grafana는 Prometheus와 통합되어 메트릭 데이터를 시각적으로 표현하며, 이를 통해 사용자는 시스템의 상태를 보다 쉽게 이해하고 분석할 수 있다.
설치
# Grafana YUM 리포지토리 추가
sudo vi /etc/yum.repos.d/grafana.repo
# vi
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
# 설치
sudo yum install grafana
# 실행 및 자동실행 설정
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
# 방화벽 설정
sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent
sudo firewall-cmd --reload
추가 설정
node_exporter와 Prometheus도 자동실행 설정을 해준다.
node_exporter
sudo vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/grafana/node_exporter-1.8.0.linux-amd64/node_exporter
[Install]
WantedBy=multi-user.target
시스템 서비스 데몬을 리로드하고, node_exporter 서비스를 시작 및 활성화한다.
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Prometheus
sudo vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/grafana/prometheus-2.30.0.linux-amd64/prometheus \
--config.file=/usr/local/grafana/prometheus-2.30.0.linux-amd64/prometheus.yml \
--storage.tsdb.path=/usr/local/grafana/prometheus-2.30.0.linux-amd64/data \
--web.listen-address=:9090
[Install]
WantedBy=multi-user.target
시스템 서비스 데몬을 리로드하고, Prometheus 서비스를 시작 및 활성화한다.
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
리소스 모니터링 설정
이제 설치가 다 되었으면 그라파나 설정을 해보자!
그라파나 접속
- http://서버주소:3000 접속
- 초기 계정 admin / admin 입력후 초기 비밀번호 설정을 한다.
Prometheus 데이터 소스 추가하기
- 그라파나 대시보드의 좌측 메뉴에서, Home > Connections > Data sources 를 클릭
- Add data source 버튼을 클릭
- 사용 가능한 데이터 소스 목록에서 Prometheus를 찾아 선택
- 다음 정보를 입력
- Name: 데이터 소스의 이름을 입력
- URL: Prometheus 서버의 주소를 입력. 예: http://localhost:9090
- 나머지 설정은 기본값을 사용해도 괜찮지만, 특정 환경에 맞추어 조정할 수 있다.
- Save & Test 버튼을 클릭하여 설정을 저장하고, 데이터 소스 연결을 테스트 한다.
대시보드 구성하기
Prometheus 데이터 소스를 추가한 후, 그라파나에서 다양한 모니터링 대시보드를 구성할 수 있다.
대시보드 생성: 오른쪽 상단 import dashboard
원하는 대시보드 로드(1860, 11074, 13978등이 있다.)
임포트 후 완료
kafka 모니터링 추가
kafka-exporter를 도커 컴포즈로 추가. network_mode: “host” 옵션을
version: '3.8'
services:
kafka-exporter:
image: danielqsj/kafka-exporter
command: ["--kafka.server=localhost:9092", "--kafka.server=localhost:9093", "--kafka.server=localhost:9094"]
ports:
- "9308:9308"
restart: always
network_mode: "host"
프로메테우스 수정 후 재기동
...
- job_name: 'kafka'
static_configs:
- targets: ['localhost:9308']
그라파나 대시보드를 추가해 준다.(7589대시보드는 버전이 안맞는지 안나와서 12931으로 설정)