티스토리 뷰
웹 개발 실무 기술 A to Z # 9 - 웹 애플리케이션 모니터링 및 로깅: Prometheus, ELK Stack, Grafana 활용
octo54 2025. 2. 24. 17:52웹 개발 실무 기술 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 데이터 소스 추가
- http://localhost:3000 접속
- Data Sources → Prometheus 추가
- 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 활용" 🚀
'project > 웹 개발 실무 기술 A to Z' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 관리자
- Next.js
- Ktor
- kotlin
- Webpack
- AI 자동화
- nextJS
- SEO최적화
- NestJS
- Docker
- CI/CD
- rag
- seo 최적화 10개
- REACT
- SEO 최적화
- gatsbyjs
- PostgreSQL
- AI챗봇
- llm
- App Router
- 프론트엔드
- nodejs
- Prisma
- 웹개발
- 개발블로그
- LangChain
- 백엔드개발
- 스마트 컨트랙트
- fastapi
- github
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |