모니터링 관련 공부 내용 정리 alertmanager - rnjstjdgh/MyBlog-v-2 GitHub Wiki
2021-04-16
우선 alertmanager 기반 + slack alert으로 해보자
추후에 slack말고 다른 서비스에 대해서도 더 디테일하게 알아보자
-
기본적인 prometheus rule -> alertmanager 부터 시작하고
-
prometheus rule example:
-
[alertmanager -> 외부 메신저(ex slack)]으로 보낼 때 template을 지정하는 방법:
-
-
alertmanager -> grafana datasource 방법을 찾아본 후
-
loki -> alertmanager 방법도 연동 되는지 확인해 보자
공부 내용(Prometheus rules => alertManager => slack web hook api)
- rule
-
example:
-
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)으로 전달 받은 정보를 적절하게 뿌려주는 역할
- alertManager
-
example:
-
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)
-
loki rule파일은 prometheus rule 파일과 규칙이 동일!
- 단, promql -> logql만 다르다
-
loki 설정에서 ruler 설정을 통해
-
loki에서 평가할 rule 파일 위치가 어디 있는지
- rule 파일 위치 주의할 것!
- 루트 경로 기준으로 경로를 잡아야 한다.
- tanent_id는 multi tanent로 실행 안할 시(auth_enabled: false) fake가 이름이다.
-
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)
-
- [email protected]에서 [email protected]으로 메일을 보낼 것이다.
- 그때 smpt서버는 smtp.gmail.com:587을 이용할 것이다.
- smtp.gmail.com:587의 auth_username은 [email protected] 이다.
- smtp.gmail.com:587의 auth_identity은 [email protected] 이다.
- smtp.gmail.com:587의 auth_password은 password 이다.
-
google smtp를 사용하기 위해선 app password를 별도로 만들어 주는 것이 안전!
- google app password 만들기: https://codewizardly.com/prometheus-on-aws-ec2-part4/
-
google smtp를 쓰면서 google이 아닌 계정에 대해서도 메일 주고받기 가능?
- ex>
- 보내는 사람은 무조건 google 계정이어야 하고 받는 사람은 다른 메일 서비스 사용자도 가능
- ex>
2. local에 smtp를 설치 후 사용
-
smtp서버를 직접 설치하는 번거로움만 빼고는 이게 자체 smtp서버를 만들어 쓰는 것이기 때문에 훨씬 더 좋은 방법으로 보임
-
windows smtp server 구축:
alertmanager 외부 api호완 가능성?
1. 외부에서 alertmanager api를 사용해 alert push가능?
- 직접 alertmanager api를 콜하는 방식
- 참고: https://gist.github.com/cherti/61ec48deaaab7d288c9fcf17e700853a
- linux server에서 sh로 실행시킨 결과 잘 push되는 것을 확인
- push된 후, notify도 잘 동작하는 것을 확인
- 참고: https://gist.github.com/cherti/61ec48deaaab7d288c9fcf17e700853a
- but 공식문서에서는 prometheus의 TSDB를 통해 alert을 보내는 것을 권장하고 클라이언트에서 직접 alert을 push하는 것을 추천하지 않음
- https://prometheus.io/docs/alerting/latest/clients/
- 클라이언트에서 직접 보낼 때의 문제점에 대해 공부
- alert이 발생된 원인에 대한 정보들이 기록이 안됨
2. prometheus metric 형태로 노출 시키는 방식( 이 방식으로 가자)
- (target event trigger -> prometheus rule -> alertmanager)