시스템 운영 중 가장 빈번하면서도 치명적인 장애 원인 중 하나는 ‘디스크 풀(Disk Full)’ 상태다. 로그 파일의 급격한 증설이나 데이터베이스의 팽창으로 인해 디스크 용량이 가득 차면, 서비스 프로세스가 중단되거나 데이터 유실이 발생할 수 있다. 본 글에서는 Prometheus와 Alertmanager를 활용하여 디스크 사용량이 90%를 초과했을 때 실시간으로 텔레그램(Telegram) 알림을 전송하는 환경 구축 방법을 상세히 기술한다.

목차

  1. 시스템 아키텍처 및 흐름 이해
  2. 텔레그램 봇 생성 및 API 정보 확보
  3. Prometheus 알람 규칙(Alerting Rule) 작성
  4. Alertmanager 텔레그램 수신자(Receiver) 설정
  5. 알람 테스트 및 임계치 최적화 전략
  6. 결론 및 요약

1. 시스템 아키텍처 및 흐름 이해

디스크 모니터링 알람 체계는 크게 세 단계로 구성된다. 첫째, Node Exporter가 호스트 서버의 디스크 사용량 지표를 수집한다. 둘째, Prometheus가 이 지표를 수집(Scrape)하고 미리 정의된 ‘90% 초과’ 규칙을 평가한다. 셋째, 조건이 충족되면 Alertmanager로 이벤트를 전달하며, 최종적으로 텔레그램 봇 API를 통해 운영자의 스마트폰으로 알림이 전송된다.

2. 텔레그램 봇 생성 및 API 정보 확보

알람을 보내기 위해서는 먼저 텔레그램에서 메시지를 발송할 주체인 ‘봇’이 필요하다.

  1. BotFather와 대화: 텔레그램에서 @BotFather를 검색하여 대화를 시작하고 /newbot 명령어를 입력한다.
  2. API Token 획득: 봇의 이름과 아이디를 설정하면 HTTP API Token이 발급된다. 이는 나중에 Alertmanager 설정에 사용된다.
  3. Chat ID 확인: 알람을 받을 사용자나 그룹의 ID가 필요하다. 봇에게 메시지를 보낸 후 https://api.telegram.org/bot<YourToken>/getUpdates 주소에 접속하여 chat: { id: 12345678 } 형태의 숫자를 확인한다.

3. Prometheus 알람 규칙(Alerting Rule) 작성

Prometheus 서버에 디스크 사용량을 감시하는 규칙 파일을 생성해야 한다. 일반적으로 alert.rules.yml 파일을 만들어 관리한다.

YAML

groups:
- name: disk_alerts
  rules:
  - alert: HighDiskUsage
    expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 > 90
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "디스크 사용량 위험 (서버: {{ $labels.instance }})"
      description: "{{ $labels.device }} 파티션의 사용량이 90%를 초과했습니다. (현재값: {{ $value | printf \"%.2f\" }}%)"
  • expr: 디스크 사용률을 계산하는 PromQL 쿼리다. 전체 크기 대비 가용 공간을 계산하여 90보다 큰 경우를 찾는다.
  • for: 일시적인 수치 상승에 의한 오탐을 방지하기 위해 2분 동안 상태가 유지될 때만 알람을 발생시킨다.

4. Alertmanager 텔레그램 수신자(Receiver) 설정

이제 Alertmanager 설정 파일(alertmanager.yml)에서 수신처를 텔레그램으로 지정해야 한다.

YAML

route:
  group_by: ['alertname']
  receiver: 'telegram-notifications'

receivers:
- name: 'telegram-notifications'
  telegram_configs:
  - bot_token: 'YOUR_BOT_TOKEN'  # 발급받은 토큰
    chat_id: 12345678           # 확인한 Chat ID
    send_resolved: true         # 문제가 해결되었을 때 'Resolved' 알림 전송 여부
    parse_mode: 'HTML'
    message: |
      <b>[알람 발생] {{ .CommonAnnotations.summary }}</b>
      <b>심각도:</b> {{ .CommonLabels.severity }}
      <b>상세내용:</b> {{ .CommonAnnotations.description }}
      <b>발생시간:</b> {{ .GroupLabels.startsAt }}

send_resolved: true 설정을 추가하면 디스크 정리 후 사용량이 내려갔을 때 “문제가 해결되었다”는 메시지도 자동으로 발송되어 운영자가 상황을 종료하는 데 도움을 준다.

5. 알람 테스트 및 임계치 최적화 전략

설정이 완료되었다면 서비스를 재시작하고 실제로 알람이 오는지 확인해야 한다. 테스트를 위해 expr의 수치를 잠시 10% 정도로 낮추어 알람이 발생하는지 확인하는 것이 좋다.

최적화 팁:

  • 파일 시스템 필터링: tmpfsiso9660 같은 가상 파일 시스템은 제외하도록 쿼리를 수정하는 것이 좋다. (node_filesystem_size_bytes{fstype!~"tmpfs|vfat"})
  • 동적 임계치: 데이터베이스 서버처럼 항상 사용량이 높은 곳은 95%로, 일반 웹 서버는 80%로 타겟별 임계치를 다르게 적용하는 것이 효율적이다.

6. 결론 및 요약

디스크 사용량 모니터링은 시스템 안정성의 기본이다. Prometheus의 강력한 쿼리 기능과 Alertmanager의 유연한 라우팅 기능을 결합하면, 누구나 쉽게 엔터프라이즈급 알람 시스템을 구축할 수 있다. 특히 텔레그램은 별도의 비용 없이 강력한 API를 제공하므로 중소규모 인프라 관리에 매우 적합한 솔루션이다.

댓글 남기기