Prometheus 디스코드 웹훅

2025. 10. 2. 07:50·Network

백엔드 서버가 가동중일시 이 서버를 모니터링할 수 있는 Prometheus라는 오픈소스가 있다.

Prometheus는 서버의 Metrics 정보를 수집하는 서버로서 Grafana와 같이 연동하여 모든 데이터를 시각화한다.

오늘은 Node.js 백엔드에 Prometheus을 적용하여 백엔드 서버가 다운될 때 알림을 디스코드 WebWook을 통해서 알리도록 하겠습니다.

 

Prometheus나 Grafana는 웹사이트에서도 다운로드할 수 있지만, 저는 Docker을 이용해 이미지를 가져와 컨테이너로 만들었습니다.

 

│  docker-compose.yml
│
├─alertmanager
│      alertmanager.yml
│
├─backend
│      .gitignore
│      Dockerfile
│      package.json
│      server.js
│
└─prometheus
        prometheus.yml
        rules.yml

 

 

#Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]
#package.json
{
  "name": "discord-webhook-proxy",
  "version": "1.0.0",
  "main": "server.js",
  "dependencies": {
    "express": "^4.18.2",
    "axios": "^1.5.0"
  }
}
#app.js
app.post('/webhook', async (req, res) => {
  console.log('Received alert:', JSON.stringify(req.body, null, 2));
  const { alerts } = req.body;

 

백엔드에서는 post 메서드로 서버의 상태를 출력하고 있으면 된다

 

docker-compose.yml

 

version: '3.8'

services:
  backend:
    build: ./backend
    container_name: backend-app
    ports:
      - "3000:3000"
    networks:
      - monitoring

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/rules.yml:/etc/prometheus/rules.yml
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    ports:
      - "9090:9090"
    networks:
      - monitoring
    depends_on:
      - backend

  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    volumes:
      - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
    ports:
      - "9093:9093"
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

 

prometueus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

# Alertmanager 설정
alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - alertmanager:9093

# 규칙 파일 로드
rule_files:
  - "rules.yml"

# 스크레이프 대상 설정
scrape_configs:
  - job_name: 'backend'
    static_configs:
      - targets: ['localhost:3000']
    metrics_path: '/metrics'

  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

 

이때 alertmanager의 규칙을 정할 수 있는 rule이 중요하다.

 

groups:
  - name: backend_alerts
    interval: 30s
    rules:
      # 서비스 다운
      - alert: ServiceDown
        expr: up{job="backend"} == 0
        for: 15s
        labels:
          severity: critical
        annotations:
          summary: "🔴 Backend service is down"
          description: "Backend service has been down for more than 1 minute"

 

summary, description을 통해서 실제 디스코드에서 나올 오류 메시지를 정할 수 있다.

 

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'backend_alerts'
  routes:
    - match:
        severity: critical
      receiver: 'backend_alerts'
      repeat_interval: 5m

receivers:
  - name: 'discord_webwook'
    discord_configs:
      - webhook_url: '(url) 입력'
        title: '{{ .CommonAnnotations.summary }}'
        message: '{{ .CommonAnnotations.description }}'
        send_resolved: true

 

 

 

rule에 적은 대로 서버에 어떤 문제가 발생하게 되면 alertmanager에 들어와서 match에 맞는 작업들을 수행하게 됩니다.

이제 docker을 실행해 주고 백엔드 서버를 끄게 되면

이처럼 discord에 백엔드 서버가 꺼졌다고 알림이 오게 됩니다.

 

#도커 명령어 
docker-compose up -d # 도커 컴포즈 파일 실행 -d 는 demon으로 실행 터미널 유지할 필요 X
docker logs [id or name] # 서버 오류 확인 
docker ps -a # 꺼진 컨테이너 까지 다 확인
docker system prune -f # 컨테이너 정리

 

 

'Network' 카테고리의 다른 글

Istio로 대규모 트래픽 관리하기: 실전 적용 사례와 확장 전략  (2) 2026.01.10
EKS에서 ArgoCD로 GitOps 구축하기: 순환 의존성 해결부터 Single Sync까지  (0) 2026.01.05
실전 Kubernetes 보안: 4C 모델을 프로덕션 클러스터에 적용하며 배운 것들  (0) 2026.01.04
GitHub Actions Docker CI 파이프라인 구조 이해하기: 멀티 아키텍처 빌드부터 캐시 전략  (1) 2026.01.03
SealSecret vs AWS Secret Manager  (0) 2026.01.02
'Network' 카테고리의 다른 글
  • EKS에서 ArgoCD로 GitOps 구축하기: 순환 의존성 해결부터 Single Sync까지
  • 실전 Kubernetes 보안: 4C 모델을 프로덕션 클러스터에 적용하며 배운 것들
  • GitHub Actions Docker CI 파이프라인 구조 이해하기: 멀티 아키텍처 빌드부터 캐시 전략
  • SealSecret vs AWS Secret Manager
Ry-
Ry-
  • Ry-
    developer_Ryu
    Ry-
  • 전체
    오늘
    어제
    • 분류 전체보기 (97)
      • AI (14)
      • DB (3)
      • Book (6)
      • Development Environment (2)
        • Mac (2)
      • Frontend (8)
        • Flutter (6)
        • React (1)
        • React-Native (1)
      • Backend (19)
        • Spring (14)
        • Java (1)
        • Node.js (4)
      • Computer Science (27)
        • PS (20)
        • CS (7)
      • Network (12)
      • 이것저것 (3)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      spring
      구글 로그인
      chatgpt api
      mysql
      몽고디비
      Baekjoon
      스프링
      BOGGLE
      오블완
      티스토리챌린지
      java
      종만북
      백준
      Kakao
      mongodb
      최대 힙
      database
      flutter
      redis
      node.js
      aop
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.6
    Ry-
    Prometheus 디스코드 웹훅
    상단으로

    티스토리툴바