ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CentOS 7] Nagios 서버
    Linux/CentOS 2017. 10. 31. 00:34

    Nagios는 다양한 기능의 모니터링 서비스를 제공하는 오픈소스 서버이자 네트워크 모니터링 프로그램이다. Nagios는 리눅스 및 유닉스, 윈도우 서버를 비롯한 대부분의 시스템에 대한 모니터링 서비스를 제공할 뿐 아니라 IP 주소로 접근 가능한 라우터나 스위치, 방화벽 같은 네트워크 장치에 대한 모니터링 서비스도 제공한다. 또한 서버 시스템에 운영되는 다양한 애플리케이션도 제공한다. 더불어 24(시)x7(일)동안 중단 없이 서버가 사용하는 자원들까지도 모니터링할 수 있다. Nagios는 이러한 시스템 및 서비스에 대한 모니터링 도중 문제점을 발견할 경우 관리자에게 알리는 알림 기능 또한 제공한다.  관리자는 Nagios가 실시간으로 보내오는 이러한 문제들을 신속하게 발견하고 수정함으로써 중단 없는 서비스를 클라이언트에게 제공할 수 있다. 또한 관리자는 Nagios가 제공하는 웹 인터페이스를 통해 Nagios가 제공하는 모든 기능을 편리하게 관리할 수 있다.

    Nagios에서 실제 모니터링을 담당하는 시스템을 Nagios 서버라고 하며, 이러한 모니터링되는 대상 시스템을 Nagios 에이전트 또는 타켓이라고 부른다. Nagios 서버는 이러한 에이전트 모니터링을 위해 다양한 플러그인을 사용한다. Nagios 종류에는 오픈소스 버전인 Nagios Core와 상용 버전인 Nagios XI 두 가지가 있다. 




    1. Nagios 서버 설치와 서비스 시작


    1.1 Nagios 서버 설치

    a. Nagios 서버 설치 전 수행 조건

    Nagios 서버는 웹 인터페이스를 관리자에게 제공함으로써 편리한 관리가 가능하다고 설명했는데, 이를 위해 Nagios 시작 전에 웹 서버가 실행되고 있는지 확인해야 한다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 필요한 패키지들을 명령어 yum으로 설치한다.
    [root@master ~]# yum install gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel xinetd unzip httpd php -y
     
    # PHP 사용 확인을 위해 PHP 정보를 보여줄 파일을 생성한다.
    [root@master ~]# cat /var/www/html/index.php
    <?php
            phpinfo();
    ?>
    [root@
     
    # Apache 서버를 재시작하고, 이후에 브라우저에서 이 PHP 파일로 접근이 가능한지 테스트를 하길 바란다.
    [root@master ~]# systemctl restart httpd
    cs


    b. Nagios 서버 패키지 설치

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # epel 저장소에 Nagios 패키지가 존재
    [root@master ~]# yum install epel-release -y
     
    # yum으로 Nagios 패키지와 플러그인을 설치한다.
    [root@master ~]# yum install -y nagios-plugins-all nagios
    Installed:
      nagios.x86_64 0:4.3.2-8.el7                                  # nagios-plugins-all.x86_64 0:2.2.1-4git.el7
     
    Dependency Installed:
      autogen-libopts.x86_64 0:5.18-5.el7                                avahi-libs.x86_64 0:0.6.31-17.el7
      bind-libs.x86_64 32:9.9.4-50.el7_3.1                               bind-utils.x86_64 32:9.9.4-50.el7_3.1
      cups-libs.x86_64 1:1.6.3-26.el7                                    fping.x86_64 0:3.10-4.el7
      libarchive.x86_64 0:3.1.2-10.el7_2                                 libldb.x86_64 0:1.1.26-1.el7
      libsmbclient.x86_64 0:4.4.4-14.el7_3                               libtdb.x86_64 0:1.3.8-1.el7_2
      libwbclient.x86_64 0:4.4.4-14.el7_3                                lm_sensors.x86_64 0:3.4.0-4.20160601gitf9185e5.el7
      mailx.x86_64 0:12.5-12.el7_0                                       # nagios-common.x86_64 0:4.3.2-8.el7 
      nagios-plugins.x86_64 0:2.2.1-4git.el7                             nagios-plugins-breeze.x86_64 0:2.2.1-4git.el7
      nagios-plugins-by_ssh.x86_64 0:2.2.1-4git.el7                      nagios-plugins-cluster.x86_64 0:2.2.1-4git.el7
      nagios-plugins-dhcp.x86_64 0:2.2.1-4git.el7                        nagios-plugins-dig.x86_64 0:2.2.1-4git.el7
      nagios-plugins-disk.x86_64 0:2.2.1-4git.el7                        nagios-plugins-disk_smb.x86_64 0:2.2.1-4git.el7
      nagios-plugins-dns.x86_64 0:2.2.1-4git.el7                         nagios-plugins-dummy.x86_64 0:2.2.1-4git.el7
      nagios-plugins-file_age.x86_64 0:2.2.1-4git.el7                    nagios-plugins-flexlm.x86_64 0:2.2.1-4git.el7
      nagios-plugins-fping.x86_64 0:2.2.1-4git.el7                       nagios-plugins-game.x86_64 0:2.2.1-4git.el7
      nagios-plugins-hpjd.x86_64 0:2.2.1-4git.el7                        nagios-plugins-http.x86_64 0:2.2.1-4git.el7
      nagios-plugins-icmp.x86_64 0:2.2.1-4git.el7                        nagios-plugins-ide_smart.x86_64 0:2.2.1-4git.el7
      nagios-plugins-ircd.x86_64 0:2.2.1-4git.el7                        nagios-plugins-ldap.x86_64 0:2.2.1-4git.el7
      nagios-plugins-load.x86_64 0:2.2.1-4git.el7                        nagios-plugins-log.x86_64 0:2.2.1-4git.el7
      nagios-plugins-mailq.x86_64 0:2.2.1-4git.el7                       nagios-plugins-mrtg.x86_64 0:2.2.1-4git.el7
      nagios-plugins-mrtgtraf.x86_64 0:2.2.1-4git.el7                    nagios-plugins-mysql.x86_64 0:2.2.1-4git.el7
      nagios-plugins-nagios.x86_64 0:2.2.1-4git.el7                      nagios-plugins-nt.x86_64 0:2.2.1-4git.el7
      nagios-plugins-ntp.x86_64 0:2.2.1-4git.el7                         nagios-plugins-ntp-perl.x86_64 0:2.2.1-4git.el7
      nagios-plugins-nwstat.x86_64 0:2.2.1-4git.el7                      nagios-plugins-oracle.x86_64 0:2.2.1-4git.el7
      nagios-plugins-overcr.x86_64 0:2.2.1-4git.el7                      nagios-plugins-perl.x86_64 0:2.2.1-4git.el7
      nagios-plugins-pgsql.x86_64 0:2.2.1-4git.el7                       nagios-plugins-ping.x86_64 0:2.2.1-4git.el7
      nagios-plugins-procs.x86_64 0:2.2.1-4git.el7                       nagios-plugins-real.x86_64 0:2.2.1-4git.el7
      nagios-plugins-rpc.x86_64 0:2.2.1-4git.el7                         nagios-plugins-sensors.x86_64 0:2.2.1-4git.el7
      nagios-plugins-smtp.x86_64 0:2.2.1-4git.el7                        nagios-plugins-snmp.x86_64 0:2.2.1-4git.el7
      nagios-plugins-ssh.x86_64 0:2.2.1-4git.el7                         nagios-plugins-swap.x86_64 0:2.2.1-4git.el7
      nagios-plugins-tcp.x86_64 0:2.2.1-4git.el7                         nagios-plugins-time.x86_64 0:2.2.1-4git.el7
      nagios-plugins-ups.x86_64 0:2.2.1-4git.el7                         nagios-plugins-users.x86_64 0:2.2.1-4git.el7
      nagios-plugins-wave.x86_64 0:2.2.1-4git.el7                        net-snmp-utils.x86_64 1:5.7.2-24.el7_3.2
      ntp.x86_64 0:4.2.6p5-25.el7.centos.2                               ntpdate.x86_64 0:4.2.6p5-25.el7.centos.2
      postgresql-libs.x86_64 0:9.2.18-1.el7                              qstat.x86_64 0:2.11-13.20080912svn311.el7
      samba-client.x86_64 0:4.4.4-14.el7_3                               samba-client-libs.x86_64 0:4.4.4-14.el7_3
      samba-common.noarch 0:4.4.4-14.el7_3                               samba-common-libs.x86_64 0:4.4.4-14.el7_3
     
    Dependency Updated:
      bind-libs-lite.x86_64 32:9.9.4-50.el7_3.1                             bind-license.noarch 32:9.9.4-50.el7_3.1
    cs


    1.2 Nagios 서버 시작

    Nagios 패키지 설치 이후에 할 작업은 Nagios 데몬을 시작해 모니터링 서비스를 시작하는 것인데, Apache 웹 서버도 Nagios 서비스를 위해 설정을 추가해줘야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    # htpassd를 이용해 Nagios 서버의 관리자를 생성하고, 그 정보를 passwd 파일에 저장하고, htpasswd는 httpd-tools를 설치해야 함
    # 생성된 관리자의 정보는 Nagios를 웹으로 접속할 때 필요하다.
    [root@master ~]# htpasswd /etc/nagios/passwd nagiosadmin
    New password:
    Re-type new password:
    htpasswd: password verification error
     
    # cat으로 읽어보면 사용자의 이름과 패스워드가 해시 함수 MD5로 암호화돼 저장돼 있다.
    [root@master ~]# cat /etc/nagios/passwd
    nagiosadmin:RbdO4ou4PNyMg
     
    [root@master ~]# vi /etc/httpd/conf.d/nagios.conf
    <Directory "/usr/lib64/nagios/cgi-bin/">
    #  SSLRequireSSL
       Options ExecCGI
       AllowOverride None
       <IfVersion >= 2.3>
          <RequireAll>
    #        Require all granted
    #        Require host 127.0.0.1
             Require ip 127.0.0.1 192.168.80.0/24 # IP 주소를 지정하면 이 네트워크에서 정의된 사용자만 Nagios Web에 접속가능
             AuthName "Nagios Access"
             AuthType Basic
             AuthUserFile /etc/nagios/passwd
             Require valid-user    # /etc/nagios/passwd 저장된 정보를 이용해 인증을 허용한다는 의미
          </RequireAll>
       </IfVersion>
     
    <Directory "/usr/share/nagios/html">
    #  SSLRequireSSL
       Options None
       AllowOverride None
       <IfVersion >= 2.3>
          <RequireAll>
             Require all granted
    #        Require host 127.0.0.1
             Require ip 127.0.0.1 192.168.80.0/24
     
             AuthName "Nagios Access"
             AuthType Basic
             AuthUserFile /etc/nagios/passwd
             Require valid-user
          </RequireAll>
       </IfVersion>
     
    [root@master ~]# vi /etc/nagios/objects/contacts.cfg
    define contact{
    # Nagios 서버가 알림 기능을 제공할 때 그 연락처 정보를 설정하는데, 먼저 관리자의 이름과 메일 주소를 지정한다.
            contact_name                    nagiosadmin             ; Short name of user
            use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
            alias                           Nagios Admin            ; Full name of user
            email                           sepiros62@chul.com      ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
            }
     
    [root@master ~]# systemctl restart httpd
    cs


    b. Nagios 서비스 시작

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    # nagios 서버 재시작, 부팅 후에도 nagios 서버가 자동으로 시작되도록 설정
    [root@master ~]# systemctl start nagios
    [root@master ~]# systemctl enable nagios
    Created symlink from /etc/systemd/system/multi-user.target.wants/nagios.service to /usr/lib/systemd/system/nagios.service.
     
    # 서비스 시작 이후 상태를 확인해 active와 성공적으로 시작됐다는 메시지를 확인
    [root@master ~]# systemctl status nagios
    â nagios.service - Nagios Network Monitoring
       Loaded: loaded (/usr/lib/systemd/system/nagios.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-08-08 09:04:03 UTC; 9s ago
         Docs: https://www.nagios.org/documentation/
     
    # ps를 이용해 프로세스를 확인
    [root@master ~]# ps -ef | grep nagios
    nagios    2552     1  0 09:04 ?        00:00:00 /usr/sbin/nagios -/etc/nagios/nagios.cfg
    nagios    2553  2552  0 09:04 ?        00:00:00 /usr/sbin/nagios --worker /var/spool/nagios/cmd/nagios.qh
    nagios    2554  2552  0 09:04 ?        00:00:00 /usr/sbin/nagios --worker /var/spool/nagios/cmd/nagios.qh
    nagios    2555  2552  0 09:04 ?        00:00:00 /usr/sbin/nagios --worker /var/spool/nagios/cmd/nagios.qh
    nagios    2556  2552  0 09:04 ?        00:00:00 /usr/sbin/nagios --worker /var/spool/nagios/cmd/nagios.qh
    nagios    2557  2552  0 09:04 ?        00:00:00 /usr/sbin/nagios -/etc/nagios/nagios.cfg
    root      2583  1863  0 09:05 pts/0    00:00:00 grep --color=auto nagios
     
    # nagios에 v 옵션을 사용해 기본 설정 파일을 검사한다. 에러가 있는 경우 메시지를 출력한다.
    [root@master ~]# nagios -v /etc/nagios/nagios.cfg
    Nagios Core 4.3.2
    Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
    Copyright (c) 1999-2009 Ethan Galstad
    Last Modified: 2017-05-09
    License: GPL
    Website: https://www.nagios.org
    Reading configuration data...
       Read main config file okay...
       Read object config files okay...
    Running pre-flight check on configuration data...
    Checking objects...
            Checked 8 services.
            Checked 1 hosts.
            Checked 1 host groups.
            Checked 0 service groups.
            Checked 1 contacts.
            Checked 1 contact groups.
            Checked 24 commands.
            Checked 5 time periods.
            Checked 0 host escalations.
            Checked 0 service escalations.
    Checking for circular paths...
            Checked 1 hosts
            Checked 0 service dependencies
            Checked 0 host dependencies
            Checked 5 timeperiods
    Checking global event handlers...
    Checking obsessive compulsive processor commands...
    Checking misc settings...
    Total Warnings: 0    # 경고 또는 에러가 없는 것을 확인할 수 있다.
    Total Errors:   0
    Things look okay - No serious problems were detected during the pre-flight check
     
    # Nagios 서버가 용하는 로그 파일을 확인
    [root@master ~]# ls -l /var/log/nagios/
    drwxr-x---2 nagios nagios   6 Jul 25 22:31 archives
    -rw-r--r--1 nagios nagios 937 Aug  8 09:04 nagios.log
    cs


    c. 브라우저에서 Nagios 서버 접속

    브라우저에 IP 주소와 nagios 디렉토리를 입력하면 접속할 수 있는데, 앞에서 설정한 관리자의 이름과 패스워드를 입력하는 인증 과정을 거쳐야 한다.

    1. 인증 정보 입력하기

    브라우저에 http://192.168.80.5/nagios를 입력해서 nagios에 접속해 생성한 인증 정보를 제공하면 접속에 성공할 수 있다. DNS 서버가 작동하고 있다면 대신 도메인 이름을 사용할 수 있다. 


    2. 초기 화면 확인하기




    2. 리눅스 서버 모니터링


    a. 모니터링 서버에서 설정 (master)

    먼저 nagios 서버에서 다음과 같이 설정해줘야 한다. 이 설정 파일에서 node1 모니터링을 위해 호스트 정보와 서비스 정보를 설정해줘야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    # 51번 라인을 활성화한다. 이 디렉토리는 리눅스를 추가하거나 윈도우 서버를 추가할 경우 설정 파일을 저장하기 위해 사용한다.
    [root@master ~]# vi /etc/nagios/nagios.cfg
      51 cfg_dir=/etc/nagios/servers
     
    # 디렉토리가 존재하지 않는다면 생성한다.
    [root@master ~]# mkdir /etc/nagios/servers
     
    # nagios 그룹 소유권으로 디렉토리를 변경해 nagios 그룹이 이 디렉토리에 접근할 수 있게 허용한다.
    [root@master ~]# chgrp nagios /etc/nagios/servers/
     
    # nagios 그룹에 읽기 및 실행 권한을 부여한다.
    [root@master ~]# chmod 750 /etc/nagios/servers/
    [root@master ~]# ls -al /etc/nagios/servers/
    drwxr-x---2 root nagios   6 Aug  8 09:44 .
    drwxrwxr-x. 6 root root   112 Aug  8 09:44 ..
     
    # 리눅스 호스트 모니터링에 사용할 파일을 생성하는데, /etc/nagios/objects/templates 파일을 복사해서 필요한 부분만 변경하면 된다.
    [root@master ~]# vi /etc/nagios/servers/node1.cfg
    define host{
            use             linux-server
            host_name       node1    # 모니터링 할 대상 호스트 이름을 지정한다.
            alias           Linux Host
            addreses        192.168.80.6    # 호스트 이름에 해당하는 IP 주소를 지정
    }
     
    define service{
    # "generic-service"에서 /etc/nagios/objects/templates 파일에 그 서비스 이름과 어떤 서비스를 제공할지 정의돼 있는데, 
    # 여기서 이 서비스를 정의하면 곧 템플릿 파일에 정의된 서비스를 node1 모니터링을 위해 사용한다는 의미다. 
            use                     generic-service    
            host_name               node1    # 이 서비스를 사용할 호스트 이름을 지정
            service_description     PING
    # "check_ping"은 /etc/nagios/objects/commands.cfg 파일에 정의돼 있는데, 이 명령어를 여기에서 사용한다는 의미다. 
            check_command           check_ping!100.0,20%!500.0,60%
    }
     
    # 변경 사항을 적용하기 위해 nagios 서버를 다시 시작한다.
    [root@master objects]# systemctl restart nagios
     
    -> 100.0ms-500.0ms : 이 숫자는 RTT(Round Trip Time)로서 ping을 보내 돌아온 시간을 의미하고, 시간내에 있는 경우 경고(Warning) 
    상태로 표시하고 500ms 이상인 경우 Error or Down 상태로표시된다. Nagios 화면에서는 RTA(Round Trip Average)로 표시한다.
     
    -> 20%-60% : 보낸 Ping 패킷의 20~60%이 손실되면 경고 상태로 표시하고, 그 이상이라면 Error or Down 상태로 표시하라는 의미다. 
    이 ping 명령어는 기본적으로 5개의 패킷을 보내 테스트한다.
    cs


    b. 브라우저에서 확인

    앞에서 설정한 호스트 정보 node1이 추가됐음을 왼쪽의 Hosts 메뉴를 통해 확인할 수 있다.

    node1의 Ping 서비스가 작동되고 있음을 왼쪽의 Services 메뉴를 클릭하면 OK 메시지를 통해 확인할 수 있다. Ping 서비스는 일반적으로 호스트가 현재 네트워크상에서 작동되고 있는지 확인하기 위해 사용된다.

    호스트 전체의 정보를 확인하기 위해 node1을 클릭하면 현재 Nagios 서버가 수집한 node1에 대한 모든 정보를 확인할 수 있다.


    2.2 NRPE 플러그인 사용

    호스트 node1과 ping 서비스를 Nagios 서버에 추가했는데, 리눅스 호스트의 다양한 서비스를 동시에 모니터링하고 싶다면 NRPE 플러그인을 사용할 수 있다. NRPE 플러그인을 사용하면 한 호스트에서 운영 중인 여러 서비스들을 동시에 Nagios 서버에 추가해 모니터링할 수 있다.

     호스트 이름

     chul.com 

     node1.chul.com 

     IP 주소 

     192.168.80.5 

     192.168.80.6 

     역할

     모니터링 서버 

     모니터링 타켓 

     프로그램 

     check_nrpe 플러그인 

     nrpe 데몬 

    모니터링 서버 master는 Nagios 플러그인 check_nrpe를 이용해 모니터링 타켓 호스트인 node1의 nrpe 데몬에 접속해 그 정보를 수집한 다음 nagios 서버에 저장하게 된다.


    a. 리눅스 타켓 호스트(node1)에서 설정

    먼저 타켓 호스트로 사용되는 node1에서 NRPE패키지를 설치하고 서비스를 시작해줘야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    # nrpe 패키지와 플러그인을 설치
    [root@node1 ~]# yum install nrpe nagios-plugins-all -y
    [root@node1 ~]# rpm -qa | grep nrpe
    nrpe-3.1.1-1.el7.x86_64
     
    # nrpe 설정에 필요한 파일을 열어서 수정
    [root@node1 ~]# vi /etc/nagios/nrpe.cfg
    [root@node1 ~]# cat /etc/nagios/nrpe.cfg | grep -v '^#' | grep -v '^$'
    log_facility=daemon
    debug=0
    pid_file=/var/run/nrpe/nrpe.pid
    server_port=5666
    nrpe_user=nrpe
    nrpe_group=nrpe
    allowed_hosts=127.0.0.1,192.168.80.5    # nrpe 서비스로의 접근을 허용할 IP 주소를 지정한다.
    dont_blame_nrpe=1    # nrpe가 모니터링 서비스를 위해 사용할 명령어의 인자 값에 대한 변경을 허용하기 위한 의미, 숫자1로 변경
    allow_bash_command_substitution=0
    command_timeout=60
    connection_timeout=300
    include_dir=/etc/nrpe.d/
    # 아래 다섯 가지 명령어에 #을 추가해 주석 처리하는데, 이는 이 명령어를 사용하지 않는다는 의미로 인자 값을 사용하지 못한다.
    #command[check_users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10
    #command[check_load]=/usr/lib64/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20
    # 아래 네 가지의 명령어들앞에서 주석을 제거하는데, 이 명령어들을 관리자가 그 명령에 대한 인자 값을 상황에 따라 변경 가능
    command[check_users]=/usr/lib64/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
    command[check_load]=/usr/lib64/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
    command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
    command[check_procs]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
     
    # nrpe 서비스를 시작한다
    [root@node1 ~]# systemctl start nrpe
    [root@node1 ~]# systemctl enable nrpe
    Created symlink from /etc/systemd/system/multi-user.target.wants/nrpe.service to /usr/lib/systemd/system/nrpe.service.
    [root@node1 ~]# systemctl status nrpe
    â nrpe.service - Nagios Remote Program Executor
       Loaded: loaded (/usr/lib/systemd/system/nrpe.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2017-10-25 18:07:50 UTC; 8s ago
         Docs: http://www.nagios.org/documentation
     Main PID: 4403 (nrpe)
       CGroup: /system.slice/nrpe.service
               ââ4403 /usr/sbin/nrpe -/etc/nagios/nrpe.cfg -d
     
    # nrpe가 사용하는 포트 5666번, PID, 서비스가 준비돼 있음을 확인할 수 있다.
    [root@node1 ~]# lsof -i tcp:5666
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nrpe    4403 nrpe    4u  IPv4  25124      0t0  TCP *:5666 (LISTEN)
    nrpe    4403 nrpe    5u  IPv6  25125      0t0  TCP *:5666 (LISTEN)
     
    # nrpe가 사용하는 포트와 그 PID를 확인한다. 이 포트 번호는 설정 파일에 정의돼 있으며, 변경이 가능하다.
    [root@node1 ~]# netstat -lantp | grep nrpe
    tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN      4403/nrpe
    tcp6       0      0 :::5666                 :::*                    LISTEN      4403/nrpe
     
    [root@node1 ~]# ps -ef | grep nrpe
    nrpe      4403     1  0 18:07 ?        00:00:00 /usr/sbin/nrpe -/etc/nagios/nrpe.cfg -d
    root      4445  4349  0 18:09 pts/1    00:00:00 grep --color=auto nrpe
    cs


    b. Nagios 서버에서 설정 (master)

    Nagios서버에서 NRPE를 이용해 타켓 호스트 node1를 모니터링하기 위한 설정을 해야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    # yum을 이용해 nrpe 플러그인 패키지 설치
    [root@master ~]# yum install nagios-plugins-nrpe -y
     
    # vim으로 열어서 마지막 라인에 사용할 nrpe 명령어를 추가한다.
    [root@master ~]# vi /etc/nagios/objects/commands.cfg
    # 마지막 줄에 추가
    define command{
            command_name    check_nrpe
            command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
    }
     
    [root@master ~]# vi /etc/nagios/servers/node1.cfg
    # For disk usage
    define service {
            use                     generic-service
            host_name               node1
            service_description     Root Partition
            check_command           check_nrpe!check_disk\!20%\!10%\!/
    }
    -> 디스크 사용량에 대한 nrpe 명령어 : check_disk에서 숫자 20%는 node1의 사용 가능한 디스크 사용량이 20% 이하로 떨어질 경우 
    Warning 메시지를, 그리고 10% 이하로 떨어질 경우 Critical 메시지를 표시하게 된다. 
     
    # For current users
    define service {
            use                     generic-service
            host_name               node1
            service_description     Current Users
            check_command           check_nrpe!check_users\!20\!50
    }
    -> 현재 사용자에 대한 정보를 제공하는 nrpe 명령어 : 현재 사용자 수가 20~49인 경우 Warning 메시지를 표시하고, 50 이상인 경우
    Ciritical 메시지를 표시하라는 의미다.
     
    # For total processes
    define service {
            use                     generic-service
            host_name               node1
            service_description     Total Processes
            check_command           check_nrpe!check_procs\!250\!400\!RSZDT
    }
    -> 전체 프로세스에 대한 정보를 제공하는 nrpe 명령어 : check_procs에서 숫자 250은 프로세스의 개수가 250-399개인 경우 
    Warning 메시지를 표시하고 400개를 초과하면 Ciritical 메시지를 표시하라는 의미다.
     
    # For current load
    define service {
            use                     generic-service
            host_name               node1
            service_description     Current Load
            check_command           check_nrpe!check_load\!5.0,4.0,3.0\!10.0,6.0,4.0
    }
    -> 현재의 CPU 사용량에 대한 정보를 제공하는 nrpe 명령어 : 
    여기서 사용된 숫자들은 5.0,4.0,3.0=가장 최근의 1분,5분,15분 동안의 평균 CPU 사용량이 각각 5.0,4.0.3.0인 경우 Warning 
    메시지로 표시 10.0,6.0.4.0=가장 최근의 1분,5분,15분 동안의 평균 CPU 사용량이 각각 10.0,6.0,4.0인 경우 Ciritical로 표시
     
    # 변경 사항들이 적용되도록 Nagios 서버를 다시 시작한다.
    [root@master ~]# systemctl restart nagios
    cs


    c. 브라우저에서 확인

    1. 브라우저에서 다시 추가한 서비스를 확인하기 위해 왼쪽의 Service 메뉴를 클릭해 확인하면 추가한 Ping 서비스 이외에 4가지의 서비스가 추가됐음을 확인할 수 있다.


    d. 웹 서버 모니터링 추가

    이번에는 앞에서  추가한 네 가지 서비스 이외에 node1에서 운영 중인 웹 서버에 대한 모니터링을 추가한다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # node1에서 웹 서버가 실행되고 있는지 lsof를 사용해 포트 80번을 확인
    [root@node1 ~]# lsof -i tcp:80
    COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    httpd   1000   root    4u  IPv6  17442      0t0  TCP *:http (LISTEN)
    httpd   1403 apache    4u  IPv6  17442      0t0  TCP *:http (LISTEN)
    httpd   1404 apache    4u  IPv6  17442      0t0  TCP *:http (LISTEN)
    httpd   1405 apache    4u  IPv6  17442      0t0  TCP *:http (LISTEN)
    httpd   1406 apache    4u  IPv6  17442      0t0  TCP *:http (LISTEN)
    httpd   1407 apache    4u  IPv6  17442      0t0  TCP *:http (LISTEN)
     
    # check_http 플러그인을 이용해 node1에서 실행되는 웹 서버의 정보를 조회해보면 이 플러그인이 작동하는지 확인할 수 있다.
    [root@node1 ~]# /usr/lib64/nagios/plugins/check_http -H localhost
    HTTP OK: HTTP/1.1 200 OK - 467 bytes in 0.007 second response time |time=0.007374s;;;0.000000 size=467B;;;0
    [root@node1 ~]# echo $?
    0
     
    # Nagios 서버에서 타켓 호스트 node1에 대한 정의 파일을 열어서 웹 서버에 대한 서비스를 추가한다.
    [root@master ~]# vi /etc/nagios/servers/node1.cfg
    # For current http
    define service {
            use                     generic-service
            host_name               node1
            service_description     Apache Webserer Status
            check_command           check_http
    }
     
    # 사용 가능한 명령어가 정의된 command.cfg파일에서 확인이 돼야 한다.
    [root@master ~]# vi /etc/nagios/objects/commands.cfg
    # 'check_http' command definition
    define command{
            command_name    check_http
            command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
    }
     
    [root@master ~]# systemctl restart nagios
    cs

    1. 브라우저에서 확인하기




    3. pnp4nagios 이용


    pnp4nagios는 Nagios 플러그인이 제공하는 데이터를 분석하고 그 결과를 RRD 데이터베이스에 자동으로 저장해 성능에 대한 데이터를 Nagios 서버에 제공하는 Nagios 성능 분석 프로그램이다. pnp4nagios가 사용하는 RRD 데이터베이스는 Nagios 서버가 제공하는 타켓 서버 호스트 및 서비스에 대한 성능과 가용성 정보를 그래프를 통해 제공한다. 또한 이러한 정보를 PDF 파일을 통해 리포트로 제공할 수 있고, 가용성에 대한 정보를 시간대별(일별,주간,월별,연별)로 분류해 제공한다. Nagios 서버에 대한 자세한 정보와 통계를 이용해 성능을 좀 더 정확하게 분석하기 원하는 관리자에게 도움을 줄 수 있느 유용한 프로그램이다.


    3.1 pnp4nagios 사용

    a. 설치와 서비스 시작

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    # 이 프로그램이 사용하는 데이터베이스 RRD를 지원하는 rrdtool 패키지를 의존성 패키지와 함께 설치한다.
    # 참고로 RRD(Round Robin Database)는 시간대별 데이터를 저장하고 정보를 보여주기 위한 목적으로 사용되는 프로그램이다.
    [root@master ~]# yum install rrdtool perl-Time-HiRes rrdtool-perl php-gd -y
     
    # 최신 소스 파일을 명령어 wget으로 다운로드한다. 여기서는 소스코드 설치를 진행
    [root@master ~]# wget https://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.26.tar.gz
     
    # 소스 파일의 압출을 해제한다.
    [root@master ~]# tar xvzf pnp4nagios-0.6.26.tar.gz
     
    # 스크립트 configure를 실행하면 이 스크립트에 정의된 명령어가 실행된다.
    [root@master pnp4nagios-0.6.26]# ./configure
     
    # make를 이용해 Makefile에 정의된 타켓을 컴파일하고 설치한다. 아래 명령으로 필요한 설정 파일과 바이너리 파일이 생성한다.
    [root@master pnp4nagios-0.6.26]# make all; make fullinstall;
     
    # pnp4nagios가 웹 서버에서 사용할 파일을 열어서 인증에 사용할 파일이 있는 경로를 수정한다. 이 파일은 기본적으로 Nagios 
    # 서버에서 생성한 인증 파일을 동일하게 사용한다. 또는 명령어 htpasswd를 사용해 새롭게 생성할 수 있다.
    [root@master pnp4nagios-0.6.26]# vim /etc/httpd/conf.d/pnp4nagios.conf
    14        AuthUserFile /etc/nagios/passwd
     
    # pnp4nagios가 사용할 데몬을 시작한다. npcd는 systemctl이 사용하는 파일을 제공하지 않고, /etc/rc.d/init.d/npcd 
    # 파일이라는 스크립트를 저장되기 때문에 명령어 service를 사용해야 한다.
    [root@master pnp4nagios-0.6.26]# service npcd start
    [root@master pnp4nagios-0.6.26]# systemctl enable npcd
    npcd.service is not a native service, redirecting to /sbin/chkconfig.
    Executing /sbin/chkconfig npcd on
     
    # npcd 데몬의 상태를 확인하는데, acvtive와 이 데몬이 시작됐다는 메시지를 볼 수 있다.
    [root@master pnp4nagios-0.6.26]# systemctl status npcd
    â npcd.service - LSB: pnp4nagios NPCD Daemon Version 0.6.26
       Loaded: loaded (/etc/rc.d/init.d/npcd; bad; vendor preset: disabled)
       Active: active (running) since Sun 2017-10-29 14:59:03 UTC; 53s ago
         Docs: man:systemd-sysv-generator(8)
       CGroup: /system.slice/npcd.service
               ââ8272 /usr/local/pnp4nagios/bin/npcd --/usr/local/pnp4nagios/etc/npcd.cfg
    Oct 29 14:59:03 master.chul.com systemd[1]: Starting LSB: pnp4nagios NPCD Daemon Version 0.6.26...
    Oct 29 14:59:03 master.chul.com npcd[8265]: Starting npcd: done.
    Oct 29 14:59:03 master.chul.com systemd[1]: Started LSB: pnp4nagios NPCD Daemon Version 0.6.26.
    Oct 29 14:59:03 master.chul.com NPCD[8272]: npcd Daemon (0.6.26) started with PID=8272
    Oct 29 14:59:03 master.chul.com NPCD[8272]: Please have a look at 'npcd -V' to get license information
    Oct 29 14:59:03 master.chul.com NPCD[8272]: HINT: load_threshold is disabled - ('0.000000')
     
    # ps를 통해 프로세스도 확인할 수 있다. pnp4nagios 패키지가 설치되고 데몬이 성공적으로 시작됐다.
    [root@master pnp4nagios-0.6.26]# ps -ef | grep npcd
    nagios    8360     1  0 15:00 ?        00:00:00 /usr/local/pnp4nagios/bin/npcd --/usr/local/pnp4nagios/etc/npcd.cfg
    cs


    b. 초기 화면 접속

    초기 화면으로 접속하기 위해 브라우저에서 IP 주소와 디렉토리 이름 pnp4nagios를 입력하면 다음과 같은 환경 테스트 내용을 볼 수 있다.


    초기 화면 마지막에 보면 설치 목록으로 사용된 install.php 파일을 변경하라는 메시지가 보이는데, 다음처럼 변경하자. 설치가 완료되면 더 이상 이 파일이 필요하지 않기 때문이다. 

    1
    2
    [root@master nagios]# cd /usr/local/pnp4nagios/share/
    [root@master share]# mv install.php install.php.ori
    cs


    3.2 Nagios 파일 수정

    Nagios에서 pnp4nagios를 통합하기 위한 설정이 필요한데, 크게 세 가지의 파일을 수정해줘야 한다. 그리고 파일 수정을 모두 마치면 다시 Nagios 서버를 시작해줘야 한다.

    a. nagios.cfg 파일 수정

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    [root@master share]# vi /etc/nagios/nagios.cfg
    # Nagios 서버와 플러그인이 제공하는 호스트와 서비스의 성능 데이터에 대한 점검 기능을 수행할지 결정한다.
    # 이러한 성능 데이터에 대한 점검은 일반적으로 commands.cfg파일에 정의된 명령어를 사용하고, 결과를 파일에 저정한다.
     810 # Values: 1 = process performance data, 0 = do not process performance data
     812 process_performance_data=1
    # 호스트의 성능 데이터를 저장할 파일을 지정한다.
     834 host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
    # 각 호스트가 제공하는 서비스의 성능 데이터를 저장할 파일을 지정한다.
     835 service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
    # 호스트 성능 데이터 파일에 어떤 데이터들이 저장될지를 결정하는 템플릿이다.
     847 host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\t
    HOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
    # 각 서비스 성능 데이터에 어떤 데이터들이 저장될지를 결정하는 템플릿이다.
     848 service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDES
    C$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYP E::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
    # 호스트의 성능 데이터를 파일에 첨부할지 결정하는 모드이다.
     859 host_perfdata_file_mode=a
    # 서비스의 성능 데이터를 파일에 첨부할지 결정하는 모드이다.
     860 service_perfdata_file_mode=a
    # 호스트의 성능 데이터 파일에 대한 진행을 "880 라인"에 정의된 명령어를 사용해 얼마나 자주 실행할지 결정하며, 단위는 초다.
     870 host_perfdata_file_processing_interval=15
     880 host_perfdata_file_processing_command=process-host-perfdata-file
    # 서비스의 성능 데이터 파일에 대한 진행을 "881 라인"에 정의된 명령어를 사용해 얼마나 자주 실행할지 결정하며, 단위는 초다.
     871 service_perfdata_file_processing_interval=15
     881 service_perfdata_file_processing_command=process-service-perfdata-file
     
    # Nagios 설정 파일 수정 후에 문법을 검사한다.
    [root@master share]# nagios -v /etc/nagios/nagios.cfg
    cs


    b. commands.cfg 파일 수정

    위에서 정의한 명령어를 아래에서 생성해줘야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@master share]# vi /etc/nagios/objects/commands.cfg
    # Bulk with NPCD mode

    # A절의 "882 라인"에서 정의된 명령어를 여기에 생성해줘야 Nagios가 명령어를 인식하고 실행할 수 있다. service-perfdata 파일이 
    # service_perfdata_file_processing_interval에 정의된 시간이 지나서 파일명에 현재의 타임스탬프 정보를 포함하는 Nagios 매크로 $TIMES를 
    # 추가해 spool 디렉토리에 저장한다. 이 매크로는 새로 저장되는 파일이 이전 파일들을 덮어쓰지 않게 하기 위해 파일에 추가되는 것이다.
    define command{
            command_name    process-service-perfdata-file
            command_line    /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
            }
     
    # 위와 동일하며, 서비스가 아닌 호스트에만 적용된다.
    define command{
            command_name    process-host-perfdata-file
            command_line    /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
            }
    cs


    c. templates.cfg 파일 수정하기

    템플릿 파일을 수정하고 서비스를 다시 시작해주면 모든 설정을 마치게 된다. 두 가지의 템플릿을 생성한 후 기존 템플릿에 추가하면 기존 템플릿을 사용하는 타켓 호스트에 적용된다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    [root@master share]# vi /etc/nagios/objects/templates.cfg
    # 새로 정의한 호스트 이름을 기존 linux-server에 추가한다. 이렇게 하면 'host-pnp'로 정의한 액션이 linux-server를 사용하는 모든 호스트에 적용
    # 현재 localhost와 node1이 사용하고 있고, 이 액션은 Nagios 서버 화면에서 호스트를 클릭하면 새로운 페이지가 열리면서 
    # 호스트와 그 호스트가 사용하는 서비스에 대한 정보를 pnp4nagios가 제공한다는 의미다. 
    67 define host{
            name                            linux-server    
            use                             generic-host,host-pnp 
    # 'srv-pnp'로 정의한 이름을 기존 generic-service에 추가한다. 이렇게 하면 "208 line"에 정의된 액션이 generic-service를 사용하는 호스트에 적용
    161 define service{
    162         name                        generic-service
    163         use                         srv-pnp
    # pnp4nagios가 사용할 호스트 이름을 정의하고 액션을 지정한다. 액션에 대한 설명은 "67 line"과 같다.   
    201 define host{
    202         name            host-pnp
    203         action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?h
        ost=$HOSTNAME$&srv=_HOST_
    204         register        0
    205 }
    # pnp4nagios가 사용할 서비스 이름을 정의하고 액션을 지정한다. 액션에 대한 설명은 "67 line"과 같다.
    207 define service{
    208         name            srv-pnp
    209         action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/index.php
        /popup?host=$HOSTNAME$&srv= $SERVICEDESC$
    210         register        0
    211 }
     
    # 옵션으로 팝업 스크립트 Nagios 서버 디렉토리에 복사한다.
    [root@master ~]# cp pnp4nagios-0.6.26/contrib/ssi/status-header.ssi /usr/share/nagios/html/ssi
     
    # pnp4nagios 데몬 npcd를 다시 시작해 변경 사항들이 적용되도록 한다.
    [root@master share]# service npcd restart
    Restarting npcd (via systemctl):                           [  OK  ]
     
    # Nagios 서버와 웹 서버 서버 데몬도 다시 시작해 변경된 사항들이 적용되도록 한다.
    [root@master share]# systemctl restart nagios httpd
    cs


    d. pnp4nagios 사용

    1. Nagios 접속하기

    브라우저에서 Nagios 서비스로 접속하면 호스트와 각 서비스 앞에 그래프처럼 생긴 pnp4nagios를 확인할 수 있다.

    2. localhost 정보 확인하기

    호스트 정보를 확인하기 위해 로컬 호스트 옆에 위치한 pnp4nagios를 클릭하면 localhost에서 실행 중인 서비스들에 대한 정보를 그래프로 편리하게 확인할 수 있다.



    참고 URL :

    https://m.blog.naver.com/PostView.nhn?blogId=sung487&logNo=220332773897&categoryNo=0&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F#

    'Linux > CentOS' 카테고리의 다른 글

    [CentOS 7] 스토리지 서버의 다중화 (DRBD로 미러링 구성)  (0) 2018.03.06
    [CentOS 7] NFS 서버  (0) 2017.12.02
    [CentOS 7] Apache 웹 서버 " 2 "  (2) 2017.10.26
    네트워크  (0) 2017.09.12
    [CentOS 7] Apache 웹 서버 " 1 "  (0) 2017.09.11

    댓글

작은거인's Blog / Designed by TISTORY