Nagios 설치 및 운용

Nagios Core 설치 및 운용 가이드입니다. 패키지/소스 설치 선택, 설정 파일 구조, host/service/check_command 예시, plugin 테스트와 알림 기준을 정리했습니다.

Nagios Core는 host와 service 상태를 주기적으로 검사하고, 결과에 따라 경고와 알림을 처리하는 전통적인 오픈소스 모니터링 엔진입니다. 플러그인 방식이 단순하고 확장성이 좋아 HTTP, SSH, disk, load, process, custom script까지 폭넓게 점검할 수 있습니다.

기존 글은 특정 오래된 Nagios/PHP 버전을 고정해 소스 빌드하는 방식이어서, 새 글에서는 패키지 설치와 소스 설치를 구분하고 운영에 필요한 설정 파일 구조와 검증 절차를 중심으로 정리합니다.

설치 방식 선택

  • 패키지 설치: 배포판 업데이트와 systemd 통합이 쉽습니다.
  • 소스 설치: 최신 기능이나 특정 경로 구성이 필요할 때 사용하지만 유지보수 책임이 커집니다.
  • Nagios XI/NCPA/NRPE 등 주변 도구는 요구사항에 맞게 별도로 검토합니다.

Ubuntu 패키지 설치 예시

sudo apt update
sudo apt install -y nagios4 nagios-plugins-contrib monitoring-plugins apache2
sudo systemctl enable --now nagios4
sudo systemctl status nagios4 --no-pager

배포판에 따라 서비스 이름과 설정 경로가 다를 수 있습니다. Ubuntu 패키지 기준으로는 /etc/nagios4, 소스 설치 기준으로는 /usr/local/nagios/etc를 자주 사용합니다.

기본 설정 파일 구조

  • nagios.cfg: 전체 설정과 cfg_file/cfg_dir include를 정의합니다.
  • commands.cfg: check_http, check_ping 같은 명령 정의를 둡니다.
  • contacts.cfg: 알림 수신자와 contact group을 정의합니다.
  • hosts.cfg: 모니터링 대상 host를 정의합니다.
  • services.cfg: host에서 점검할 service를 정의합니다.

설정 문법 검사

sudo nagios4 -v /etc/nagios4/nagios.cfg 2>/dev/null || sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl reload nagios4 2>/dev/null || sudo systemctl restart nagios

Nagios는 설정 파일 문법이 틀리면 재시작 후 모니터링이 멈출 수 있습니다. 변경 전에는 항상 -v 검사를 먼저 수행합니다.

Host 정의 예시

define host {
 use generic-host
 host_name web01
 alias Web Server 01
 address 192.0.2.10
}

Service 정의 예시

define service {
 use generic-service
 host_name web01
 service_description HTTP
 check_command check_http
}

define service {
 use generic-service
 host_name web01
 service_description SSH
 check_command check_ssh
}

Plugin 직접 테스트

/usr/lib/nagios/plugins/check_http -H 192.0.2.10 -w 3 -c 5
/usr/lib/nagios/plugins/check_ping -H 192.0.2.10 -w 100.0,20% -c 500.0,60%
/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /

경로는 배포판마다 다릅니다. 먼저 find /usr -name check_http로 plugin 위치를 확인합니다.

Remote 서버 점검 방식

Nagios 서버가 원격 서버의 CPU, disk, process를 보려면 단순 ping만으로는 부족합니다. 일반적으로 다음 중 하나를 선택합니다.

  • NRPE: 원격 서버에서 plugin을 실행하고 결과를 Nagios로 반환합니다.
  • NCPA: Nagios에서 제공하는 agent 기반 모니터링 방식입니다.
  • SNMP: 네트워크 장비, appliance, 일부 서버 지표 수집에 적합합니다.
  • SSH check: 별도 agent 없이 SSH로 command를 실행할 수 있지만 key 관리와 실행 권한을 엄격히 제한해야 합니다.

원격 실행형 check는 Nagios 서버가 대상 서버에서 어떤 명령을 실행할 수 있는지 통제하는 것이 핵심입니다. root 권한 script를 넓게 허용하면 모니터링 시스템이 공격 경로가 될 수 있습니다.

check_command 인수 설계

define command {
 command_name check_http_url
 command_line $USER1$/check_http -H $HOSTADDRESS$ -u $ARG1$ -w $ARG2$ -c $ARG3$
}

define service {
 use generic-service
 host_name web01
 service_description HTTP /health
 check_command check_http_url!/health!3!5
}

$ARG1$, $ARG2$ 같은 인수를 쓰면 같은 command definition을 여러 서비스에 재사용할 수 있습니다. 단, 인수에 shell metacharacter가 들어가지 않도록 관리자가 통제해야 합니다.

체크 주기와 재시도

define service {
 use generic-service
 host_name web01
 service_description HTTP
 check_command check_http
 check_interval 5
 retry_interval 1
 max_check_attempts 3
}

짧은 check interval은 빠른 탐지에 좋지만 대상 서비스와 Nagios 서버 부하를 늘립니다. 네트워크 흔들림이 잦은 환경에서는 retry를 두어 일시적 packet loss가 바로 장애 알림으로 이어지지 않게 합니다.

템플릿으로 중복 줄이기

define host {
 name linux-base
 use generic-host
 check_command check-host-alive
 notification_interval 60
 register 0
}

define host {
 use linux-base
 host_name app01
 address 192.0.2.21
}

register 0 템플릿을 사용하면 공통 check 설정과 알림 정책을 한 곳에서 관리할 수 있습니다. 호스트가 늘어날수록 템플릿 설계가 중요합니다.

알림 운영

  • 처음 구성할 때는 알림을 바로 켜지 말고 false positive를 줄입니다.
  • warning과 critical threshold는 서비스 영향 기준으로 정합니다.
  • 점검 시간에는 scheduled downtime을 사용합니다.
  • 알림에는 host, service, state, output, 대응 문서 링크를 포함합니다.
  • 장애 복구 알림도 켜서 담당자가 상태 복귀를 확인할 수 있게 합니다.

장애 확인

sudo systemctl status nagios4 --no-pager
sudo journalctl -u nagios4 -n 100 --no-pager
sudo tail -n 100 /var/log/nagios4/nagios.log 2>/dev/null
sudo tail -n 100 /usr/local/nagios/var/nagios.log 2>/dev/null

운영 점검 루틴

  1. 설정 변경 전 nagios -v로 문법 검사를 합니다.
  2. 새 host/service는 알림 비활성 상태로 먼저 수집 안정성을 봅니다.
  3. 장애가 잦은 check는 threshold, timeout, retry 정책을 재검토합니다.
  4. 폐기된 서버와 서비스는 Nagios 설정에서 제거해 stale alert를 줄입니다.
  5. Nagios 서버 자체의 디스크, mail queue, web UI 상태도 별도로 감시합니다.

백업 대상

  • Nagios 설정 디렉터리
  • custom plugin script
  • contacts/contactgroups 설정
  • Apache 인증 파일과 TLS 설정
  • 알림 relay script와 외부 연동 설정

공식 문서

BGM EVER