Files
sam-docs/deploys/ops-manual/02-daily-operations.md
권혁성 a68a9ba098 docs:MNG 500 에러 진단 결과 반영 — php8.4-soap 설치, 로그 경로/권한 문서화
- 11-server-setup: PHP 확장 목록에 php8.4-soap 추가
- 02-daily-operations: MNG 로그 경로 수정 (shared → current, 심링크 아님)
- 03-service-prod: Redis 용도 정확하게 테이블로 정리 (캐시=redis, 세션=database)
- 05-deployment: MNG 배포 시 storage/logs 권한 경고 추가, 배포 후 확인에 MNG 로그 추가
- 08-troubleshooting: MNG 500 에러 트러블슈팅 사례 추가 (2026-02-25 실제 사례)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 10:48:23 +09:00

4.6 KiB

2. 일상 운영

목차로 돌아가기


[운영] 전체 서비스 상태 확인

# 핵심 서비스 상태 한번에 확인
sudo systemctl status nginx php8.4-fpm mysql redis-server supervisor node_exporter

# PM2 프로세스 상태
pm2 status

# 열린 포트 확인
sudo ss -tlnp

[CI/CD] 전체 서비스 상태 확인

# 모든 핵심 서비스 상태 한 번에 확인
sudo systemctl status nginx jenkins gitea mysql prometheus grafana-server node_exporter

# 개별 서비스 상태
sudo systemctl status jenkins
sudo systemctl status gitea

시스템 리소스 모니터링

양쪽 서버 공통 명령어:

# 메모리 사용량
free -h

# 디스크 사용량
df -h

# CPU 및 프로세스 (실시간)
htop

# 로드 평균 (즉시 확인)
uptime

# 스왑 사용량
swapon --show

# 열린 포트 확인
sudo ss -tlnp

# 프로세스별 메모리 사용량 (상위 10개)
ps aux --sort=-%mem | head -11

[CI/CD] 디스크 사용량 상세:

sudo du -sh /var/lib/jenkins /var/lib/gitea /var/lib/prometheus /var/lib/mysql /var/log 2>/dev/null

로그 확인

[운영] Nginx

# 접근 로그 (실시간)
sudo tail -f /var/log/nginx/api.sam.it.kr.access.log
sudo tail -f /var/log/nginx/sam.it.kr.access.log
sudo tail -f /var/log/nginx/mng.codebridge-x.com.access.log

# 에러 로그 (실시간)
sudo tail -f /var/log/nginx/api.sam.it.kr.error.log
sudo tail -f /var/log/nginx/sam.it.kr.error.log

# 최근 에러 50줄
sudo tail -50 /var/log/nginx/api.sam.it.kr.error.log

[운영] PHP-FPM

sudo tail -f /var/log/php8.4-fpm.log

[운영] Laravel

# API 로그
sudo tail -f /home/webservice/api/shared/storage/logs/laravel.log

# Admin(MNG) 로그 — storage/logs가 shared 심링크가 아니므로 current 경로 사용
sudo tail -f /home/webservice/mng/current/storage/logs/laravel.log

# API Stage 로그
sudo tail -f /home/webservice/api-stage/shared/storage/logs/laravel.log

# Queue Worker 로그
sudo tail -f /home/webservice/api/shared/storage/logs/queue-worker.log

[운영] PM2 (Next.js)

# 운영 로그
pm2 logs sam-front --lines 50

# Stage 로그
pm2 logs sam-front-stage --lines 50

# 에러 로그만
pm2 logs sam-front --err --lines 50

[운영] Supervisor

sudo supervisorctl status
sudo tail -f /home/webservice/api/shared/storage/logs/queue-worker.log

[운영] MySQL

sudo tail -f /var/log/mysql/slow.log
sudo tail -f /var/log/mysql/error.log

[CI/CD] Jenkins

sudo journalctl -u jenkins -f
sudo journalctl -u jenkins --since "1 hour ago"

[CI/CD] Gitea

sudo journalctl -u gitea -f
sudo tail -f /var/lib/gitea/log/gitea.log

[CI/CD] Prometheus / Grafana

sudo journalctl -u prometheus -f
sudo journalctl -u grafana-server -f

[CI/CD] Nginx / MySQL

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/mysql/error.log

시스템 로그 (공통)

# 시스템 전체 로그 (최근)
sudo journalctl -xe --no-pager | tail -50

# 특정 서비스 로그
sudo journalctl -u 서비스명 --since "1 hour ago"

SSL 인증서 확인 (공통)

# 전체 인증서 목록 및 만료일
sudo certbot certificates

# 자동 갱신 타이머 상태
sudo systemctl status certbot.timer

# 갱신 테스트 (실제 갱신하지 않음)
sudo certbot renew --dry-run

[CI/CD] 네트워크 연결 확인

# 운영서버 연결
ping -c 3 211.117.60.189
ssh sam-prod "echo 'prod OK'"

# 개발서버 연결
ping -c 3 114.203.209.83
ssh sam-dev "echo 'dev OK'"

# 웹 서비스 응답 확인
curl -sI https://ci.sam.it.kr | head -5
curl -sI https://git.sam.it.kr | head -5
curl -sI https://monitor.sam.it.kr | head -5

일일 점검 스크립트

[운영]

echo "=== 서비스 ===" && \
for s in nginx php8.4-fpm mysql redis-server supervisor node_exporter; do
  printf "%-20s %s\n" "$s" "$(systemctl is-active $s)"
done && \
echo "=== PM2 ===" && pm2 status && \
echo "=== 메모리 ===" && free -h | grep Mem && \
echo "=== 디스크 ===" && df -h / | tail -1 && \
echo "=== SSL ===" && sudo certbot certificates 2>/dev/null | grep "Expiry Date"

[CI/CD]

echo "=== 서비스 ===" && \
for s in nginx jenkins gitea mysql prometheus grafana-server node_exporter; do
  printf "%-20s %s\n" "$s" "$(systemctl is-active $s)"
done && \
echo "=== 메모리 ===" && free -h | grep Mem && \
echo "=== 디스크 ===" && df -h / | tail -1 && \
echo "=== SSL ===" && sudo certbot certificates 2>/dev/null | grep "Expiry Date"