우분투에 Prometheus와 Grafana 그리고 Node Exporter를 설치하고 구성하는 방법
- Prometheus
- 시스템 모니터링 및 경고 : Prometheus는 다양한 서버 및 서비스의 지표(metric)를 수집하고 저장하는 역할을 합니다.
- 지속적인 스크래핑 : 설정된 주기로 서버 및 애플리케이션의 지표를 수집하여 저장합니다.
- Query 언어 : PromQL(Query Language)을 사용하여 저장된 데이터를 쿼리하고 분석할 수 있습니다.
- 경보 및 알림 기능: 설정한 임계값을 초과하는 경우 경고를 생성하고, 설정한 경보 수단으로 알림을 보낼 수 있습니다.
- Grafana
- 대시보드 및 시각화 : Grafana는 다양한 데이터 소스로부터 데이터를 가져와 대시보드를 생성하고 시각적으로 표현합니다.
- 다양한 플러그인 지원 : 다양한 데이터 소스에 대한 플러그인을 제공하여, Prometheus, InfluxDB, Elasticsearch 등과 같은 여러 데이터베이스와 통합이 가능합니다.
- 경보 및 알림 설정 : Grafana는 Prometheus로부터 받은 데이터를 기반으로 사용자가 정의한 임계값을 사용하여 경보 및 알림을 설정할 수 있습니다.
- node-exporter
- 호스트 지표 수집 : node-exporter는 호스트 시스템의 성능 및 리소스 사용량과 관련된 다양한 지표를 수집합니다.
- Prometheus에 데이터 제공 : 수집한 데이터를 Prometheus에 노출하여 Prometheus가 이를 수집하고 저장할 수 있도록 합니다.
- 가벼운 에이전트 : node-exporter는 가벼운 형태로 설치되며, 호스트 시스템의 부하를 최소화하면서도 중요한 성능 지표를 수집합니다.
Prometheus 설치
Prometheus 시스템 그룹 및 사용자 생성
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
Prometheus 디렉토리 생성
sudo mkdir -p /etc/prometheus /var/lib/prometheus
Prometheus 다운로드(https://prometheus.io/download/)
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
압축 파일 풀기
tar xzf prometheus-2.53.0.linux-amd64.tar.gz
압축 푼 디렉토리로 이동하기
cd prometheus-2.53.0.linux-amd64
바이너리 파일을 bin(/usr/local/bin) 디렉토리로 복사
cp prometheus promtool /usr/local/bin/
바이너리 파일의 소유권 변경
sudo chown prometheus:prometheus /usr/local/bin/prom*
Prometheus 구성 파일 및 구성 디렉토리을 etc(/etc/prometheus/) 디렉토리로 복사
sudo cp -rf consoles console_libraries prometheus.yml /etc/prometheus/
설정 파일 및 디렉토리 복사
sudo cp prometheus.yml /etc/prometheus/prometheus.yml
sudo cp -rf consoles console_libraries /etc/prometheus/.
설정 파일 및 디렉토리의 소유권 변경
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
Prometheus 설정
- Prometheus 구성 파일 확인
vim /etc/prometheus/prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
Prometheus 서비스 파일 생성
sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecReload=/bin/kill -HUP \$MAINPID
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
Sysemd 리로드
sudo systemctl daemon-reload
Prometheus 실행
sudo systemctl --now enable prometheus
Prometheus 상태 확인
sudo systemctl status prometheus
sudo systemctl status prometheus --no-pager -l
Prometheus를 위한 설정 파일 (prometheus.yml)을 작성하고 Prometheus를 다시 시작합니다.
vim /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9100']
- job_name: node_exporter
scrape_interval: 5s
static_configs:
- targets:
- 192.168.56.52:9100
Prometheus를 다시 시작합니다.
sudo systemctl restart prometheus
브라우저에서 http://localhost:9090 접속하여 확인
http://localhost:9090
2. Grafana 설치
필요한 패키지 설치
sudo apt-get install -y adduser libfontconfig1 musl
Grafana 다운로드
wget https://dl.grafana.com/oss/release/grafana_11.1.0_amd64.deb
Grafana 설치
sudo dpkg -i grafana_11.1.0_amd64.deb
$ sudo dpkg -i grafana_11.1.0_amd64.deb
Selecting previously unselected package grafana.
(Reading database ... 74936 files and directories currently installed.)
Preparing to unpack grafana_11.1.0_amd64.deb ...
Unpacking grafana (11.1.0) ...
Setting up grafana (11.1.0) ...
Adding system user `grafana' (UID 117) ...
Adding new user `grafana' (UID 117) with group `grafana' ...
Not creating home directory `/usr/share/grafana'.
### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable grafana-server
### You can start grafana-server by executing
sudo /bin/systemctl start grafana-server
Grafana 설정
sudo vim /etc/grafana/grafana.ini
[paths]
data = /var/lib/grafana
logs = /var/log/grafana
plugins = /var/lib/grafana/plugins
[server]
protocol = http
http_addr = 0.0.0.0
http_port = 3000
Sysemd 리로드
sudo systemctl daemon-reload
Grafana 서비스 시작
sudo systemctl start grafana-server
Grafana 서비스 활성화
sudo systemctl enable grafana-server
Grafana 웹 인터페이스 접속
- 브라우저에서 http://localhost:3000 접속하여 확인 (기본 로그인 정보는 admin/admin)
http://localhost:3000
3. Node Exporter 설치
node_exporter 사용자 생성
useradd -m -s /bin/false node_exporter
node-exporter 다운로드
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz
압축 해제
tar xfz node_exporter-1.8.1.linux-amd64.tar.gz
디렉토리 이동
cd node_exporter-1.8.1.linux-amd64
바이너리 파일 복사
sudo cp node_exporter /usr/local/bin/
바이너리 파일 소유권 변경
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
node_exporter 서비스 파일 생성
sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
systemd 리로드
sudo systemctl daemon-reload
node-exporter 실행
sudo systemctl --now enable node_exporter
node-exporter 상태 확인
sudo systemctl status node_exporter
curl 명령어를 통해 데이터가 성공적으로 수집되고 있는지 확인
curl http://localhost:9100/metrics
4. Prometheus 설정
Prometheus 설정 파일 수정
- scrape_configs 섹션에 Node Exporter 추가
vim /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s # 전역 스크레이핑 간격
scrape_configs:
...
- job_name: 'node-exporter'
static_configs:
- targets: ['192.168.10.71:9100']
Prometheus 재시작
sudo systemctl restart prometheus
Prometheus 웹 인터페이스에서 확인(Prometheus Targets)
1. "Status" -> "Targets" 페이지로 이동합니다.
2. Node Exporter가 "UP" 상태인지 확인합니다.
- Prometheus에 Node Exporter가 성공적으로 등록되고 Prometheus가 Node Exporter에서 메트릭스를 수집할 수 있습니다.
5. Grafana에 Prometheus 추가
- 브라우저에서 Grafana에 로그인합니다.
- 좌측 사이드바에서 "Configuration" -> "Data Sources"로 이동합니다.
- "Add your first data source"를 클릭하고 "Prometheus"를 선택합니다.
- HTTP 설정에서 URL에 http://localhost:9090 입력 후 "Save & Test"를 클릭하여 연결을 확인합니다.
6. 대시보드 만들기
- 대시보드 가져오기 페이지로 이동
- 왼쪽 사이드바에서 + 아이콘(생성)을 클릭합니다.
- Import(가져오기)를 클릭합니다.
- Grafana 공식 대시보드 라이브러리에서 원하는 대시보드를 찾습니다.
- 해당 대시보드의 ID를 복사합니다. 예: 1860 (Node Exporter Full 대시보드)
- Grafana 대시보드 가져오기 페이지에서 "Import via grafana.com"란에 이 ID를 입력합니다.
Grafana 대시보드
이제 Prometheus, Grafana 그리고 node-exporter가 함께 동작하며 시스템 및 애플리케이션의 모니터링을 위한 환경이 구성되었습니다.
참고URL
- Grafana Labs : Node Exporter Full
'리눅스' 카테고리의 다른 글
우분투에 Loki LogCLI를 설치하는 방법 (0) | 2024.07.01 |
---|---|
우분투에 Grafana Loki를 설치하고 구성하는 방법 (0) | 2024.07.01 |
NGINX에서 특정 IP 주소를 허용하고 나머지 모든 IP 주소를 리다이렉트하도록 설정하는 방법 (0) | 2024.06.21 |
NGINX의 SSL/TLS 프로토콜 및 암호화 스위트를 안전하게 구성하는 방법 (0) | 2024.06.21 |
우분투에서 node.js 애플리케이션을 pm2를 사용하여 실행하는 방법 (0) | 2024.06.20 |