본문 바로가기

기타

[로그 모니터링] Grafana Alerting

반응형

[로그 모니터링] 시리즈를 통해 로그 모니터링을 위한 시스템을 구축했다. 이제 그라파나 대시보드를 통해 실시간으로 로그를 확인할 수 있다.

이번 글에서는 Grafana 의 alert 기능을 사용하여 Error 로그가 출력될 때마다 알림이 발생하도록 해보겠다. 예제는 Grafana 의 예제문서를 참고했다. (https://grafana.com/tutorials/create-alerts-with-logs/)

1. Contact point 설정

Alert 설정을 하기에 앞서 먼저 알림이 발생하는 경우, 알림을 전송할 Contact point 를 생성해준다. Contact point 는 email, Slack, webhook 등 다양한 방식으로 알림을 전달할 수 있는데, 이 글에서는 Webhook 방식으로 알림을 전달해보겠다.

먼저 Webhook.site 에 접속하여 test endpoint 를 할당받는다. 여러개의 endpoint 가 출력되는데, 여기서 unique URL 을 사용할 것이다.

그 다음 Grafana 에 접속하여 Alerting > Contact points 화면으로 접속하여 contact point 생성을 시작한다. Contact Name 을 입력하고 Integration 에서는 Webhook 을 선택해준다. 그리고 URL 에 Webhook.site 에서 발급받은 unique URL 을 입력해준다.

입력을 완료한 후 Test 를 통해서 테스트 알림을 실행하면 Webhook.site 의 INBOX 패널에 테스트 요청이 수신된 것을 확인할 수 있다.


Test 완료 후 저장 버튼을 눌러서 Contact point 생성을 완료한다.

2. Alert rule 생성

이제 본격적으로 알림을 발생시킬 규칙, Alert rule 을 정의해보겠다.

Alerting > Alert rules 에 접속하여 New alert rule 을 클릭하여 Alert rule 생성을 시작한다.

Alert rule 생성 화면에서 규칙의 이름을 적어준 뒤 쿼리와 알림 조건, 평가 주기 등을 지정해준다.

- Query & Alert Condition

알림 전송에서 가장 중요한 부분인 알림 전송 조건, 규칙을 정의할 것이다.

먼저 data source 를 Loki 로 지정해준다. 그 다음 loki 에서 알림 조건을 위해 조회할 쿼리와 알림 규칙을 지정해준다. 이 글에서는 my-app 의 로그 중 log level 이 error 인 로그가 발생하는 경우에 알림을 발생시키도록 할 것이다.

먼저 label filter 에서 service_name = app, level = error 로 조건을 지정하여 my-app 의 error 로그가 조회되도록 구성했다. 그리고 Operations 에서 Count over time 을 선택하고 값을 1m 으로 설정하여 조회 조건 시간을 1분으로 지정해준다. 그 다음 Sum by 를 추가하고 Label 을 level 로 지정하여 level 값별로 로그를 group by 한 개수를 조회하도록 쿼리를 구성한다. (label filter 에서 level = error 로 지정했기 때문에 이 쿼리에서 조회되는 로그는 모두 error 로그이다. 결국 쿼리의 결과는 error 로그의 개수를 반환하게 된다.

그 다음 쿼리 하단의 Options 에서 Instant 로 조회 조건을 지정해준다. 이 값은 쿼리를 수행할 대상 시간의 범위인데 Range 로 하면 쿼리를 수행하는 단일 시점이 아니라 조회되는 범위 전체에 대해서 쿼리를 수행하기 때문에 내가 원하는 조건을 조회되지 않는 경우가 있다.

쿼리를 다 작성했으면 결과에 대한 Alert condition 을 설정해준다. 쿼리의 결과를 보고 알림을 전송할지, alert 인스턴스의 상태를 변경할 지를 판단하는 조건이다. 여기서는 Last IS ABOVE 0 으로 지정하여 1개 이상의 error 로그가 조회되는 경우 알림을 발생시키도록 한다.

- Folder & Evaluation behavior

알림 규칙이 다 정의되었으면 얼마나 자주 규칙을 평가할 것인지 설정해야 한다. 이 기준은 아래의 세가지 항목으로 결정된다.

 

Evaluation interval: alert rule 을 평가하는 주기
Pending period: 알림 전송을 위해 alert rule 조건 충족이 유지돼야 하는 시간. 일시적인 예외에 알림 전송을 방지할 수 있다.
Keep firing for: 조건 해제되고도 alert rule 인스턴스의 fire 상태를 유지할 시간

 

먼저 Add forler and labels > Folder 항목에서 새로운 폴더를 생성하여 alert rule 이 저장될 위치를 지정한다.

그 다음 Set evaluation behavior 에서 새로운 Evaluation group 을 생성해준다. 이 때 Evaluation interval 을 지정할 수 있는데, 같은 group 에 포함된 규칙들은 모두 같은 interval 을 가지는 구조이다. 원하는데로 1m 또는 10m 등과 같이 시간을 입력해주면 된다.

아래에 Pending period 와 Keep firing for 항목들도 있는데, 이들도 똑같이 원하는 시간을 지정해주면 된다. 이 글에서는 특정 상태의 변화가 아닌 error 로그 발생에 대한 즉각적인 알림을 수행하기 위해 모두 None (0s) 으로 지정해주었다.

- Configure notification

알림 발생 관련 설정을 마쳤다면 이제 알림을 전송할 경로를 지정해주어야 한다. Contact point 에서 앞 순서에서 생성했던 contact point 를 선택하여 완료했다.

이제 저장을 누르면 alert rule 이 생성되고 규칙 평가를 수행하는 것을 확인할 수 있다.

3. Alerting

생성된 규칙은 Alerting > Alert rules 에서 확인할 수 있다.

Evaluation group 별로 규칙이 구분되어 있는데, 선택해서 확인하면 규칙과 규칙의 상태, 인스턴스 등을 확인할 수 있다.


Alert rule 의 view 버튼을 클릭해서 규칙 상세 화면으로 들어가면 아래와 같이 규칙에 대한 쿼리, 조건 정보, 인스턴스, 상태 변경 히스토리 등 정보를 확인할 수 있다.


error 로그의 출력에 따라 firing 과 normal 상태로 변경되는 것을 확인할 수 있고, Webhook.site 에 알림이 전송되는 것도 확인할 수 있다.

[References]

- How to create alert rules with log data: https://grafana.com/tutorials/create-alerts-with-logs/

 

How to create alert rules with log data | Grafana Labs

How to create alert rules with log data Loki stores your logs and only indexes labels for each log stream. Using Loki with Grafana Alerting is a powerful way to keep track of what’s happening in your environment. You can create metric alert rules based o

grafana.com

반응형