Grafana를 프로젝트에 적용하고 모니터링을 완성한 후 장애가 발생했을 때 email로 받아보면 좋겠다는 생각을 하게 되었습니다.
Grafana Alert 기능을 사용하면 장애 발생 시 email로 받아볼 수 있음을 알게 되어 적용하였습니다.
grafana 서버로부터 이메일(Alert)을 받으려면 보안 수준이 낮은 앱 엑세스를 허용해 주어야 합니다.
하지만 2022.05.30부로 구글에서 더 이상 사용자 이름과 비밀번호만 사용하여 로그인하도록 요청하는 서드 파티 앱 또는 기기의 사용을 지원하지 않아 보안 수준이 낮은 앱 엑세스를 허용해주지 못합니다.
위 내용을 해결하려면, 구글 계정 2단계 인증 후 앱 비밀번호를 생성해주면 됩니다.
2단계 인증
앱 비밀번호 생성
이제 생성된 16자리의 앱 비밀번호로 grafana 서버에서 해당 계정에 메일을 보낼 수 있는 것입니다.
Grafana Alert을 이용해 email을 받으려면 grafana-default-email 설정이 필요합니다. 이 때 grafana.ini 설정을 해줄 필요가 있습니다.
저는 EC2 서버에 Grafana를 Docker로 띄워놨기 때문에 Container에 직접 접속하여 grafana.ini 파일을 수정할 필요가 있었습니다.
# locate grafana.ini
# vi /etc/grafana/grafana.ini
[smtp]
;enabled = false
;host = localhost:25
;user =
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
;password =
;cert_file =
;key_file =
;skip_verify = false
;from_address = admin@grafana.localhost
;from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
이 때 Docker로 Grafana를 사용하시는분들이라면 :wq로 저장하고 나오려고 하면 permission denied
에러가 발생하면서 적용이 되지 않을 것입니다.
그래서 Grafana Docker로 접근할 때 아래 명령어로 접근하면 수정이 가능해집니다.
docker exec -it --user=root <containername> /bin/sh
root 유저로 접근하여 read-only file을 강제로 수정할 수 있게 해줍니다.
필자는 sudo 권한이 되지 않아 linux OS 별 패키지 관리 도구를 찾아보며 여러 시도를 했었습니다. 필요하면 아래 토글을 참고하세요.
```bash
apk add sudo
```
docker의 경우 가볍고 안정성이 좋은 초경량화된 alpine linux를 사용하는데, 아래의 명령어로 linux OS를 찾을 수 있다.
```bash
$ cat /etc/os-release
```
💡 ubuntu → apt
alpine linux → apx
amazon linux, centOS → yum
또한 password 값을 작성할 때 google email 비밀번호를 넣는다면 설정이 올바르게 되지 않습니다. 그 이유는 구글 보안 설정 때문입니다.
위 설정을 완료하고 Grafana 재시작 해주면 적용 완료 !!
서비스가 운영되고 있는 각 서버가 다운될 때 이메일을 보내도록 alert를 설정하고자 합니다.
현재 grafana는 prometheus 서버의 값을 받아오고 있습니다. 따라서 prometheus에서 서버가 살아있는지 여부를 확인하는 up 쿼리를 이용하고자 합니다.
Grafana Home → Alerting → Alert rules → New alert rule
alert의 이름을 생성합니다.
조회하고자 하는 서비스 서버의 인스턴스와 job (prometheus에 등록한 서비스 이름) metrics를 작성합니다.
Math
시계열 데이터 또는 숫자 데이터에 대한 자유 형식의 수학 공식을 이용하여 Alert를 보낼 수 있습니다.
💡 $service up : service up Metrics 값을 가져옴
Classic condition
💡 IS BELOW = 이하, IS ABOVE = 이상
Math, Classic condition 두 방법 모두 가능합니다.
evaluation Interval 시간과 pending period 시간을 설정해줄 수 있습니다.
grafana 공식 문서에 따르면 evalutaion이 interval 시간마다 체크되고, 조건이 위반되면 period 시간 만큼 pending이 이루어집니다.
지정한 period 시간이 지난 뒤 여전히 evaluation 조건이 위반되면 Alert가 발행됩니다.
interver 시간은 10초, pending period는 20초로 설정해주었습니다.
💡 Link dashboard and panel로 대시보드 패널을 추가하면 실제 url은 localhost로 보내지게 된다.
💡 Grafana 서버의 public IP와 대시보드 UID URL을 Runbook URL 또는 **Add custom annotation**에 직접 입력하여 대시보드를 볼 수 있도록 함
이후 저장해주면 Alert가 완성 !!
Apigateway-service를 꺼서 테스트한 결과 위와 같이 메일을 받을 수 있었습니다.
이상으로 Grafana Alert를 활용하여 Service의 모니터링 상황을 email로도 받아볼 수 있게 설정하여 보았습니다.
https://shanepark.tistory.com/476
https://techexpert.tips/ko/grafana-ko/grafana-이메일-통지-설정/
https://grafana.com/docs/grafana/latest/