콘텐츠로 건너뛰기

웹훅(WebHook)을 이용한 쿠버네티스 간단 HPA 시스템 모니터링

  • 테크

안녕하세요. 이전 기술 블로그에서는 텔레그램 봇을 이용하여 간단하게 시스템 모니터링을 구현하였는데요.
웹훅(WebHook)을 이용하여 Grafana나 Prometheus 를 연동하여 특정 경계값에 대해서 모니터링 할 수 있는 방법을 알아 보겠습니다.

🔽이전글 돌아보기

🔭모니터링의 중요성 그리고 관측 가능성이란?

모니터링은 대상의 현재 상태에 대한 지표와 설정한 임계지점에 대한 알람을 설정할 수 있는데요. 모니터링이 시스템의 현재 상태(지표)를 파악하고 설정한 임계치에 따라 알람을 받는 ‘현상 파악’에 집중한다면, 관측 가능성(Observability)은 수집된 데이터를 통해 내부 상태를 깊이 있게 이해하고 ‘왜 이런 문제가 발생했는지’ 추적하는 능력을 의미합니다.

🪝웹훅(WebHook)이란?

웹훅(Webhook)은 특정 이벤트가 발생했을 때 HTTP를 통해 애플리케이션 간 데이터를 자동으로 전송하는 ‘이벤트 기반 통신’ 방식입니다.

쉽게 비유하자면, API는 내가 택배사에 5분마다 전화해서 “제 택배 왔나요?”라고 계속 묻는 방식입니다.
반면 웹훅은 택배 기사님이 물건을 문 앞에 두고 가면서 “택배 도착했습니다!”라고 먼저 알림톡을 보내주는 방식입니다. 알림이 올 때만 확인하면 되니 훨씬 효율적입니다.

출처 : zapier.com
Zapier

👁️Prometheus와 Grafana를 바탕으로 경계값 도달 시 모니터링 구성

프로메테우스(Prometheus)는 클라우드 네이티브(Cloud-Native )환경1에서 시계열 메트릭 데이터를 수집, 저장, 조회하는 대표적인 오픈 소스 모니터링 시스템입니다. 타겟(Target)으로부터 주기적으로 지표를 직접 가져오는 Pull 방식을 사용하며, 전용 쿼리 언어인 PromQL과 시각화 도구인 그라파나(Grafana)를 연동해 실시간으로 시스템 성능과 상태를 한눈에 파악할 수 있도록 지원합니다.

주로 CPU 및 메모리 사용량, 네트워크 트래픽 등을 감시하며, 프로메테우스는 설정된 규칙에 따라 이 데이터들을 지속적으로 분석합니다. 만약 특정 지표가 미리 정해둔 기준치를 넘어서거나 비정상적인 패턴이 감지되면, 즉시 알람을 발생시켜(Trigger) 관리자가 인지할 수 있게 해줍니다.

  1. *Cloud- Native 환경 : 클라우드의 이점을 최대한 활용하기 위해 애플리케이션을 구축하고 실행하는 현대적인 소프트웨어 개발 및 운영 방식 ( ex.마이크로 서비스(MicroServices), 컨테이너 (Containers), CI/CD, DevOps ) ↩︎

📝PromQL 데이터 쿼리를 통해 메트릭 정보 확인

프로메테우스(Prometheus)에서 제공하는 Metrics 은 Grafana 내의 Explore 메뉴를 통해 아래와 같은 쿼리에서 해당 데이터 값을 확인할 수 있습니다.

  • 노드별 CPU 사용률 (%)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
PromQL 데이터 쿼리를 통해 메트릭 정보 확인 이미지
ⓒBizSpring 노드별 CPU 사용률(%)
  • 노드별 메모리 사용률 (%)
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
PromQL 데이터 쿼리를 통해 메트릭 정보 확인 이미지
ⓒBizSpring 노드별 메모리 사용률(%)

현재 비즈스프링 내부에서는 Google Chat(기존 행아웃)을 주 업무 소통 도구로 활용하고 있습니다. 이번 포스팅에서는 이 Google Chat의 웹훅(Webhook) 기능을 연동하여, 쿠버네티스 리소스 사용량이 설정한 기준치에 도달했을 때 실시간으로 알림 메시지를 받아보는 시스템을 구축해 보겠습니다.

Google Chat의 웹훅(Webhook) 기능을 연동하여, 쿠버네티스 리소스 사용량 모니터링 시스템 구축 예시 화면
ⓒBizSpring Google HangOut Space

먼저 알림을 수신할 채널을 준비해야 합니다. 위 예시 이미지와 같이 Google Chat 내에서 [스페이스 만들기]를 진행한 후, [앱 및 통합] 설정을 통해 웹훅을 추가하고 고유한 수신 URL을 생성합니다.

이렇게 생성된 URL은 외부 시스템의 신호를 받는 창구가 됩니다. 이제 그라파나(Grafana) 대시보드로 이동하여 [Alerting > New alert rule] 메뉴를 통해 본격적인 알람 규칙(Rule set)을 정의해 보겠습니다.

ⓒBizSpring New Alert rule #1

HPA가 보는 “현재 실행 중인 replica 수 / 최대 허용 replica 수” 비율이 0.9 이상이면 알람 오는 경우를 정해보겠습니다. 아래의 promql의 경우 replication 포화도 (saturation)를 측정할 수 있는 쿼리입니다.

(
  kube_horizontalpodautoscaler_status_current_replicas{namespace="gp-prod"}
  /
  kube_horizontalpodautoscaler_spec_max_replicas{namespace="gp-prod"}
) > 0.9
and
kube_horizontalpodautoscaler_spec_max_replicas{namespace="gp-prod"} > 1
ⓒBizSpring Edit alert rule#2

알람이 너무 자주 울리면 정작 중요한 장애를 놓칠 수 있는데요. 이때 ‘지속 시간(Pending period)’ 설정이 매우 중요합니다. 이는 특정 수치를 초과하자마자 알람을 보내는 대신, 지정된 시간 동안 상태가 지속될 때만 알림을 트리거하는 기능입니다. 이를 통해 일시적인 부하 급증에 따른 번거로운 알람을 방지하고, 모니터링의 신뢰도를 높일 수 있습니다

이렇게 확정된 알람은 ‘Contact point’ 설정을 통해 원하는 목적지로 전달되는데, 이때 앞서 생성한 Webhook URL을 등록하면 실시간 메시지 수신이 가능해집니다. Grafana는 Webhook뿐만 아니라 슬랙(Slack), 텔레그램(Telegram), 이메일 등 현업에서 주로 사용하는 커뮤니케이션 채널과의 연동을 폭넓게 지원하고 있습니다.

ⓒBizSpring Contact points#3

기본 설정의 알람 메시지는 정보의 나열에 그쳐 가독성이 다소 떨어지는 단점이 있습니다. 이를 보완하기 위해 템플릿을 직접 수정하여, 장애 상황을 즉시 이해할 수 있는 깔끔한 메시지 형태로 다듬어 보겠습니다

ⓒBizSpring Google HangOut#4

가시성을 높이기 위해 보통 ‘Configure notification message’ 단계에서 SummaryDescription을 수정하곤 하는데요. 안타깝게도 웹훅 알림에서는 이 설정만으로 메시지가 충분히 깔끔해지지 않습니다.

[Summary]

🚨 [{{ $labels.namespace }}] {{ $labels.horizontalpodautoscaler }} Max Replica 도달

[Description]

HPA가 최대 Replica에 도달하여 더 이상 스케일아웃이 불가능합니다.

- Namespace : {{ $labels.namespace }}
- HPA       : {{ $labels.horizontalpodautoscaler }}
- 비율       : {{ $values.A }}  (current/max)
- 상태       : 🔴 즉시 확인 필요

위와 같이만 설정하면 아래와 같이 여전히 가독성이 떨어지는 메시지를 확인하실 수 있습니다.

ⓒBizSpring Google HangOut#5

메시지를 완벽하게 제어하려면 Contact Point의 세부 설정을 변경해야 합니다.

[Home > Alerting > Contact point] 메뉴로 이동하여, 이전에 등록한 웹훅(Webhook) 설정의 ‘Enter Custom Title’ ‘Enter Custom Message’ 항목에 아래와 같이 제공된 Title과 Message를 사용하여 이전보다 깔끔해진 메세지로 변경해보겠습니다.

이렇게 서 메시지 템플릿을 최적화하면, 이전과는 다른 가독성이 향상된 알림을 확인할 수 있습니다.

ⓒBizSpring Grafana Contact points#6
ⓒBizSpring Optional Google Chat Settings#7

Enter Custom Title

{{ range .Alerts }}{{ .Annotations.summary }}{{ end }}

Enter Custom Message

{{ range .Alerts }}
━━━━━━━━━━━━━━━━━━━━━━━━
{{ .Annotations.summary }}
━━━━━━━━━━━━━━━━━━━━━━━━
{{ .Annotations.description }}
━━━━━━━━━━━━━━━━━━━━━━━━
{{ end }}

이렇게 설정만 살짝 바꿔줘도, 이제야 정말 ‘쓸만한’ 알람 메시지가 날아오기 시작합니다

ⓒBizSpring Webhook K8s Messages#8

지금까지 Prometheus와 Grafana, 그리고 Webhook을 활용해 쿠버네티스 HPA 상태를 구글 챗으로 모니터링하는 방법을 알아보았습니다.

단순히 “서버가 죽었다”는 사후 알림을 받는 것을 넘어, HPA 경계값 와 같은 전조 증상을 미리 파악하는 것은 서비스의 안정성을 유지하는 데 핵심적인 역할을 합니다. 특히 웹훅(WebHook) 을 활용한 자동 알림 시스템은 불필요한 리소스 낭비를 줄이고 업무 효율을 극대화 할수 있는데요.

여러분의 환경에서도 시스템이 보내는 목소리에 귀를 기울여, 더욱 견고한 인프라 운영 환경을 구축해 보시길 바랍니다. 감사합니다.


최신 마케팅/고객 데이터 활용 사례를 받아보실 수 있습니다.

비즈스프링 뉴스레터 구독하기 →

문의 02-6919-5516 |  sales@bizspring.co.kr