Prometheus Configuration

Hansu Kim·2022년 4월 8일
0

Prometheus는 YAML 형식의 설정파일을 통해 구동된다.

1. prometheus.yaml

prometheus 프로세스의 파라미터들을 설정할 수 있다.

정해진 형식에서 벗어날 경우, 서비스 시작시 설정파일의 문제되는 라인넘버와 함께 mapping values are not allowed in this context 에러가 발생한다.

해당 파일 변경시, 변경 내용을 적용하기 위해서는 아래 2가지 방법 중 하나를 수행해야한다.

  • 서비스를 재시작
  • 실행시 --web.enable-lifecycle 플래그 설정 후 POST 메소드로 아래 URL에 Http 요청

default prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']

초기 설치시 기본적으로 global, rule_files, scrape_configs 항목이 있다.

  • global: 전역에 적용되는 룰
  • scrape_interval: 타겟으로부터의 수집 주기
  • evaluation_interval: rule evaluation 주기
    • prometheus는 rule을 통해 time series를 만들고 alert를 생성한다.
  • rule_files: 사전 정의된 Recording rule / Alerting rule 파일의 경로를 지정한다.
  • scrape_configs: 수집 대상들을 target이라고 부르는데, target별로 범주들을 묶고, 범주별로 수집 주기나 룰들을 유동적으로 적용할 수 있다.
  • targets: 메트릭들을 수집해올 수집 대상.

위 정리된 항목들은 매우 기초적인 사항이며, 상세 파라미터들은 아래에서 확인할 수 있다.

Prometheus Detail Configuration information
https://prometheus.io/docs/prometheus/latest/configuration/configuration/

2. Target service discovery 설정

Service Discovery란, pull방식의 모니터링 시스템에서 수집 대상 서버들을 갱신하는 것을 말한다.
service discovery 방식으로, DNS를 통한 방식과 파일 기반 방식이 있다.

DNS를 통한 방식 사용시, 서비스 down 관련 False alerting이 발생할 소지가 있다. (리서치하다가 어디선가 봤다..)

예상외 오류를 방지하기 위해, 나는 json 기반 파일 방식을 선택했으며, 타겟 목록은 별도 DB를 통해 관리해주며 주기적으로 DB의 내용을 파일로 갱신해줄 예정이다.

target을 json기반으로 관리하기 위해서는 prometheus.yml의 scrape_configs 항목을 다음과 같이 설정하면 된다.

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    file_sd_configs:
            - files:
                    - './targetlist/sd_prometheus_2.35.json'

파일 기반 Service Discovery의 상세 설명
https://prometheus.io/docs/guides/file-sd/#use-file-based-service-discovery-to-discover-scrape-targets

3. Alerting Rule 설정

alerting rule 이란, 수집하는 데이터들이 사전 정의된 조건식을 통과하지 못하면 알람을 발생시켜주는 것을 말한다.
alerting rule은 파일 단위로 분리하여 작성할 수 있다.

Example alerting rule YML file

  - alert: PrometheusTsdbReloadFailures
    expr: increase(prometheus_tsdb_reloads_failures_total[1m]) > 0
    for: 0m
    labels:
      severity: critical
    annotations:
      summary: Prometheus TSDB reload failures (instance {{ $labels.instance }})
      description: "Prometheus encountered {{ $value }} TSDB reload failures\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
  • Alert: 생성되는 알람명
  • expr: PromQL 형식의 조건문으로, False가 되면 알람을 발생시킨다.
  • for: 실제 알람 발생까지의 대기시간
    • expr = false 발생시 해당 알람은 pending(보류) 상태로 진입하게 되며, for에서 지정한 시간이 경과해도 해당 알람이 유지되면 알람 상태를 firing으로 변경시킨다.

      알람 상태는 inactive -> pending -> firing 순으로 격상된다.

이렇게 지정된 알람들은 prometheus.yml에 rule_files 항목에 기입하여 적용시킬 수 있다.

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
     - './alerts/*.yml'

0개의 댓글