프로메테우스의 전체 구조
프로메테우스는 pull 기반 모니터링 시스템으로, 각 대상 시스템이 제공하는 메트릭을 주기적으로 수집하고,
시계열 데이터로 저장한 후 쿼리 / 시각화
Prometheus Server (중앙 수집기)
핵심 엔진
- 역할
타겟 (endpoint)에서 메트릭 수집 (HTTP Pull)
시계열 데이터 저장
PromQL 쿼리 처리
알람 조건 평가
- 내부구성
Scraper (타겟에서 데이터 수집)
TSDB (메트릭 저장소)
Query Engine (PromQL 실행)
Alert Manager (알림 전달)
Exporter
대상 시스템이 Promehteus 형식으로 메트릭을 노출하도록 도와주는 에이전트
`/metrics` 엔드포인트를 제공 (API)
- 종류 예시
node_exporter (서버 OS)
mysqld_exporter (DB)
nginx_exporter (웹 서버)
jmx_exporter (JVM 기반 앱)
kube-state-metrics (쿠버네티스 상태)
AlertManager
알림 담당 시스템
- 기능
중복 알림 제거
심각도별 분류
Slack, SMS, Email, webhook 전송
장애 복구 후 알림 종료 처리
Pushgateway
Pull이 어려운 환경에서 사용
- 기능
배치 작업, 단발성 스크립트 등의 매트릭을 push
프로메테우스가 Pushgateway를 다시 Pull
Grafana (외부 시각화 툴)
프로메테우스의 데이터를 시각화
- 기능
대시보드
알람 시각 표시
히스토리 분석
데이터 흐름
애플리케이션 > Exporter > Prometheus > Grafana
> AlertManager > Slack, Email...
1. 프로메테우스가 설정된 주기마다 타겟에 접근 > /metrics 호출
2. 시계열 데이터로 저장
3. PromQL로 조회
4. 조건 충족 시 AlertManager로 전달
프로메테우스 주요 설정 파일
- prometheus.yml
핵심 설정 (타겟, 수집 주기, 알람 룰 포함)
- rules/*.yml
알람 룰 정의
- alertmanater.yml
알림 라우팅 설정. 알림을 어디로, 어떻게 대응할 것인지 설정
- recording_rules.yml
집계용 사전 계산 규칙. 자주 쓰는 쿼리를 서비스 메트릭 처럼 저장
- web.yml
인증 및 TLS 설정
- targets.json
파일 기반 서비스 디스커버리. 타겟을 동적으로 파일로 관리
- prometheus.service
systemd 서비스 파일 (리눅스)
prometheus.yml
- 기본 구조
global:
scrape_interval: 15s # 수집 주기
evaluation_interval: 15s # 알람 조건 평가 주기
scraoe_timeout: 30s # 수집 타임아웃
alerting:
alertmanagers:
- static_configs:
- targets:
- "alertmanager:9093"
rule_files:
- "rules/*.yml"
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["localhost:9100"]
- scrpe_config (타겟정의)
# static 방식
scrape_configs:
- job_name: "api-server"
static_configs:
- targets: ["10.0.0.1:8080"]
# 파일 기반 디스커버리
file_sd_configs:
- files:
- "/etc/prometheus/targets/*.json"
# 쿠버네티스 서비스 디스커버리
kubernetes_sd_configs:
- role: pod
# 라벨 리라이트
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: (.*):.*
replacement: $1
rules/*.yml (알람 룰 / Alert Rules)
groups:
- name: cpu_alerts
rules:
- alert: HighCPUUsage
expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.2 # PromQL 조건
for: 3m # 지속 시간
labels: # 심각도 분류
severity: critical
annotations: # 메시지 템플릿
summary: "CPU 사용률 높음"
description: "서버 CPU 사용률 80% 이상 지속"
alertmanater.yml
global:
resolve_timeout: 5m
route: # 알람 흐름
receiver: "slack" # 알림 대상
receivers:
- name: "slack"
slack_configs:
- channel: "#alert"
text: "{{ .CommonAnnotations.summary }}"
recording_rules.yml
groups:
- name: app_rules
rules:
- record: job:http_requests:rate5m
expr: sum(rate(http_requests_total[5m])) by (job)
web.yml
basic_auth_users:
admin: "$2y$05$..."
tls_server_config:
cert_file: cert.pem
key_file: key.pem
targets.json
[
{
"targets": ["10.0.0.1:9100"],
"labels": {
"env": "prod"
}
}
]
prometheus.service
[Service]
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/data
- 설정 검증
promtool check config prometheus.yml
promtool check rules rules/*.yml
'InfraStructure > Infrastruncture' 카테고리의 다른 글
| 프로메테우스 PromQL 기초 정리 (0) | 2025.12.01 |
|---|---|
| nginx 라우팅 우선순위 (location priority) (0) | 2025.02.02 |
| nginx 수동 설치 (0) | 2024.06.26 |
| nginx 기본적인 보안 설정 (HTTP Header에서의 정보 노출 방지) (0) | 2023.08.12 |
| nginx 기초 사용법 (0) | 2023.07.23 |
