Bash 스크립트, Systemd, Logrotate로 파일 디스크립터 모니터링 자동화하기

1–2분

리눅스 서버 환경에서 시스템 자원을 효과적으로 관리하는 것은 안정적이고 효율적인 운영을 위해 매우 중요합니다. 그중 파일 디스크립터(file descriptor) 사용량을 모니터링하면 시스템의 성능 병목현상이나 한계점을 진단하는 데 큰 도움이 됩니다. 이번 가이드에서는 Bash 스크립트, Systemd 서비스, Logrotate를 사용해 파 디스크립터 사용량을 자동으로 로깅하는 시스템을 구축하는 방법을 알아보겠습니다.


사전 준비

이 설정을 진행하기 전에 다음 사항을 확인하세요.

  1. root 권한이나 sudo 권한이 있어야 합니다.
  2. Bash 스크립트와 리눅스 서비스(Systemd)에 대한 기본 지식이 필요합니다.

파일 디스크립터 로깅 자동화: 단계별 가이드

1. 로그 디렉토리 및 스크립트 정의

먼저 로그 파일을 저장할 디렉토리를 생성하고, 파일 디스크립터 사용량을 캡처할 스크립트를 작성합니다.

아래는 스크립트의 구조입니다.

#!/bin/bash

# 변수 설정
LOG_DIR="/var/log/file-nr"
LOG_FILE="$LOG_DIR/file-nr.log"

# 로그 디렉토리 생성
if [ ! -d "$LOG_DIR" ]; then
    mkdir -p "$LOG_DIR"
fi

# 무한 루프를 통해 파일 디스크립터 사용량 로깅
while true; do
    echo "$(date '+%Y-%m-%d %H:%M:%S') $(cat /proc/sys/fs/file-nr)" >> "$LOG_FILE"
    sleep 5
done


이 스크립트는 리눅스 커널 파일 /proc/sys/fs/file-nr에 저장된 파일 디스크립터 정보를 5초 간격으로 로그 파일에 기록합니다.

2. 로깅 스크립트 생성

스크립트를 /usr/local/bin에 저장해 실행 가능하도록 설정합니다.

  • 아래 명령어를 실행해 스크립트를 작성하세요.
nano /usr/local/bin/file-nr-logger.sh

  • 위 스크립트를 파일에 붙여넣습니다. 저장 후 종료합니다.
  • 스크립트에 실행 권한을 부여합니다.
chmod +x /usr/local/bin/file-nr-logger.sh


3. Systemd 서비스 설정

Systemd를 사용하면 스크립트를 백그라운드에서 실행하고 자동으로 재시작할 수 있습니다. 다음과 같은 Systemd 서비스 파일을 생성합니다.

  • 아래 명령어를 실행합니다.
nano /etc/systemd/system/file-nr-logger.service

  • 아래 내용을 추가합니다.
[Unit]
Description=File Descriptor Logger Service
After=network.target

[Service]
ExecStart=/usr/local/bin/file-nr-logger.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

  • Systemd 매니저를 리로드하고 서비스를 활성화 및 시작합니다.
systemctl daemon-reload
systemctl enable file-nr-logger.service
systemctl start file-nr-logger.servic


4. Logrotate 설정

로그 파일 크기가 무한히 커지는 것을 방지하려면 Logrotate를 사용해 로그를 정리합니다.

  • 아래 명령어로 Logrotate 설정 파일을 생성합니다.
nano /etc/logrotate.d/file-nr

  • 다음 내용을 추가합니다.
/var/log/file-nr/file-nr.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0644 root root
    postrotate
        systemctl restart file-nr-logger.service
    endscript
}

  • Logrotate 설정을 테스트합니다.
logrotate -f /etc/logrotate.d/file-nr


구현 요약

이제 다음 작업이 자동화되었습니다:

  1. Bash 스크립트: 5초마다 파일 디스크립터 사용량을 로그에 기록.
  2. Systemd 서비스: 스크립트의 백그라운드 실행 및 충돌 시 자동 재시작.
  3. Logrotate 설정: 로그 파일의 크기 관리 및 7일 보관 후 압축 저장.

결론

이번 설정을 통해 파일 디스크립터 사용량을 효율적으로 모니터링하고 로그 데이터를 체계적으로 관리할 수 있는 시스템을 구축했습니다. 이 방법은 가벼우면서도 확장성이 뛰어나며, 시스템 성능 모니터링 외에도 다양한 활용이 가능합니다.

추가적인 자동화 설정이나 리눅스 관리와 관련된 도움이 필요하면 언제든 문의하세요!