Nagios 플러그인 · 5 min read · Nov 18, 2025
사용자 정의 Nagios 체크 플러그인 작성 방법
이 튜토리얼은 Debian 9.2에서 Nagios Core 4.3.4를 사용하여 테스트되었습니다.
Nagios Exchange에는 무료로 다운로드할 수 있는 수천 개의 플러그인이 있지만, 때때로 확인해야 할 상태가 특정 시나리오에 매우 구체적일 수 있습니다.
고려사항
다음과 같은 사항이 가정됩니다:
- Nagios가 설치되어 실행 중입니다 (설치하지 않았다면 이 튜토리얼을 따라할 수 있습니다).
- Nagios 관리의 기본 사항을 알고 있습니다.
이 예제의 Nagios 서버는 192.168.0.150에 호스팅되며, 예제 클라이언트는 IP 192.168.0.200에 호스팅됩니다.
종료 코드
모니터링된 서비스의 상태를 식별하기 위해 Nagios는 해당 서비스에서 체크 플러그인을 실행합니다. Nagios는 체크의 종료 코드를 읽어 서비스의 상태를 알 수 있습니다.
Nagios는 다음 종료 코드를 이해합니다:
- 0 - 서비스가 정상입니다.
- 1 - 서비스에 경고가 있습니다.
- 2 - 서비스가 심각한 상태입니다.
- 3 - 서비스 상태가 알 수 없습니다.
프로그램은 Nagios 체크 플러그인으로 작동하기 위해 어떤 언어로든 작성할 수 있습니다. 체크된 조건에 따라 플러그인은 Nagios에 오작동하는 서비스를 알릴 수 있습니다.
예제 플러그인
간단한 예제를 사용하겠습니다. 현재 경고를 확인하기 위해 bash 스크립트로 플러그인을 작성했습니다. Nagios 서버가 심각한 상태에서만 경고하도록 구성되어 있다고 가정하므로, 경고 상태인 서비스가 너무 많으면 경고를 원합니다.
다음 스크립트를 고려해 보세요 (check_warnings.sh):
#!/bin/bash
countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)
if (($countWarnings<=5)); then
echo "OK - $countWarnings services in Warning state"
exit 0
elif ((6<=$countWarnings && $countWarnings<=30)); then
# 이 경우는 의미가 없습니다. 경고를 하나만 추가합니다.
# 가능한 모든 종료에 대한 예제를 만들기 위한 것입니다.
echo "WARNING - $countWarnings services in Warning state"
exit 1
elif ((30<=$countWarnings)); then
echo "CRITICAL - $countWarnings services in Warning state"
exit 2
else
echo "UNKNOWN - $countWarnings"
exit 3
finagiostats 도구에서 제공하는 정보를 기반으로, 경고 상태인 서비스가 5개 이하일 경우 모든 것이 정상이라고 가정합니다.
이 스크립트를 /usr/local/nagios/libexec/ 내의 다른 Nagios 플러그인과 함께 두겠습니다 (이 디렉토리는 구성에 따라 다를 수 있습니다).
모든 Nagios 플러그인과 마찬가지로, 구성 파일에 추가하기 전에 명령줄에서 확인하고 싶을 것입니다.
스크립트 실행을 허용하는 것을 잊지 마세요:
sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh그리고 다른 스크립트처럼 실행합니다:
결과는 텍스트 메시지와 종료 코드입니다:
새로운 체크 명령 및 서비스 설정
이 단계는 자신의 플러그인과 동일하며, 인터넷에서 타사 플러그인을 다운로드할 때도 마찬가지입니다.
먼저 commands.cfg 파일에 명령을 정의해야 합니다. 이 파일의 위치는 구성에 따라 다르며, 제 경우에는 /usr/local/nagios/etc/objects/commands.cfg에 있습니다.
따라서 파일 끝에 다음 블록을 추가하겠습니다:
# 사용자 정의 플러그인 명령...
define command{
command_name check_warnings
command_line $USER1$/check_warnings.sh
}$USER1$ 변수는 resource.cfg 파일에 설정된 로컬 Nagios 변수이며, 제 경우에는 /usr/local/nagios/libexec를 가리킵니다.
명령을 정의한 후에는 해당 명령을 서비스에 연결하고, 그 다음 호스트에 연결할 수 있습니다. 이 예제에서는 서비스를 정의하고 localhost에 할당할 것입니다. 왜냐하면 이 체크는 Nagios 자체에서 수행되기 때문입니다.
/usr/local/nagios/etc/objects/localhost.cfg 파일을 편집하고 다음 블록을 추가하세요:
# 예제 - 현재 경고 확인...
define service{
use local-service
host_name localhost
service_description Nagios Server Warnings
check_command check_warnings
}이제 모든 준비가 완료되었습니다. 남은 것은 Nagios를 다시 로드하여 구성 파일을 다시 읽는 것입니다.
항상 기억하세요, Nagios를 다시 로드하기 전에 구성에 오류가 없는지 확인하세요. root로 nagios -v 명령을 사용하여 확인할 수 있습니다:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg다음과 같은 결과를 얻어야 합니다:

0개의 오류와 0개의 경고가 반환되는지 확인하고 서비스를 다시 로드하세요:
sudo systemctl reload-or-restart nagios.service서비스를 다시 로드한 후, localhost에서 연결된 체크를 볼 수 있습니다. 처음에는 대기 중으로:
그리고 실행 후 결과와 함께:
클라이언트에서 NRPE 사용
원격 클라이언트에서 스크립트를 실행하려면 Nagios 원격 플러그인 실행기(NRPE)를 설정해야 합니다.
이 튜토리얼은 Debian 9를 기반으로 하므로, 설치 방법을 예로 보여드리겠지만, 모든 배포판에 대한 지침을 찾을 수 있습니다.
Debian 기반 클라이언트의 일반 설치
이 섹션의 모든 구성은 Nagios 서버가 아닌 체크할 클라이언트에서 수행됩니다.
NRPE 및 Nagios 플러그인을 설치합니다:
sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpeNagios 서버가 클라이언트에서 명령을 실행할 수 있도록 /etc/nagios/nrpe.cfg의 allowed_hosts 항목에 추가합니다. 해당 줄은 다음과 같아야 합니다:
allowed_hosts=127.0.0.1,::1,192.168.0.150NRPE로 모든 클라이언트에서 수행할 표준 체크를 정의합니다. /etc/nagios/nrpe_local.cfg에서 체크를 정의합니다. 예를 들어, 파일의 모델은 다음과 같을 수 있습니다:
######################################
# 여기에서 모든 로컬 nrpe 구성을 수행합니다
######################################
#-----------------------------------------------------------------------------------
# 사용자
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
# 부하
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
# 디스크
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
# 비표준 마운트 포인트를 추가하려면:
# command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------모든 클라이언트에서 동일한 체크를 수행할 수 있도록 이 일반 파일을 갖는 것이 좋습니다.
로컬 파일과 .d 디렉토리가 메인 구성 파일에 포함되어 있는지 확인합니다:
cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#서비스를 재시작합니다:
sudo systemctl restart nagios-nrpe-server.serviceNRPE 서비스가 실행 중인지 확인합니다:
cat /etc/services | grep nrpe
netstat -at | grep nrpe이제 Nagios 서버에서 이전에 정의된 NRPE 명령 중 하나를 확인합니다:
check_users NRPE 명령은 /etc/nagios/nrpe_local.cfg 파일에서 /usr/lib/nagios/plugins/check_users -w 5 -c 10을 실행하도록 정의되었습니다.
Nagios 서버에 플러그인이 없는 경우 다음 명령으로 설치할 수 있습니다:
sudo apt-get install nagios-nrpe-plugin따라서 요약하자면, NRPE는 원격 호스트에서 스크립트를 실행하고 종료 코드를 Nagios 서버로 반환합니다.
사용자 정의 스크립트 구성
NRPE를 통해 원격으로 실행할 플러그인으로 사용자 정의 스크립트를 사용하려면, 먼저 서버에서 스크립트를 작성해야 합니다. 예를 들어 /usr/local/scripts/check_root_home_du.sh에 작성합니다:
#!/bin/bash
homeUsage=$(du -s /root/ | cut -f1)
if (($homeUsage<=$((1024*1024)))); then
echo "OK - Root home usage is $(du -sh /root/ | cut -f1)"
exit 0
elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
echo "WARNING - Root home usage is $(du -sh /root/ | cut -f1)"
exit 1
elif (($((3*1024*1024))<$homeUsage)); then
echo "CRITICAL - Root home usage is $(du -sh /root/ | cut -f1)"
exit 2
else
echo "UNKNOWN - Value received: $homeUsage"
exit 3
fi스크립트 실행을 허용합니다:
sudo chmod +x /usr/local/scripts/check_root_home_du.sh이전 스크립트는 /root 디렉토리의 디스크 사용량을 확인하고 이를 정상, 경고 또는 심각한 것으로 간주하기 위한 임계값을 설정하는 매우 간단한 예제입니다.
클라이언트의 NRPE 구성 파일에 명령을 추가합니다 (/etc/nagios/nrpe_local.cfg):
# 사용자 정의
command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh그리고 NRPE 리스너를 재시작합니다:
sudo systemctl restart nagios-nrpe-server.service이제 서버에 접근하여 표준 플러그인처럼 테스트할 수 있습니다.
서버 구성 파일에서 NRPE 체크 설정
이제 사용자 정의 플러그인이 클라이언트와 서버에서 작동하고 NRPE가 올바르게 통신하고 있음을 알았으므로, 원격 장치를 확인하기 위해 Nagios 파일을 구성할 수 있습니다. 따라서 서버에서 파일을 설정합니다:
/usr/local/nagios/etc/objects/commands.cfg:
#...
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}/usr/local/nagios/etc/objects/nrpeclient.cfg:
define host{
use linux-server
host_name nrpeclient
alias nrpeclient
address 192.168.0.200
}
define service{
use local-service
host_name nrpeclient
service_description Root Home Usage
check_command check_nrpe!check_root_home_du
}! 마크는 check_command 항목에서 명령과 인수를 구분합니다. 이는 check_nrpe가 명령이고 check_root_home_du가 $ARG1$의 값임을 정의합니다.
또한 구성에 따라 이 마지막 파일을 메인 파일 (/usr/local/nagios/etc/nagios.cfg)에 추가해야 합니다:
#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...구성을 확인하고, 오류나 경고가 없으면 서비스를 다시 로드합니다:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgsudo systemctl reload-or-restart nagios.service이제 호스트에서 새로운 사용자 정의 체크가 있습니다:
결론
Nagios는 Nagios Exchange에서 사용할 수 있는 방대한 플러그인 라이브러리를 보유하고 있습니다. 그러나 대규모 환경에서는 특정 용도를 위한 사용자 정의 체크가 필요할 가능성이 높습니다. 예를 들어 특정 작업 결과를 확인하거나, 내부에서 개발한 애플리케이션을 모니터링하는 것 등이 있습니다.
Nagios가 제공하는 유연성은 이러한 경우에 완벽합니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.