본문 바로가기

Server Story....

리눅스 모니터링 심화: Prometheus & Grafana 컨테이너 구축

반응형

1. 도입 및 배경

  • 서버 운영의 기본은 안정성이며, 특히 CPU, Memory, Disk 등의 리소스 사용량을 실시간으로 모니터링하는 것이 중요함.
  • Prometheus는 시계열 데이터베이스로 메트릭을 수집하고 저장하며, Grafana는 이를 멋진 대시보드로 시각화하는 강력한 모니터링 도구임.

2. Prometheus & Grafana 작동 구조도 (인포그래픽)


Prometheus & Grafana 작동 구조도


3. 실전 구축 로그 (Implementation Log)

이전에 정리한 [Docker 필수 명령어 및 컨테이너 관리] 포스팅을 참고하여 컨테이너를 운용함.

**■ Step 1: Nginx 컨테이너 사전 준비 (HTTP 80) ** 최초 인증서 발급을 위해서는 Let's Encrypt 서버가 내 Nginx 서버의 80포트에 접속할 수 있어야 함.

YAML
 
# Prometheus & Grafana 컨테이너 예시 (또는 docker run)
version: '3.8'

services:
  # 1. 웹 서버 (Nginx)
  proxy:
    image: nginx:latest
    container_name: nginx_service
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./certbot/conf:/etc/letsencrypt
    restart: always

  # 2. 자동화 에이전트 (Python)
  blogger-agent:
    build: ./agent_code
    container_name: blogger_bot
    env_file: .env  # API 키 등 보안 데이터 격리
    depends_on:
      - proxy
    restart: on-failure

■ Step 2: Certbot 컨테이너 활용 인증서 발급 위 인포그래픽 속 'Left Zone'의 docker run certbot/certbot ... 명령어 부분.

Bash
 
docker run -it --rm \
  -v ./certbot/conf:/etc/letsencrypt \
  -v ./certbot/www:/var/www/certbot \
  certbot/certbot certonly --webroot -w /var/www/certbot -d suminstory.net

[메모] suminstory.net은 사용자님의 도메인으로 대체해서 사용할 것. 이 과정에서 Let's Encrypt 서버가 내 80포트에 ACME Challenge를 수행함.

■ Step 3: Nginx SSL 설정 및 HTTPS 리다이렉트 인포그래픽 속 'Center' 및 'Right Zone' (HTTP --> HTTPS REDIRECT) 부분.

Bash
 
# nginx.conf 수정
server {
    listen 80;
    server_name suminstory.net;
    return 301 https://$host$request_uri; # HTTP를 HTTPS로 리다이렉트
}

server {
    listen 443 ssl; # 보안 포트
    server_name suminstory.net;

    ssl_certificate /etc/letsencrypt/live/suminstory.net/fullchain.pem; # 인증서
    ssl_certificate_key /etc/letsencrypt/live/suminstory.net/privkey.pem; # 키
}

4. 자동 갱신 (Renewal)

Let's Encrypt 인증서는 만료 기간이 90일이므로 자동으로 갱신해 줘야 함. 인포그래픽 속 'Bottom' (CRONTAB RENEWAL) 부분.

Bash
 
# 리눅스 Crontab에 등록 (매월 1일 새벽 2시)
0 2 1 * * docker run -it --rm -v ./certbot/conf:/etc/letsencrypt -v ./certbot/www:/var/www/certbot certbot/certbot renew && docker restart nginx_proxy

5. 트러블슈팅 및 메모 (Troubleshooting)

Q1. certbot 발급 중 "Connection refused" 에러

  • 원인: Let's Encrypt 서버가 내 Nginx의 80포트에 접속 못 함.
  • 해결: 방화벽(UFW)에서 80포트가 열려 있는지 확인하고, **[SSH 포트 변경 기록]**에서 다뤘던 netstat -plnt로 80포트 리스닝 상태를 체크할 것.

Q2. 브라우저에서 "안전하지 않은 사이트" 경고

  • 인증서 파일 경로나 파일 자체에 문제가 있는 것임. 인포그래픽 속 shield 아이콘이 깨진 상태. docker restart nginx_proxy로 재시작 후 docker logs로 Nginx 에러를 확인할 것.

6. 관련 기록 (Cross-References)

  • [Ubuntu Server - Docker 필수 명령어 및 컨테이너 관리]: Docker 명령어 복습용.
  • [Windows Server 2022 MSSQL Express 설치]: 나중에 이 MSSQL 포트(1433)도 Nginx 리버스 프록시 뒤에 숨길 때 참고.
반응형