Grafana Notification 설정하기

Ryan Kim
6 min readSep 4, 2022

--

시스템 운영 관점에서의 모니터링과 쿠버네티스

그라파나를 단순히 로그만 수집해서 시각화한다고 생각하면 안된다.

그라파나는 Qraft Technologies에서 쿠버네티스를 운영 서버에 도입하는 시점에서부터 사용되었던 모니터링 애플리케이션이다.

그라파나 자체는 데이터를 시각화하여 분석 및 모니터링을 용이하게 해주는 오픈소스 분석 플랫폼이며, 기본적으로 Prometheus를 지원하고 있고, 필요에 따라 사용자가 이용 중인 시계열 DB 등을 지원하는 것도 확인 가능하다.

쿠버네티스를 이용한 현업 경험이 전무했던 3개월 전에는 모두의 MLOps 문서에 컨트리뷰션을 하면서 그라파나에 대해 어렴풋이 알고 있던 때라, 명확한 도입 목적에 대해 이해하지 못했다.

그러나 그라파나 등 모니터링 툴을 시스템에 도입함으로써

  1. 인프라에 대한 전체적인 가시성을 확인함으로써 쿠버네티스 내에 돌아가는 애플리케이션에 대한 가용할 수 있는 자원과 배포된 애플리케이션의 상태와 자원 현황을 확인함으로써 현재 & 미래에 배포될 애플리키에션에 대해 안정성을 확보가 가능하며
  2. 모니터링 결과를 통해 고도화된 Cloud Native또는 On-Premise 시스템을 구축할 때 사용하는 지표로 활용하는 것이 가능하다.

또한 내부적으로 Flyte의 전사 배포가 임박하면서 리소스를 관리하는 것이 중요해짐에 따라 Grafana를 전략적으로 활용해지는 것의 중요성이 크게 부각되었다.

이번 포스팅과는 별개의 얘기이긴 하지만, Flyte 자체에 Notification을 설정하는 방법이 있는데, 이걸 설정하느라 삽질을 많이 했다.

그런데 그럴 필요 없이 그라파나에서 쿼리 설정만 잘해서 Notification 설정을 해놓으면 Notification 설정을 위해 많은 시간을 할애할 필요가 없었는데, 이걸 눈치를 늦게 채서 현타가 쎄게 왔었다.

자, 그럼 한 번 그라파나 Notification 설정 방법에 대해 알아보자.

1. 그라파나 Notification

다음 이미지에서 보는 것처럼 +new contact point 를 클릭해 계정을 추가해줍니다.

다음 포맷을 작성해줍니다.

  • name: 해당 check point가 추후에 list 형태로 표기되는 명칭입니다. (사용자 임의 지정 값)
  • contact point type : alert 알림을 받을 곳으로, 메일로 값을 설정해줍니다.
  • addresses : alert 알림을 받을 메일 계정을 작성합니다.
  • message : 메일로 알람이 올 때, 무엇에 대한 메일인지 기본 메시지 사항을 작성해줍니다. (추후에 아래 부분에서 특정 에러에 대한 alert 메세지를 적는 사항에 대해 추가 언급이 될 예정입니다)
  • alert 계정 설정이 마무리 되었다면, 이제 어떤 alert 알림을 받을 것인지, metric을 설정해주는 작업을 함께 설정해줘야합니다.

계정 설정 후에 어떤 metric을 기준으로 Notification을 받을 것인지 설정 전, 위의 이미지에서처럼 Dashboards에서 new folder를 클릭해 사용자가 직접 설정한 metric을 관리할 폴더를 생성해줍니다.

위 작업에서는 Legacy라는 폴더를 준비했습니다.

폴더 생성 이후에, alerting>notification policies 로 접속해서 root policy의 기본 contact point를 앞서 설정한 이메일 계정으로 변경해줍니다.

기본 알림 계정 정책이 변경되었다면, 이제 alter rules로 들어와 + new1 alert rule을 생성합니다.

위 이미지에서처럼 alert 규칙을 생성하면, 다음과 같은 화면에서 format을 입력할 수 있습니다.

여기서 rule을 정의하는 것이 중요한데

먼저 어떤 rule type인지 작성하고 (사용자 임의로 작성 가능, 위에서는 FOSS API 의 이상치를 측정하는 rule이기 때문에 rule name을 foss api라고 작성) rule type을 지정해줍니다.

Grafana Managed Alert 선택 (사용자 커스텀 alert 이며, 생성한 folder가 여기서 사용 가능합니다)

folder를 선택합니다. (위에서 폴더 생성을 안하면, 아무것도 표기 안되니 주의)

그리고 쿼리를 생성합니다.

그라파나에서 쿼리를 작성하는 방법은 기본적으로 Prometheus promql을 기반으로 하고 있기 때문에, 작성 쿼리 규칙을 확인 후, 추가해줍니다.

작성이 되었다면, 쿼리의 오류 여부를 확인하기 위해 Run Queries를 실행해줍니다.

마지막으로 alert 메세지 작성 및 data가 없거나 에러 발생 시 추가 옵션을 설정할 수 있습니다.

현재 foss api의 pod에서 pending, known, failed 상태가 발생할 경우, 알림을 주는 상황입니다.

즉, 해당 데이터가 발생하지 않으면, No Data를 반환하기 때문에 이 때, 에러 메세지를 발생 시키는 것이 아니라 정상적인 상황이므로 ok 로 상태 메세지를 설정합니다.

하지만, timeout이나 error가 발생한 상황은 명백히 foss api에서 문제가 있는 상황이므로, alerting 정책이 수행되어야하므로 alert로 변경합니다.

Add details for your alert 에서 메일이 올 때, 어떤 사항으로 alert가 오는지 설정합니다.

즉, 메세지를 작성해줘야하는데, 해당 부분에 alert로 전달하고 싶은 메세지를 작성해주면, 모든 설정이 완료됩니다.

2. 후기

그라파나에서 Promql로 쿼리문을 작성하는 것이 SQL이랑 동일할 줄 알았는데, 전혀 다르다.

일단 시계열 데이터에 대한 쿼리라는 부분이 한 몫을 하는 것 같아서, 약간의 공부가 필요했다.

익숙해지고 나면 SQL이랑 비슷한데 promql 공식문서 찾아보면서 문제를 해결했다.

아무쪼록 k8s 하나로 CS의 많은 부분을 배워간다.

Ryan

--

--