티스토리 뷰

반응형

웹 개발 실무 기술 A to Z

웹 애플리케이션이 배포된 후에는 성능을 모니터링하고, 오류를 추적하는 시스템이 필요합니다.
✔️ 서버 상태와 리소스 사용량을 실시간으로 모니터링
✔️ 애플리케이션 로그를 수집 및 분석하여 오류 탐지
✔️ 트래픽 증가에 따른 부하 감지 및 최적화

이번 글에서는 Prometheus, ELK Stack, Grafana를 활용하여 웹 애플리케이션의 성능을 모니터링하고 로깅하는 방법을 소개하겠습니다.


1. 웹 애플리케이션 모니터링이 필요한 이유

✔️ 서버 장애 감지 → CPU 사용률, 메모리 소비량, 응답 속도 실시간 확인
✔️ 로그 기반 오류 분석 → HTTP 에러 코드, 사용자 요청 데이터 수집
✔️ 트래픽 급증 감지 → 부하 발생 시 자동 확장 또는 대응 가능

모니터링 시스템을 구축하면 장애 발생 시 빠르게 대응 가능!


2. Prometheus – 실시간 성능 모니터링

2-1. Prometheus란?

✔️ 오픈소스 모니터링 시스템으로 서버 및 애플리케이션 성능 데이터 수집
✔️ 시계열 데이터 저장 → CPU 사용량, API 응답 속도, 요청 수 등 기록
✔️ Grafana와 연동하여 시각화 가능


2-2. Prometheus 설치 및 실행

(1) Prometheus Docker 컨테이너 실행

docker run -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

(2) Prometheus 설정 파일 (prometheus.yml)

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]

Prometheus를 실행하면 http://localhost:9090에서 메트릭 데이터 확인 가능!


3. Grafana – 데이터 시각화 및 알림 시스템

3-1. Grafana란?

✔️ Prometheus와 연동하여 모니터링 데이터를 대시보드로 시각화
✔️ 서버 상태, 트래픽, 응답 속도 등을 실시간 모니터링
✔️ 임계값을 설정하여 자동 알림 (Slack, 이메일 연동 가능)


3-2. Grafana 설치 및 실행

(1) Docker로 Grafana 실행

docker run -p 3000:3000 grafana/grafana

(2) Prometheus 데이터 소스 추가

  1. http://localhost:3000 접속
  2. Data Sources → Prometheus 추가
  3. URL: http://localhost:9090 입력 후 저장

Grafana를 활용하면 서버 상태를 한눈에 확인 가능!


4. ELK Stack – 로그 수집 및 분석

4-1. ELK Stack 개요

ELK Stack은 로그 데이터를 수집하고 분석하는 오픈소스 시스템입니다.
✔️ Elasticsearch (E) → 로그 데이터를 저장하고 검색 가능
✔️ Logstash (L) → 애플리케이션 로그 데이터를 수집 및 변환
✔️ Kibana (K) → Elasticsearch 데이터를 시각화하는 대시보드 제공


4-2. ELK Stack 설치 및 실행

(1) Docker Compose를 활용한 ELK 실행

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"

  logstash:
    image: docker.elastic.co/logstash/logstash:7.10.2
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    ports:
      - "5044:5044"

  kibana:
    image: docker.elastic.co/kibana/kibana:7.10.2
    ports:
      - "5601:5601"

(2) Logstash 설정 파일 (logstash.conf)

input {
  file {
    path => "/var/log/app.log"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}

(3) Kibana 접속

http://localhost:5601에서 로그 데이터 시각화 가능

ELK Stack을 활용하면 애플리케이션 로그를 실시간으로 분석 가능!


5. 웹 애플리케이션 모니터링 및 로깅 적용 예제

5-1. Express 애플리케이션에 로깅 추가

(1) winston 로깅 라이브러리 설치

npm install winston

(2) 로거 설정 (logger.js)

const winston = require("winston");

const logger = winston.createLogger({
  level: "info",
  format: winston.format.json(),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: "app.log" })
  ],
});

module.exports = logger;

(3) API 요청 로그 기록

const express = require("express");
const logger = require("./logger");

const app = express();

app.use((req, res, next) => {
  logger.info(`${req.method} ${req.url}`);
  next();
});

app.get("/", (req, res) => {
  res.send("Hello, World!");
});

app.listen(3000, () => console.log("Server running on port 3000"));

API 요청 로그를 app.log 파일에 저장하여 분석 가능!


6. 마무리 및 다음 글 예고

이번 글에서는 Prometheus, ELK Stack, Grafana를 활용한 웹 애플리케이션 모니터링 및 로깅 시스템 구축을 살펴봤습니다.
다음 글에서는 **클라우드 기반 데이터 저장 및 관리 (AWS RDS, DynamoDB, Firebase Firestore)**을 소개하겠습니다.

다음 글 예고: "클라우드 데이터 저장 및 관리 – AWS RDS, DynamoDB, Firebase Firestore 활용" 🚀

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형