웹사이트 검색

커스텀 Nagios Check 플러그인 작성 방법


이 페이지에서

  1. 고려사항\n
  2. 종료 코드
  3. 예제 플러그인\n
  4. 새 검사 명령 및 서비스 설정
  5. NRPE를 사용하여 클라이언트에서 실행\n
    1. Debian 기반 클라이언트에 일반 설치
    2. 사용자 정의 스크립트 구성

    이 튜토리얼은 Debian 9.2를 사용하여 테스트되었습니다.

    Nagios Exchange에는 자유롭게 다운로드할 수 있는 수천 개의 사용 가능한 플러그인이 있지만 때로는 확인해야 하는 상태가 시나리오에 매우 구체적입니다.

    고려 사항

    다음과 같이 가정합니다.

    • Nagios가 설치되어 실행 중입니다(그렇지 않은 경우 이 자습서를 따를 수 있음).\n
    • Nagios 관리의 기본 사항을 알고 있습니다.\n

    이 예제의 Nagios 서버는 192.168.0.150에서 호스팅되고 예제 클라이언트는 IP 192.168.0.200에서 호스팅됩니다.

    종료 코드

    모니터링되는 서비스의 상태를 식별하기 위해 Nagios는 체크 플러그인을 실행합니다. Nagios는 체크의 종료 코드를 읽어 서비스의 상태를 알 수 있습니다.

    Nagios는 다음 종료 코드를 이해합니다.

    • 0 - 서비스가 정상입니다.
    • 1 - 서비스에 경고가 있습니다.
    • 2 - 서비스가 위험 상태입니다.\n
    • 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
    				# This case makes no sense because it only adds one warning.
    				# It is just to make an example on all possible exits.
                    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
    fi

    nagiostats 도구에서 제공하는 정보를 기반으로 경고 상태에 있는 서비스가 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에 있습니다.

    따라서 파일 끝에 다음 블록을 추가합니다.

    # Custom plugins commands...
    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 파일을 편집하고 다음 블록을 추가합니다.

    # Example - Check current warnings...
    define service{
    	use local-service
    	host_name localhost
    	service_description Nagios Server Warnings
    	check_command check_warnings
    }

    이제 우리는 모두 설정되었습니다. 대기 중인 유일한 것은 구성 파일을 다시 읽기 위해 Nagios를 다시 로드하는 것입니다.

    Nagios를 다시 로드하기 전에 구성에 오류가 없는지 항상 확인하십시오. 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를 사용하여 클라이언트에서 실행

    원격 클라이언트에서 스크립트를 실행하려면 NRPE(Nagios Remote Plugin Executor)를 설정해야 합니다.

    이 튜토리얼은 데비안 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_nrpe

    /etc/nagios/nrpe.cfg의 allowed_hosts 항목에 클라이언트를 추가하여 Nagios 서버가 클라이언트에서 명령을 실행할 수 있도록 합니다. 줄은 다음과 같아야 합니다.

    allowed_hosts=127.0.0.1,::1,192.168.0.150

    NRPE를 사용하는 모든 클라이언트에서 수행할 표준 검사를 정의합니다. /etc/nagios/nrpe_local.cfg에서 검사를 정의합니다. 예를 들어 파일의 모델은 다음과 같습니다.

    ######################################
    # Do any local nrpe configuration here
    ######################################
    #-----------------------------------------------------------------------------------
    # Users
       command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
    
    # Load
       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
    
    # Disk
       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
       # If you want to add a non-standard mount point:
       # 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.service

    NRPE 서비스가 실행 중인지 확인합니다.

    cat /etc/services | grep nrpe
    netstat -at | grep nrpe

    이제 Nagios 서버에서 이전에 정의된 NRPE 명령 중 하나를 확인합니다.

    check_users NRPE 명령은 /usr/lib/nagios/plugins/check_users -w 5 -c 10을 실행하기 위해 /etc/nagios/nrpe_local.cfg 파일에 정의되어 있습니다.

    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)에 명령을 추가합니다.

    # Custom
       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
    }
    

    ! mark는 명령을 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.cfg
    sudo systemctl reload-or-restart nagios.service

    이제 호스트에 대한 새로운 사용자 지정 검사가 있습니다.

    결론

    Nagios는 Nagios Exchange에서 사용할 수 있는 방대한 플러그인 라이브러리를 보유하고 있습니다. 그러나 대규모 환경에서는 예를 들어 특정 작업 결과 확인, 사내 개발 애플리케이션 모니터링 등의 특정 용도에 대한 사용자 지정 검사가 필요할 가능성이 매우 높습니다.

    Nagios가 제공하는 유연성은 이러한 시나리오에 완벽합니다.