Grafana 대시보드 생성 / Alert 설정
Grafana를 사용하는 가장 큰 이유는 대시보드를 만들고 시스템이나 프로세스의 상태나 로그를 실시간으로 모니터
링하기 위함입니다. Grafana 공식 사이트에서 완성되있는 대시보드를 제공하지만 시스템을 운영하다보면 대시보
드를 직접 만들어야 될일도 있습니다.
그리고 Prometheus 와 연동하여 메트릭 정보를 모니터링 하는 경우도 있지만 로그를 모니터링 하면서 특정 조건
만족시 Alert 을 발생시켜 사용자에게 알림을 줄수도 있습니다.
그래서 이번 포스팅에서는 로그상에 키워드를 검출하여 특정 조건 만족시 이메일로 알람이 가게 하는 대시보드를
만드는 방법을 설명드리겠습니다.
Helm Grafana 수정
이전 포스팅 https://ksr930.tistory.com/175 에서 Prometheus Community Git 에서 제공하는
kube-prometheus-stack 설치 내용에 grafana 내용도 있었습니다.
grafana 대시보드에서 메일 전송을 하기위해서는 smtp 설정을 해야 하는데 다음 내용을 values.yaml 파일
grafana 항목 내부에 추가해야 합니다.
grafana.ini:
smtp:
enabled: true
host: "smtp.gmail.com:587"
user: "이메일주소"
password: "비밀번호"
skip_verify: true
편의상 gmail 을 사용한다는 가정하에 설명드리겠습니다.
gmail의 경우 계정설정의 보안탭에서 보안수준이 낮은 앱의 액세스 설정을 "액세스 허용" 으로 해야 smtp를 통해
메일을 발송할수 있으므로 바꿔주시기 바랍니다.
Alerting 설정
grafana UI를 띄웠다면 왼쪽탭의 Alerting 에서 Notification channels 탭으로 이동합니다.
Add channel 을 눌러서 Alert 설정을 할수있는데 Alert Type은 여러가지가 있습니다.
Slack, E-mail, Webhook, Discord 등등 여러가지 방법중 E-mail Type에 대해 설명하겠습니다.
- Name : 대시보드 Alert 탭에서 사용할 이름입니다.
- Type : Alert 방식을 선택하는 부분입니다.
- Address : Email 방법 선택시 알람을 받을 주소를 입력하면 됩니다.
Email Alert 테스트
grafana 를 smtp를 설정한상태로 실행시켜놨다면 Alert 테스트를 해볼수 있습니다.
정상적으로 알람이 발송되면 우측상단에 Test notification sent 라는 문구로 팝업이 뜨게 됩니다.
Alert 테스트 수신이 정상적으로 되었는지 메일을 확인해보겠습니다.
Dashboard 생성및 Alert 설정
이제 특정 로그키워드를 검출하고 검출시 Alert을 발생시킬수 있도록 하는 대시보드를 만들어보겠습니다.
New Dashboard 생성
먼저 빈 대시보드창을 만들고 empty panel 을 생성하고 Data source는 Loki로 지정합니다.
Log browser 부분에 아래와 같이 입력합니다.
count_over_time({app="myapp"} |= "keyword" [30s])
- myapp : 쿠버네티스에 올라와있는 애플리케이션 이름입니다.
- keyword : 애플리케이션이 발생시키는 로그에서 검출할 키워드 입니다.
- count_over_time : LogQL 문법으로 지정한 시간 범위 내에서 검색된 키워드의 개수를 반환합니다.
- [30s] : count_over_time 문법 사용시 시간 범위에 대한 값입니다. (s, m, h, d 시간단위 사용)
저는 spring-boot 애플리케이션을 올려놓은 상태고 url 호출시 "User2" 라는 로그를 찍게하여 해당 단어를 키워드
로 잡아 놓은 상태입니다.
Y축을 사진에 나온것처럼 특정 범위만큼 지정하고싶다면 우측에 Standard options 에서 Min, Max 값을 설정하
면 됩니다. 하단에 Query 탭 우측에 Alert 탭에서 이제 위에서 등록한 Notification Channel 을 이용해서 Alert 을
등록해보겠습니다.
Alert 설정
Alert 탭에서 Create Alert 버튼을 누르면 설정옵션들이 나옵니다.
Rule
Name : Alert 발생시 나타낼 이름입니다.
Evaluate every : Alert 조건을 탐색하는 시간 주기입니다. 기본값은 1m(1분)
For : Alert 조건에 맞게 탐색이 될때 발생조건이 유지되는 시간입니다. 기본값 5m 일때 Alert 조건 일치시
해당 조건이 5분동안 유지되면 Alert을 발생시킵니다.
Condition
avg() : 데이터 집계 방식을 설정하는 옵션입니다.
query(A, 5m, now) : 첫번째 인자는 Query 탭에서 설정한 Query의 이름입니다. 2,3 번째 인자는 시간 범위를
나타내며 5m, now 인경우 현재시간부터 5분 전까지의 데이터를 탐색합니다.
IS ABOVE : 지정한 값보다 클때의 조건입니다. 이 외에도 값이 작을때, 일정범위내에 있을때, 일정 범위를 벗어
날때 등에 대한 옵션을 지정할수 있습니다.
No data and error handling
Condition 에 설정한 조건으로 데이터 탐색시 데이터가 없거나 null인경우 혹은 쿼리 실행시 타임아웃 에러 발생에
대한 설정을 하는 옵션입니다.
No Data Option | 설명 |
---|---|
No Data | No Data 상태 유지 |
Alerting | Alerting 발생 |
Keep Last State | 현재 alert rule 상태 유지 |
Ok | 정상 상태 |
Error or timeout option | 설명 |
---|---|
Alerting | Alerting 발생 |
Keep Last State | 현재 alert rule 상태 유지 |
Notification
Send To : 위에서 설정한 Notification Channel 에서 선택하는 옵션입니다.
Message : Alert 발생시 같이 전송할 텍스트를 입력하는 부분입니다. Notification Channel 타입에 따라
HTML 언어를 지원하기도 합니다.
저는 다음과 같이 설정하고 테스트를 진행해보았습니다.
- 10초 주기로 조건을 탐색하고 해당 조건이 10초동안 유지될시 Alert를 발생
- A 쿼리의 합계를 조건으로 하고 값이 10 이상일때 Alert 발생 조건
Alert 테스트
"User2" 라는 키워드를 검출되게 하기위해 URL호출을 해서 Alert 발생조건을 달성 시켜보았습니다.
노란색 라인에서 처음으로 Alert Condition 에 맞게 검출이되었고 10초후 빨간색 라인에서 Alert 를 전송했다는
신호를 확인할수 있습니다.
Alert 가 제대로 전송이 되었는지 메일을 확인해보겠습니다.
'클라우드 > Kubernetes' 카테고리의 다른 글
쿠버네티스 관리 도구 kubectl 설치와 사용방법 (0) | 2023.11.03 |
---|---|
[Kubernetes] CronJob 예제, Completed, Failed 파드 관리하기 (0) | 2023.06.14 |
helm install no matches for kind "Certificate" 에러 해결 & Cert-manager란?? (0) | 2022.12.21 |
Grafana OAuth 방식으로 Keycloak Login 연동하기 #JWT 토큰 발행 (1) | 2022.05.18 |
[Kubernetes] Grafana 에서 Kafka 모니터링 하기 #Prometheus #kafka-exporter (0) | 2022.04.01 |
댓글