Skip to content

모니터링과 로깅 원리 ​

💡 학습 가이드: 이 장은 프로그래밍 기초가 필요하지 않으며, 인터랙티브 데모를 통해 운영의 완전한 지식 체계를 이해합니다. 모니터링 알림부터 장애 조사, 용량 계획부터 자동화 운영까지 온라인 시스템 운영 기술을 포괄적으로 습득합니다.

0. 서론: 시스템 온라인은 시작일 뿐 ​

많은 초보자가 "코드를 배포하여 온라인하면 작업이 끝났다"고 생각합니다.

큰 오해입니다!

시스템 온라인은 운영 작업의 시작점일 뿐입니다. 새 차를 산 것과 같아서, 이후의 정비, 수리, 주유이 일상입니다.

운영의 목표는 세 가지입니다:

  1. 안정성 (Stability): 시스템이 다운되지 않고 서비스가 항상 이용 가능
  2. 성능 (Performance): 빠른 응답, 좋은 사용자 경험
  3. 보안 (Security): 데이터 유출 없고 공격 방지

1. 모니터링 체계 (Monitoring) ​

모니터링은 운영의 "눈"입니다. 모니터링이 없는 시스템은 시각장애인이 운전하는 것과 같아, 문제가 발생해도 모릅니다.

1.1 모니터링의 세 가지 계층 ​

实时监控面板 (Monitoring Dashboard)
运维的"眼睛" - 让系统状态一目了然
CPU 使用率45%
正常
内存使用率62%
正常
磁盘使用率78%
警告
网络带宽34%
正常
磁盘 I/O55%
正常
负载均衡42%
正常
正常 (Normal)
警告 (Warning)
严重 (Critical)

인프라 모니터링: 서버 하드웨어 리소스에 집중

  • CPU 사용률
  • 메모리 사용률
  • 디스크 공간과 I/O
  • 네트워크 대역폭

애플리케이션 모니터링: 소프트웨어 실행 상태에 집중

  • QPS(초당 요청 수)
  • 응답 시간(지연)
  • 에러율
  • 의존 서비스 호출 상황

비즈니스 모니터링: 비즈니스 건전성에 집중

  • DAU/MAU(일간/월간 활성 사용자)
  • 주문량
  • 결제 성공률
  • 사용자 유지율

1.2 모니터링 도구 스택 ​

도구용도특징
Prometheus메트릭 수집 및 저장시계열 데이터베이스, 모니터링 데이터에 적합
Grafana시각화 대시보드강력한 차트와 대시보드
Zabbix종합 모니터링전통적 도구, 기능 포괄적
DatadogSaaS 모니터링 플랫폼올인원 솔루션, 유료

2. 알림 시스템 (Alerting) ​

모니터링이 문제를 발견한 후, 운영 담당자에게 제때 알려야 하며, 이것이 바로 알림입니다.

2.1 알림 흐름 ​

告警流程 (Alerting Flow)
从发现异常到通知运维的自动化流程
1
监控采集
Prometheus 每隔 15s 采集一次指标
→
2
规则评估
Alertmanager 评估是否满足告警条件
→
3
告警分组
相似告警合并,避免轰炸
→
4
静默判断
检查是否在静默时间(如维护窗口)
→
5
路由分发
根据标签分发到不同接收器
→
6
发送通知
通过钉钉/邮件/短信通知值班人员
告警级别说明
P0最高优先级,立即处理(如核心服务宕机)
P1高优先级,30分钟内处理(如部分功能异常)
P2中优先级,当天处理(如性能下降)
P3低优先级,本周处理(如资源使用率偏高)

2.2 알림 레벨 설계 ​

합리적인 알림 등급 분류는 "알림 피로"를 방지할 수 있습니다:

레벨응답 시간대표적 시나리오알림 채널
P0즉시(5분 내)핵심 서비스 다운, 결제 실패전화 + SMS + Slack
P130분 내일부 기능 비정상, 성능 심각 저하SMS + Slack + 이메일
P2당일 처리리소스 사용률 높음, 간헐적 에러Slack + 이메일
P3이번 주 내 처리비핵심 문제, 최적화 제안이메일

2.3 알림 통합과 노이즈 감소 ​

문제점: 작은 문제 하나가 수백~수천 개의 알림을 유발하여 당직자가 둔감해질 수 있습니다.

해결책:

  1. 알림 그룹화: 유사한 알림을 병합(예: 같은 서버의 여러 문제를 하나로 병합)
  2. 알림 억제: 부모 문제가 이미 트리거되면, 자식 문제는 반복 알림하지 않음
  3. 사일런스 규칙: 유지보수 기간 동안 알림 자동 일시 정지
  4. 빈도 제한: 같은 알림이 짧은 시간 내에 반복 통지하지 않음

3. 로그 관리 (Logging) ​

로그는 문제 조사의 "블랙박스"입니다.

3.1 로그 레벨 분류 ​

javascript
console.debug('상세 디버그 정보') // 개발 시 사용
console.info('일반 정보') // 정상 흐름 기록
console.warn('경고 정보') // 잠재적 문제
console.error('에러 정보') // 주의가 필요한 에러

3.2 구조화된 로그 ​

전통적 로그(좋지 않음):

2024-01-15 10:23:45 ERROR User john failed to login, attempts=3, ip=192.168.1.100

구조화된 로그(권장):

json
{
  "timestamp": "2024-01-15T10:23:45Z",
  "level": "ERROR",
  "message": "User login failed",
  "user": "john",
  "attempts": 3,
  "ip": "192.168.1.100",
  "service": "auth-service"
}

3.3 ELK 로그 스택 ​

ELK = Elasticsearch + Logstash + Kibana

  • Logstash: 로그 수집 및 필터링
  • Elasticsearch: 로그 저장 및 검색
  • Kibana: 로그 시각화 조회

모범 사례:

  • 민감 정보(비밀번호, 토큰)는 로그에 기록하지 않기
  • 핵심 작업(로그인, 결제, 권한 변경)은 반드시 기록
  • 로그에 컨텍스트 포함(사용자 ID, 요청 ID, 타임스탬프)
  • 만료된 로그를 정기적으로 정리하여 디스크 가득 참 방지

4. 분산 추적 (Tracing) ​

마이크로서비스 아키텍처에서 하나의 요청이 10개 이상의 서비스를 거칠 수 있으며, 전체 경로를 어떻게 추적할까요?

Trace ID와 Span ID

  • Trace ID: 전체 요청 체인의 유일한 식별자(택배 번호와 같음)
  • Span ID: 개별 서비스 호출의 식별자(각 중계소와 같음)

4.1 분산 추적 데모 ​

分布式链路追踪 (Distributed Tracing)
一个请求在微服务间流转的完整路径
Trace ID:a1b2c3d4-e5f6-7890-abcd-ef1234567890
总耗时:450ms
调用服务数:6
0ms
45ms
90ms
135ms
180ms
225ms
270ms
315ms
360ms
405ms
450ms
API Gateway
POST /api/order/create
450ms
⚠
User Service
验证用户身份
45ms
✓
Product Service
查询商品信息
85ms
✓
Inventory Service
扣减库存
120ms
✓
Payment Service
创建支付订单
95ms
✓
Order Service
保存订单记录
25ms
✓
正常 (≤200ms)
慢调用 (>200ms)
错误
💡 观察要点
  • 点击"性能瓶颈"查看数据库查询慢导致的延迟
  • 点击"错误追踪"查看库存服务异常如何影响整个链路
  • 每个 Span 都有唯一的 Span ID,通过 Trace ID 关联
  • 时间条越长,表示该服务耗时越长

4.2 OpenTelemetry 표준 ​

OpenTelemetry(OTel)는 분산 추적의 업계 표준으로, 통일된 API와 SDK를 제공합니다.


5. 장애 조사 프로세스 ​

온라인 장애는 피할 수 없으며, 핵심은 빠른 대응, 빠른 복구입니다.

5.1 장애 처리 프로세스 ​

故障响应流程 (Incident Response)
专业团队如何处理线上故障
1
故障发现
T+0 分钟
监控系统自动发现异常指标
关键动作:
  • 监控检测到订单服务错误率从 0.1% 飙升到 8.5%
  • Alertmanager 立即触发 P1 告警
  • 值班人员收到钉钉和短信通知
常用工具:
PrometheusGrafanaAlertmanager
2
快速响应
T+3 分钟
值班人员确认故障并启动应急流程
3
故障定位
T+8 分钟
通过日志和追踪系统分析根因
4
故障修复
T+18 分钟
实施临时解决方案恢复服务
5
恢复验证
T+21 分钟
确认服务完全恢复正常
6
故障复盘
T+48 小时
总结经验教训,制定改进计划
🎯 故障处理最佳实践
⚡
快速响应
建立 15 分钟响应机制,P0 故障立即电话通知
📢
信息同步
定期向用户和内部同步故障进展,避免猜测
🔍
保留现场
故障现场数据(日志、监控)完整留存,便于分析
📝
blameless 文化
复盘对事不对人,聚焦流程改进而非个人责任

5.2 일반적인 조사 도구 ​

도구용도대표적 시나리오
tcpdump패킷 캡처 분석네트워크 연결 불가, 패킷 유실
strace시스템 호출 추적프로세스 멈춤, 파일 권한 문제
ArthasJava 진단CPU 급증, 메모리 누수, 데드락
top/htop시스템 리소스 모니터링CPU/메모리 점유율 높음
netstat네트워크 연결 보기포트 점유, 연결 수 비정상
lsof열린 파일 보기파일이 점유됨, 디스크 가득 참

5.3 장애 포스트모템 (Post-mortem) ​

포스트모템은 책임 추궁 회의가 아닙니다!

포스트모템의 목적:

  1. 장애 타임라인 정리
  2. 근본 원인 분석(Root Cause Analysis)
  3. 교훈 정리
  4. 개선 조치 수립

5 왜(5 Whys) 분석법:

"왜"를 적어도 5번 물어서 근본 원인을 찾습니다:

  • 왜 서비스가 다운되었는가?
    • 메모리 오버플로우 때문에
  • 왜 메모리 오버플로우가 발생했는가?
    • 캐시 데이터가 너무 많아서
  • 왜 캐시 데이터가 너무 많은가?
    • 만료 시간을 설정하지 않아서
  • 왜 만료 시간을 설정하지 않았는가?
    • 개발 시 누락되어서
  • 근본 원인: 코드 리뷰와 테스트 케이스 부족

핵심 포인트: 비난 없는(blameless) 문화를 구축하고, 개인의 책임이 아닌 프로세스 개선에 집중.


6. 성능 최적화 ​

6.1 성능 병목 분석 ​

위에서 아래로의 최적화 사고:

사용자 체감
  ↓
프론트엔드 최적화(요청 감소, CDN, 지연 로딩)
  ↓
네트워크 최적화(HTTP/2, 압축, 긴 연결)
  ↓
백엔드 최적화(캐싱, 비동기, 배치 처리)
  ↓
데이터베이스 최적화(인덱스, 쿼리 최적화, 샤딩)
  ↓
시스템 최적화(커널 매개변수, JVM 튜닝)

6.2 캐시 최적화 ​

다계층 캐시 아키텍처:

브라우저 캐시 (CDN)
  ↓
로컬 캐시 (메모리/Guava)
  ↓
분산 캐시 (Redis/Memcached)
  ↓
데이터베이스 (MySQL/PostgreSQL)

7. 용량 계획 ​

7.1 용량 평가 ​

容量规划计算器 (Capacity Planning)
估算系统需要多少台服务器才能满足需求
📊 业务指标
人
次
%
次/秒
倍
💡 通常高峰期流量是平均流量的 2-3 倍,建议预留 50-100% 冗余应对突发流量
📈 容量评估结果
日均总请求量
5,000,000 次/天
高峰期 QPS (目标)
75 次/秒
理论所需服务器
1 台
推荐配置 (含冗余)
2 台
💰 月成本估算 (云服务器)
阿里云 (4核8G)
¥600/月
腾讯云 (4核8G)
¥560/月
AWS (t3.xlarge)
¥1,000/月
🎯 容量规划要点
1️⃣
以峰值为核心
不能按平均流量规划,必须按高峰期流量(通常是平均的 2-3 倍)来准备
2️⃣
预留冗余空间
至少预留 50% 冗余,用于应对突发流量、服务器故障、维护窗口
3️⃣
定期压测验证
每季度进行压力测试,验证实际容量是否满足预估
4️⃣
弹性扩缩容
结合云服务的自动扩缩容,在高峰期自动增加实例
📐 计算公式
日均请求量:DAU × 人均请求次数
平均 QPS:日均请求量 ÷ 86400 秒
高峰 QPS:平均 QPS × 高峰系数 (2-3 倍)
所需服务器:高峰 QPS × 冗余系数 ÷ 单机 QPS

7.2 부하 테스트 ​

도구특징적용 시나리오
JMeter기능이 강력하고 시각적HTTP 인터페이스 부하 테스트
wrk/ab경량, 명령줄빠른 벤치마크
LocustPython 스크립트, 분산복잡한 시나리오 부하 테스트
K6최신, JS 스크립트CI/CD 통합

7.3 탄력적 자동 스케일링 ​

클라우드 네이티브 시대의 자동 스케일링:

yaml
# Kubernetes HPA (Horizontal Pod Autoscaler)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

CPU 사용률이 70%를 초과하면 자동으로 Pod를 확장(최대 10개)


8. 보안 운영 ​

8.1 접근 제어 ​

최소 권한 원칙:

  • 개발자는 개발 환경에만 접근 가능
  • 운영 담당자는 프로덕션 환경에만 접근 가능하며, 승인 필요
  • 데이터베이스 민감 작업은 이중 확인 필요

점프 서버 (Bastion Host):

모든 운영 작업은 점프 서버를 거치며, 완전한 작업 로그를 기록.

8.2 데이터 백업 ​

3-2-1 백업 원칙:

  • 3개의 데이터 복사본(원본 1개 + 백업 2개)
  • 2가지 다른 저장 매체(로컬 디스크 + 클라우드 스토리지)
  • 1개의 오프사이트 백업(단일 재해 방지)

백업 전략:

유형빈도보유 기간RTORPO
전체 백업매주1개월4시간24시간
증분 백업매일1주일2시간1시간
실시간 백업초 단위7일분 단위초 단위

9. 자동화 운영 (DevOps) ​

9.1 CI/CD 파이프라인 ​

yaml
# .gitlab-ci.yml 예시
stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm install
    - npm test
  tags:
    - docker

build:
  stage: build
  script:
    - docker build -t myapp:$CI_COMMIT_SHA .
    - docker push registry.example.com/myapp:$CI_COMMIT_SHA
  only:
    - main

deploy:
  stage: deploy
  script:
    - kubectl set image deployment/myapp myapp=registry.example.com/myapp:$CI_COMMIT_SHA
  environment:
    name: production
  when: manual # 수동으로 배포 트리거

9.2 Infrastructure as Code (IaC) ​

Terraform 예시(클라우드 리소스 관리):

hcl
# main.tf
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "WebServer"
    Env  = "production"
  }
}

resource "aws_security_group" "web" {
  name = "web-sg"

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

9.3 GitOps 실천 ​

GitOps = Git + IaC + Automation

핵심 이념: Git 저장소가 인프라의 유일한 진실 공급원


10. 요약과 모범 사례 ​

10.1 운영 성숙도 모델 ​

등급특징실천
초급수동 대응, 인적 조작문제가 생기면 처리, 수동 배포
중급자동화, 표준화CI/CD, 모니터링 알림, 문서화
고급예방 위주, 자가 복구용량 계획, 장애 훈련, 자동 스케일링
전문가지능화, 무인 운영AIOps, 카오스 엔지니어링, Serverless

10.2 학습 로드맵 ​

입문 단계 (1~3개월):

  • Linux 일반 명령어 학습
  • 모니터링 시스템 이해(Prometheus + Grafana)
  • 로그 조회 숙지(ELK)

심화 단계 (3~6개월):

  • 컨테이너 기술 심층 이해(Docker + K8s)
  • 진단 도구 하나 마스터(Arthas, tcpdump)
  • CI/CD 파이프라인 실천

고급 단계 (6~12개월):

  • 성능 튜닝(데이터베이스, JVM, 네트워크)
  • 용량 계획과 비용 최적화
  • 장애 포스트모템과 프로세스 개선

전문가 단계 (1년 이상):

  • 아키텍처 설계(고가용성, 재해 복구)
  • 카오스 엔지니어링(적극적인 장애 주입)
  • AIOps(지능형 운영)

11. 용어 빠른 참조표 (Glossary) ​

용어약칭설명
Monitoring-모니터링, 시스템 실행 상태를 실시간으로 관측.
Alerting-알림, 비정상 시 관련 담당자에게 통지.
Logging-로깅, 시스템 실행 중 이벤트를 기록.
Tracing-분산 추적, 분산 시스템에서 요청의 전체 경로를 추적.
QPSQueries Per Second초당 요청 수, 시스템 처리량 측정.
Latency-지연, 요청이 발생하여 응답까지의 시간.
RTORecovery Time Objective복구 시간 목표, 서비스가 최대 중단 가능 시간.
RPORecovery Point Objective복구 지점 목표, 최대 손실 가능한 데이터 양.
Post-mortem-장애 포스트모템, 장애 원인과 개선 조치 분석.
CI/CDContinuous Integration/Delivery지속적 통합과 지속적 전달, 자동화 테스트와 배포.
IaCInfrastructure as CodeInfrastructure as Code, 코드로 서버, 네트워크 등 리소스를 관리.
GitOps-Git 운영, Git 저장소가 인프라의 유일한 진실 공급원.
ELKElasticsearch + Logstash + Kibana로그 수집, 저장, 시각화 3종 세트.
SLAService Level Agreement서비스 수준 협약, 약속된 서비스 가용성(예: 99.9%).
Blameless-비난 없는 문화, 포스트모템에서 개인 책임이 아닌 프로세스 개선에 집중.

12. 더 읽어보기 ​