서버를 감시하고 모니터링하기 위한 Monitor 설치 및 구성 방법

이 문서에서는 Ubuntu 서버 20.04 또는 24.04를 사용한다고 가정합니다.

동기 부여

Monit은 Linux 서버의 서비스, 프로세스, 파일 및 파일 시스템을 모니터링하고 관리하기 위한 간단하고 가벼운 도구입니다. 사전 예방적 기능 덕분에 서버 자동화를 위한 훌륭한 선택이 될 수 있습니다. 다음은 Ubuntu 서버 20.04 및 24.04에서 Monit를 설치, 구성 및 사용하는 방법에 대한 자세한 단계입니다.

대안

Netdata는 WordOps와 함께 제공되며 서버의 통계를 잘 보여줍니다. 하지만 Monit이 제공하는 사전 모니터링 기능은 없습니다. Kibana, Zabbix, Nagios와 같은 다른 도구도 인기가 있지만 설정하기가 더 어렵고 시스템 리소스를 더 많이 소비합니다.

Monit 설치

다행히 Ubuntu의 리포지토리에 Monit이 포함되어 있으므로 함께 설치해 보겠습니다:

sudo apt 업데이트
sudo apt 설치 모니터

기본 구성

Monit의 기본 구성 파일은 다음 위치에 있습니다. /etc/monit/monitrc. 편집하기 전에 백업을 만드는 것이 좋습니다:

sudo cp /etc/monit/monitrc /etc/monit/monitrc.backup

기본적으로 Monit은 2분(120초)마다 서비스를 확인합니다. 파일에서 아래 줄을 편집하여 이 값을 수정할 수 있습니다. 1분마다 검사하는 것을 권장합니다:

데몬 60 설정

Monit에는 자체 메일 서버가 함께 제공되지만 좀 더 강력한 것이 필요하고 이미 Sendmail을 구성했으므로 이를 MTA로 사용하여 설정을 localhost로 지정해 보겠습니다(이 매개변수는 기본적으로 주석 처리되어 있으므로 그 위에 붙여넣기만 하면 됩니다):

메일서버 로컬호스트 설정

그리고 메일 형식 매개변수는 이메일 구조의 모든 측면을 정의하므로 모든 줄의 주석을 해제해야 하며, 최소한의 구성은 발신자 이메일만 변경하는 것입니다:

보낸 사람: 모니터 <mo************@*****le.com>

Monit의 모든 알림을 수신할 이메일(일반적으로 자신의 비즈니스 이메일)을 설정합니다:

알림 설정 al****@*****le.com

Monit은 웹 기반 상태 페이지를 제공하고 명령줄 명령을 처리하기 위해 내장된 HTTP 인터페이스를 사용합니다. 웹 인터페이스를 활성화하지 않으려는 경우에도 유효한 완전한 구성 블록을 제공해야만 Monit을 설정 및 엔드포인트하고 올바르게 관리할 수 있습니다.

httpd 포트 2812를 설정하고 로컬호스트 주소를 사용합니다.
 localhost 허용
 allow admin:monit # 사용자 'admin'과 비밀번호 'monit'이 필요합니다.

원격 액세스를 허용하려면 로컬호스트 를 적절한 서버 IP 또는 도메인으로 변경하고 보안 인증 자격 증명을 설정합니다.

추가 구성 파일을 포함하세요:

기본 구성 파일 외에도 Monit에는 다음에서 추가 구성 파일이 포함될 수 있습니다. /etc/monit/conf-enabled/. 이 디렉터리 안에 서버에서 사용하는 대부분의 서비스를 다루는 여러 모니터를 추가하겠지만 가장 중요한 보안부터 시작하겠습니다.

성공적인 SSH 로그인 모니터링

누군가 SSH를 통해 서버에 로그인에 성공할 때마다 알려야 하므로 이 알림은 매우 중요한 첫 번째 알림입니다. 이 알림은 다음에서 제공했습니다. 엘리트무스의 시레쉬 그리고 우리는 이름을 지을 것입니다 ssh_logins.conf:

경로가 /var/log/auth.log인 ssh_logins 파일을 확인합니다.
  "/etc/monit/whitelist_ips.regex" 일치 무시
  "허용된 공개키"와 일치하면 알림을 보냅니다.

파일에 한 줄당 하나의 IP를 추가합니다. /etc/monit/whitelist_ips.regex 을 클릭하거나 모든 알림을 수신하려면 댓글을 달거나 삭제하세요.

LEMP 스택 모니터링

적절한 이름 lemp.conf 이 모니터는 스토리지, CPU 및 RAM, NGINX, PHP 및 MySQL(저희의 경우 MariaDB)과 같은 시스템 리소스를 포괄합니다. 공식은 다음과 같습니다. loadavg 는 1.5 * CPU 코어 수입니다:

# 루트 파일시스템에서 파일시스템 사용량 확인
경로 /로 파일 시스템 rootfs를 확인합니다.
    공간 사용량이 90%를 초과하면 # 경고 디스크 공간 사용량이 90%를 초과하면 경고합니다.

# 로컬 호스트에서 시스템 성능 메트릭 확인
로컬 호스트 시스템 확인
    loadavg (1분) > 6이면 # 1분 로드 평균이 6을 초과하면 알림 # 알림
    loadavg (5분) > 4이면 5분 로드 평균이 4를 초과하면 # 알림 5분 로드 평균이 4를 초과하면 알림
    메모리 사용량이 90%를 초과하면 # 경고 메모리 사용량이 90%를 초과하면 # 경고
    CPU 사용량이 15회 연속 80%를 초과하면 # 경고
    CPU 사용량이 15주기 동안 80%를 초과하면 # 총 CPU 사용량 경고
    CPU 사용량(사용자)이 70%를 초과하면 # 사용자 CPU 사용량을 경고합니다.
    CPU 사용량(시스템)> 30%이면 # 시스템 CPU 사용량 알림
    CPU 사용량(대기) > 20%이면 # 알림 I/O 대기 CPU 사용량

# Nginx 웹 서버 프로세스(HTTPS) 확인
pid파일 /var/run/nginx.pid로 nginx 프로세스 확인
    프로그램 시작 = "/usr/sbin/service nginx 시작"
    프로그램 중지 = "/usr/sbin/service nginx stop"
    CPU가 2주기 동안 80%를 초과하면 # 경고 CPU 사용량이 2번 연속으로 80%를 초과하면 경고합니다.
    호스트 127.0.0.1 포트 443 프로토콜 https에 실패하면 #를 다시 시작합니다. Nginx가 HTTPS에서 응답하지 않는 경우 다시 시작합니다.

# MySQL 데이터베이스 서버 프로세스 확인
pid파일 /var/run/mysqld/mysqld.pid로 mysqld 프로세스 확인
    프로그램 시작 = "/usr/sbin/service mysql start"
    프로그램 중지 = "/usr/sbin/service mysql 중지"
    2주기 동안 CPU > 80%이면 # 경고 CPU 사용량이 2번 연속으로 80%를 초과하면 경고
    실패한 경우 unixsocket /var/run/mysqld/mysqld.sock을 다시 시작한 다음 #를 다시 시작합니다. Unix 소켓이 응답하지 않는 경우 MySQL을 다시 시작합니다.

# PHP 8.3의 PHP-FPM 프로세스를 확인합니다.
pid파일 /var/run/php/php8.3-fpm.pid로 php8.3-fpm 프로세스 확인
    프로그램 시작 = "/usr/sbin/service php8.3-fpm 시작"
    프로그램 중지 = "/usr/sbin/service php8.3-fpm 중지"
    CPU가 2주기 동안 80%를 초과하면 # 경고 CPU 사용량이 2번 연속으로 80%를 초과하면 경고합니다.

Redis 모니터링

별도의 파일에 Redis 모니터링을 추가해 보겠습니다, redis.conf는 워드프레스 실행에 중요하지 않으며 필요한 경우 비활성화할 수 있습니다:

# Redis 모니터링(Unix 소켓 사용)
pid파일 /var/run/redis/redis-server.pid로 프로세스 redis 확인
    프로그램 시작 = "/usr/sbin/service redis-server 시작"
    프로그램 중지 = "/usr/sbin/service redis-server 중지"
    
    # 프로세스 리소스 모니터링
    CPU 사용량이 5주기 동안 80%를 초과하면 경고합니다.
    메모리 사용량이 75%를 초과하면 알립니다.
    5주기 동안 자식이 255를 초과하면 경고합니다.
    
    그룹 redis

# Redis 로그 파일에서 오류 확인
경로가 /var/log/redis/redis-server.log인 redis_log 파일을 확인합니다.
    "ERROR"와 일치하면 경고합니다.
    "CRITICAL"과 일치하면 경고한다.
    그룹 redis

모니터 Fail2Ban

동일한 방법론을 사용하여 다음을 추가해 보겠습니다. fail2ban.conf:

pid파일 /var/run/fail2ban/fail2ban.pid로 fail2ban 프로세스 확인
    서비스 그룹
    프로그램 시작 = "/etc/init.d/fail2ban force-start"
    프로그램 중지 = "/etc/init.d/fail2ban stop"
    실패하면 unixsocket /var/run/fail2ban/fail2ban.sock을 다시 시작합니다.
    5 사이클 이내에 5번 재시작하면 시간 초과

경로가 /var/log/fail2ban.log인 fail2ban_log 파일을 확인합니다.
    "오류|경고"와 일치하면 알림을 보냅니다.

ClamAV 모니터링

이전에 설치한 ClamAV가 서버에서 바이러스나 멀웨어를 발견하는지 알아야 합니다. clamav.conf 이렇게 생겼습니다:

# ClamAV 로그 파일에서 탐지를 나타내는 변경 사항을 확인합니다.
경로가 /var/log/clamav/clamav.log인 clamav_log 파일을 확인합니다.
  "FOUND"와 일치하면 알림

민감한 파일의 무결성 모니터링

Monit은 중요한 파일이나 자주 변경해서는 안 되는 파일을 감시하고 변경이 발생할 때마다 알려줍니다. 이러한 활동을 일반적으로 "파일 무결성 모니터링"이라고 하므로, conf 파일의 이름은 fim.conf 를 만들고 그 안에 파일을 다음과 같이 나열할 수 있습니다:

# 워드프레스 구성 파일에서 변경 사항 모니터링하기
경로가 /var/www/example.com/wp-config.php인 wp_config 파일을 확인합니다.
    체크섬이 변경되면 경고

화이트리스트_ips 파일 확인 경로가 /etc/monit/whitelist_ips.regex인 경우
    체크섬이 변경되면 알림

모니터 서비스 활성화 및 시작

부팅 시 자동으로 Monit을 시작하도록 설정합니다:

sudo systemctl enable monitor

그런 다음 Monit 서비스를 시작합니다:

sudo systemctl 시작 모니터

다음에서 Monit 서비스의 상태를 확인할 수 있습니다:

sudo systemctl 상태 모니터

모니터링 구성 테스트

Monit 구성을 프로덕션에 적용하기 전에 테스트하세요:

sudo monit -t
sudo monit 다시 로드
sudo monitor status

그리고 상태 모니터링 명령은 현재 Monit에서 모니터링 중인 모든 서비스와 프로세스를 나열합니다.

구성 오류가 있는 경우 Monit에 해당 오류가 표시되며 이에 따라 수정할 수 있습니다.

이 페이지가 도움이 되었나요?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다