모니터링 관련 공부 내용 정리 alertmanager - rnjstjdgh/MyBlog-v-2 GitHub Wiki

2021-04-16

우선 alertmanager 기반 + slack alert으로 해보자

추후에 slack말고 다른 서비스에 대해서도 더 디테일하게 알아보자

  1. 기본적인 prometheus rule -> alertmanager 부터 시작하고

  2. alertmanager -> grafana datasource 방법을 찾아본 후

  3. loki -> alertmanager 방법도 연동 되는지 확인해 보자


공부 내용(Prometheus rules => alertManager => slack web hook api)

  1. rule
  • example: image

  • groups : 하나의 단위를 묶는 것

  • rules: 복수개의 alert을 묶는 단위

  • alert: alertManager로 하나의 alert을 보내는 단위

    • alert: alert의 이름
    • expr: alert에 대한 trigger를 만들 때 평가 조건
    • for: expr가 for만큼 만족할 때 alert이 trigger됨
    • labels: 해당 alert에 대한 label을 생성
    • annotaion: 해당 alert에 대한 경고 정보를 담아 alertmanager로 보냄
  • alert의 expr와 for를 통해 trigger가 발생되고 이때 alertManager로 전달되는 정보는 labels와 annotation이다.

  • alertManager는 labels정보와 annotation 정보를 받게 되면 적절한 벤더(email or slack)으로 전달 받은 정보를 적절하게 뿌려주는 역할

  1. alertManager
  • example: image

  • global: 전역 설정

  • route:

    • 외부에서 push된 alert은 처음에 무조건 root로 들어온다.
    • root로 들어온 alert을 적절하게 다른 receiver로 보내주는 역할을 하는 곳이 route
    • 보통 alert을 통해 들어온 정보를 바탕으로 조건(match or match_rx)를 통해 원하는 receiver로 보내준다.
  • receiver:

    • alertManager로 push 된 alert은 route를 통해 receiver에 전달된다.
    • receiver는 최종적으로 도달된 alert을 slack이나 email로 전송해 주는 역할
    • 어디로 전송할지 결정
    • alert을 통해 전달된 data(annotation, labels)를 원하는 형식으로 만든 후 보내는 역할

공부 내용(loki rules => alertManager => slack web hook api)

  • 레퍼런스: https://grafana.com/docs/loki/latest/alerting/

  • loki rule파일은 prometheus rule 파일과 규칙이 동일!

    • 단, promql -> logql만 다르다
  • loki 설정에서 ruler 설정을 통해

    1. loki에서 평가할 rule 파일 위치가 어디 있는지

      • rule 파일 위치 주의할 것!
      • image
      • 루트 경로 기준으로 경로를 잡아야 한다.
      • tanent_id는 multi tanent로 실행 안할 시(auth_enabled: false) fake가 이름이다.
    2. rule이 trigger 되었을 때 어느 alertmanager로 보낼지

slack 말고 email로도 alert 보내기

  • SMTP서버가 alertmanager에 내장되어 있는 것은 아님

  • 따라서, local에 별도로 smtp server를 올리거나 이미 올라가 있는(ex> smtp.gmail.com:587) smtp 서버를 이용해야 할 것으로 보임

    • 전자의 경우 내부망에서 자유롭게 메일을 보낼 수 있으나 별도의 smtp서버 설치를 해야할 듯
    • 후자의 경우 별도의 smtp서버 설치는 필요 없으나 외부 smtp서버를 사용하기 때문에 내부망에서 메일 주고받지 못할 듯
  • 우선 둘 다 한번 해보자

1. 이미 올라가 있는 smtp 사용(smtp.gmail.com:587)

  • image

    1. [email protected]에서 [email protected]으로 메일을 보낼 것이다.
    2. 그때 smpt서버는 smtp.gmail.com:587을 이용할 것이다.
      1. smtp.gmail.com:587의 auth_username은 [email protected] 이다.
      2. smtp.gmail.com:587의 auth_identity은 [email protected] 이다.
      3. smtp.gmail.com:587의 auth_password은 password 이다.
    • google smtp를 사용하기 위해선 app password를 별도로 만들어 주는 것이 안전!

    • google smtp를 쓰면서 google이 아닌 계정에 대해서도 메일 주고받기 가능?

      • ex> image
      • 보내는 사람은 무조건 google 계정이어야 하고 받는 사람은 다른 메일 서비스 사용자도 가능

2. local에 smtp를 설치 후 사용


alertmanager 외부 api호완 가능성?

1. 외부에서 alertmanager api를 사용해 alert push가능?

  1. 직접 alertmanager api를 콜하는 방식

  • but 공식문서에서는 prometheus의 TSDB를 통해 alert을 보내는 것을 권장하고 클라이언트에서 직접 alert을 push하는 것을 추천하지 않음

2. prometheus metric 형태로 노출 시키는 방식( 이 방식으로 가자)

  • (target event trigger -> prometheus rule -> alertmanager)