탕구리's 블로그

Prometheus - webhook 설정하기(with alertmanager) 본문

devOps

Prometheus - webhook 설정하기(with alertmanager)

탕구리당 2020. 8. 10. 01:12
반응형

안녕하세요! 오늘은 그라파나 알림을 사용하려고 알아보던 중 생각했던 것만큼 상세한 알림 설정이 되지 않아(실시간 지표값이나.. 지표값이나.. 지표값 같은 것들?) 그라파나가 아닌 프로메테우스에서 수집되는 지표를 통해 알림을 설정하고 발송하는 방법에 대해 알아보려고 합니다.

 

최대한 간단하게 정리하여 나중에 알아보기 쉽게(?)하려 노력하였습니다 ㅎㅎ..

 

샘플로 만들어진 설정파일은 JVM에서 exporter를 통해 prometheus로 받아오는 지표에 대한 알림 생성을 예로 작성하였습니다.

 

alertmanager를 설치하는 과정은 건너뛰고 설정에 필요한 내용만 정리하려 합니다.

 

저는 docker를 통해 alertmanager를 설치하였고 config 설정을 위한 volumes 변경 외에는 기본적으로 제공되는

"prom/alertmanager" 이미지를 기반으로 사용하였습니다.

 

#docker-compose.yml

version: '3'

services:
  alertmanager:
    image: prom/alertmanager
    user: root
    ports: - "9093:9093"
    volumes:
      - ./alertmanager/config/:/etc/alertmanager/
    networks: - internal

networks:
  internal:
    driver: bridg

 

 

프로메테우스 알림 발송을 위해서 필요한 설정 파일은 총 3개입니다.

1. alertmanager.yml #알림 발송 방식을 설정하고 알림에 관련한 정책들을 설정 진행

2. prometheus.yml # alertmanager를 사용할 수 있게 설정 변경 진행

3. alert_rules.yml # prometheus 지표 중 알림 여부에 대한 규칙 설정 진행

 

 

#alertmanager.yml

global:
  resolve_timeout: 10s

route: #라우트 경로 설정
  group_by: ["groups", "<label_name>"] # prometheus.yml의 targets -labels의 label_name을 의미합니다.
  group_wait: 10s  # inhibit 조건 발생에 대한 중복을 방지하기 위한 알림 발생 전 대기시간, 
  group_interval: 5s # 알림 간 시간 간격 설정
  repeat_interval: 2m # 알림 재발생 
  receiver: 'webhook' # 알림 설정 대상
  routes: # 라우트 대상 설정
  - match:
       alertname: 'test-alram' # alertname이 일치하는 경우 알림 발송 
    receiver: 'webhook'

receivers:
- name: 'webhook'
  webhook_configs:
  - url: 'http://웹 훅 주소'
    send_resolved: true
    max_alerts: 200 # 최대 알림 수 설정

inhibit_rules: # 중복된 알림이 발생할 경우 중복 금지를 위한 규칙 설정
    - source_match: # inhibit rule을 적용하기 위해 존재해야 하는 조건
        severity: 'critical' 
      target_match: # 음소거가 되어야 할 대상
        severity: 'warning'
      # equal: ['<label_name>'] #value값과 동일한 값을 갖는 경우 inhibit rule 적용

 

#alert_rules. yml

groups:
- name: test # 그룹 이름
  rules: 
  - alert: test-alert # 알림 이름
    expr: java_lang_memory_heapmemoryusage_used{job="java"} > 1000000000 #알림 조건 설정
    for: 5m
    labels: # 필요한 label들을 설정할 수 있다.
       severity: warning
    annotations:
      summary: "{{ $labels.groups }} {{ $labels.instance }}"
      description: "{{ $labels.instance }}의 힙 메모리 사용량이 증가합니다. (current value: {{ humanize $value }}"
   
  - alert: jvm-heap-memory-over-1.5GB
     expr: java_lang_memory_heapmemoryusage_used{job="java"} > 1500000000
     for: 5m
     labels: 
        severity: warning
     annotations:
       summary: "{{ $labels.groups }} {{ $labels.instance }}"
       description: "{{ $labels.instance }}의 힙 메모리 사용량이 증가합니다. (current value: {{ humanize $value }}"

 

 

### prometheus.yml

# my global config
global:
  scrape_interval: 15s
  evaluation_interval: 15s 


# alertmanager와 프로메테우스를 연결하기 위해 설정 추가
# 현재 로컬에서 9093 포트를 통해 alertmanager가 구동되고 있음
alerting:
  alertmanagers:
    - static_configs:
         - targets:
              - localhost:9093

# 어떤 경우에 알람이 발생할 것인지 규칙을 정해놓은 rules 파일을 설정
rule_files:
  - "alert_rule.yml"

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

 

구글링 하여도 생각보다 웹 훅 관련된 설정 내용이 깔끔하게 정리된걸 못 찾아서 간단하게 정리하며 주석을 달아보았는데, 검색하여 들어오는 누군가는 이 자료가 도움이 되었으면 좋겠네요.

 

탕빠이!

 

반응형
Comments