시스템/네트워크 모니터링 툴인 nagios (발음: 나기오스)를 소스 설치해보자. (CentOS 기준)
소스 설치로 깔끔하게 정리된 글이 없어서 약간의 개고생을 했음.
다른 사람은 개고생 덜하길 바라며.. 아니면 RPM설치를 권고함.
Nagios (시스템/네트워크 모니터링 툴) 설치
의존성 패키지 설치
# yum install -y wget gcc glibc glibc-common gd gd-devel make xinetd net-snmp zlib-devel libxml2-devel freetype-devel
httpd가 패키지로 설치되어있으면 삭제하자
# rpm -qa | grep httpd
httpd-2.2.3-65.el5.centos.3
설치된 게 있으면 삭제 (안해도 됨)
# rpm -e --nodeps httpd-2.2.3-65.el5.centos.3
혹은
# yum remove httpd-2.2.3-65.el5.centos.3
아파치 설치전에 apr(apache portable runtime)와 arp-util을 설치한다.
# cd /usr/local/src
# wget http://apache.tt.co.kr//apr/apr-1.4.6.tar.gz
# wget http://apache.mirror.cdnetworks.com//apr/apr-util-1.5.1.tar.gz
# tar zxvf apr-1.4.6.tar.gz
# tar zxvf apr-util-1.5.1.tar.gz
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr
# make && make install
# cd ../apr-util-1.5.1
# ./configure --with-apr=/usr/local/apr
# make && make install
아파치 설치시 아래와 같은 에러가 날 경우가 있다.
configure: error: pcre-config for libpcre not found.PCRE is required and available from http://pcre.org/
PCRE(Perl Compatible Regular Expressions)도 그냥 설치하자.
# cd /usr/local/src
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
# tar zxvf pcre-8.32.tar.gz
# cd pcre-8.32
# ./configure
# make && make install
이제 아파치 웹서버를 다운받고 설치하자
# cd /usr/local/src
# wget http://ftp.apache-kr.org/httpd/httpd-2.4.3.tar.gz
# tar zxvf httpd-2.4.3.tar.gz
# cp -Rf httpd-2.4.3 /usr/local/apache2
# cd ../apache2
# ./configure --prefix=/usr/local/apache2 --enable-module=so --enable-mods-shared-all --enable-so --enable-rewrite --enable-sll
# make && make install
# vi /etc/ld.so.conf
/usr/local/apache2/lib
/usr/local/apache2/modules
# ldconfig
아파치에 nagios 관련한 설정을 먼저 하자.
(추가적으로 nagios를 위한 웹서비스 포트는 기본 80이 아니라 8082번으로 변경하자.)
# vi conf/httpd.conf
# Listen 80
Listen 8082
# add nagios
ScriptAlias /nagios/cgi-bin/ “/usr/local/nagios/sbin/”
<Directory "/usr/local/nagios/sbin">
AllowOverride AuthConfig
Options ExecCGI
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
require valid-user
Order allow,deny
Allow from all
</Directory>
Alias /nagios/ “/usr/local/nagios/share/”
<Directory "/usr/local/nagios/share">
Options None
AllowOverride AuthConfig
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
require valid-user
Order allow,deny
Allow from all
</Directory>
아파치를 서비스로 등록하자
# cp ./bin/apachectl /etc/init.d/httpd
# vi /etc/init.d/httpd
#!/bin/sh
#
# 아래 부분 추가
# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processnmae: /usr/local/apache2/bin/apachectl
# config: /usr/local/apache2/conf/httpd.conf
# pidfile: /usr/local/apache2/logs/httpd.pid
#
# Licensed to the Apache Software Foundation (ASF) under one or more
httpd를 서비스에 등록
# chkconfig --add httpd
httpd가 서비스에 등록되었는지 확인
# chkconfig --list | grep httpd
아파치 실행은
# /etc/init.d/httpd start
아파치 중지는
# /etc/init.d/httpd stop
다음은 php 설치를 한다.
# /usr/local/src
# wget http://kr1.php.net/get/php-5.4.9.tar.gz/from/this/mirror
# tar zxvf php-5.4.9.tar.gz
# cp -Rf php-5.4.9 /usr/local/php
# cd ../php
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --enable-sigchild
# make && make install
# cp php.ini-production /usr/local/apache2/conf/php.ini
아파치에 php설정을 한다
# cd /usr/local/apache2
# vi conf/httpd.conf
LoadModule cgid_module modules/mod_cgid.so
LoadModule php5_module modules/libphp5.so
# php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
다음으로 nagios를 설치한다.
데이터와 로그를 위한 폴더를 만들고
# mkdir -p /data/nagios
# mkdir -p /log/nagios
우선 nagios를 위한 사용자와 그룹을 추가
# useradd nagios
# groupadd nagcmd
# usermod -a -G nagcmd nagios
# usermod -a -G nagcmd apache
# groupadd nagios
# usermod –a -G nagios nagios
다음으로 nagios core와 plugin을 다운로드 받아서 압축을 푼다
# cd /usr/local/src
# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.3.tar.gz
# wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.16.tar.gz
# tar zxvf nagios-3.4.3.tar.gz
# tar zxvf nagios-plugins-1.4.16.tar.gz
# cp -Rf nagios /usr/local/nagios
# cp -Rf nagios-plugins-1.4.16 /usr/local/nagios-plugins
nagios core 부터 설치하자
# cd ../nagios
# ./configure --prefix=/usr/local/nagios --with-command-group=nagcmd
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
# make install-webconf
# cp -R contrib/eventhandlers/ libexec/
# chown -R nagios:nagios libexec/eventhandlers
# chown nagios.nagcmd /usr/local/nagios/var/rw –
# chmod u+rwx /usr/local/nagios/var/rw
# chmod g+s /usr/local/nagios/var/rw
# chmod o-rwx /usr/local/nagios/var/rw
아래처럼 /usr/local/nagios/var 에 other 사용자는 권한이 없으면 된다.
# ll /usr/local/nagios/var
drwxrws--- 2 nagios nagcmd 4096 12?? 5 11:54 rw
NAGIOS_HOME와 APACHE2_HOME 셋팅
# vi /etc/profile
APACHE_HOME=/usr/local/apache2
export APACHE_HOME
NAGIOS_HOME=/usr/local/nagios
export NAGIOS_HOME
PATH=$PATH:$APACHE_HOME/bin:$NAGIOS_HOME/sbin
export PATH
# source /etc/profile
설정파일은 nagios의 etc 폴더 아래에 위치한다.
etc/cgi.cfg
etc/nagios.cfg
etc/resource.cfg
etc/objects/commands.cfg
etc/objects/contacts.cfg
etc/objects/localhost.cfg
etc/objects/printer.cfg
etc/objects/switch.cfg
etc/objects/templates.cfg
etc/objects/timeperiods.cfg
etc/objects/windows.cfg
필요한 설정파일만 수정해서 사용하면 된다.
# vi etc/nagios.cfg
# log_file=/usr/local/nagios/var/nagios.log
log_file=/log/nagios/nagios.log
담당자 이메일 정보 수정
# vi etc/objects/contacts.cfg
email misoin@hanmail.net
이제, 플러그인을 설치하자.
# cd ../nagios-plugins
# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
# make && make install
nagios에 대한 아파치 인증을 설정
# cd /usr/local/apache2
# ./bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password: abcd
Re-type new password: abcd
Adding password for user nagiosadmin
nagios.cfg 검증은 아래와 같다. 설정 수정 후 검증 해볼 것!
# nagios -v /usr/local/nagios/etc/nagios.cfg
.
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
문제없이 검증이 되었다면, 서비스에 등록하고 실행
# /etc/init.d/nagios start
Starting nagios: done.
아파치를 다시 재시작해보자
# /etc/init.d/httpd stop
# /etc/init.d/httpd start
이제 브라우저 창에서 http://192.168.0.207:8082/nagios 를 하자.
로그인 창이 나오고, 위에서 설정한 nagiosadmin / abcd 으로 로그인하면
Nagios 화면이 나올것이다.
Nagios 원격서버 모니터링 (NRPE)
이렇게까지만 하면, localhost.cfg 설정에 따라 기본적으로 localhost만 모니터링이 가능하다.
nrpe를 이용해서 다른 클라이언트도 모니터링해보자.
nagios 클라이언트는 nrpe를 이용해서 nagios 서버의 접근을 허용하고,
nagios 클라이언트와 nagios 서버가 서로 통신하여 nagios 클라이언트의 서버 상태를 모니터링하게 된다.
우선, nagios 서버 역할을 하는 곳에 nrpe를 설치하자.
# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
# tar zxvf nrpe-2.13.tar.gz
# cp -Rf nrpe-2.13 /usr/local/nrpe
다음은 nrpe 설치
# cd ../nrpe/
# ./configure --prefix=/usr/local/nagios
# make && make all
# cp ./src/check_nrpe /usr/local/nagios/libexec/
# cp ./src/nrpe /usr/local/nagios/bin
# cp sample-config/nrpe.cfg /usr/local/nagios/etc/
# cd /usr/local/nagios
# vi etc/nrpe.cfg
nrpe 명령어 추가
# vi etc/objects/commands.cfg
# 'check-nrpe' command definition
define command{
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
이제 nagios 클라이언트들의 정보를 nagios 서버에 설정할 차례이다.
우리는 총 7대의 서버를 모니터링할 것이다. (본인꺼 포함)
proxy1 (192.168.0.201)
was1 (192.168.0.202)
was2 (192.168.0.203)
storage1 (192.168.0.204)
storage2 (192.168.0.205)
maindb (192.168.0.206)
=========================
localhost (192.168.0.207)
위의 6개 nagios 클라이언트를 설정하자.
localhost.cfg를 복사해서 몇가지 값만 바꿔주면 된다. (host_name, alias, address 이런 부분만 찾아서 수정해줌)
# mkdir –p etc/objects/clients
# cp etc/objects/localhost.cfg etc/objects/clients/proxy1.cfg
# vi etc/objects/clients/proxy1.cfg
# host_name, alias, address 이런 부분만 찾아서 수정해주자
# proxy1의 경우 host_name은 proxy1, alias는 proxy1, address는 192.168.0.201)
이렇게 6개를 만든다. (proxy1.cfg, was1.cfg, was2.cfg, storage1.cfg, storage2.cfg, maindb.cfg)
설정파일 내에는 hostgroup 정의하는 부분이 있는데.
서버들 중에 서로 관련있는 것들끼리 그룹으로 묶으면 보기에 좋아진다.
예를 들어, was1, was2는 같은 그룹으로 묶어서 정의하면 되겠다. (was1.cfg, was2.cfg 에서)
###############################################################################
###############################################################################
#
# HOST GROUP DEFINITION
#
###############################################################################
###############################################################################
# Define an optional hostgroup for Linux machines
define hostgroup{
hostgroup_name linux-was-servers ; The name of the hostgroup
alias Linux WAS Servers ; Long name of the group
members was1, was2 ; Comma separated list of hosts that belong to this group
}
다음으로, 생성한 클라이언트 cfg 파일을 nagios.cfg에 등록
# vi etc/nagios.cfg
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
# Definition for monitoring the remote (Linux) host
cfg_file=/usr/local/nagios/etc/objects/clients/proxy1.cfg
cfg_file=/usr/local/nagios/etc/objects/clients/was1.cfg
cfg_file=/usr/local/nagios/etc/objects/clients/was2.cfg
cfg_file=/usr/local/nagios/etc/objects/clients/storage1.cfg
cfg_file=/usr/local/nagios/etc/objects/clients/storage2.cfg
cfg_file=/usr/local/nagios/etc/objects/clients/maindb.cfg
설정파일을 검증해보고
# nagios -v /usr/local/nagios/etc/nagios.cfg
이상이 없으면 nagios를 재시작
# /etc/init.d/nagios restart
이제는 nagios 클라이언트를 할 차례이다.
nagios 클라이언트에는 core는 필요없고, nagios plugin과 nrpe를 설치해주면 된다.
의존성 패키지 설치
# yum install -y wget gcc glibc glibc-common gd gd-devel make net-snmp zlib-devel
우선 nagios를 위한 사용자와 그룹을 추가
# useradd nagios
# groupadd nagcmd
# usermod -a -G nagcmd nagios
# groupadd nagios
# usermod –a -G nagios nagios
NAGIOS_HOME와 APACHE2_HOME 셋팅
# vi /etc/profile
NAGIOS_HOME=/usr/local/nagios
export NAGIOS_HOME
PATH=$PATH:$NAGIOS_HOME/sbin
export PATH
# source /etc/profile
nrpe 포드 개방 (5666)
# iptables -I INPUT -m tcp -p tcp --dport 5666 -j ACCEPT
nagios plugin과 nrpe를 다운로드
# mkdir –p /usr/local/nagios
# cd /usr/local/src
# wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.16.tar.gz
# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
# tar zxvf nagios-plugins-1.4.16.tar.gz
# tar zxvf nrpe-2.13.tar.gz
# cp -Rf nagios-plugins-1.4.16 /usr/local/nagios-plugins
# cp -Rf nrpe-2.13 /usr/local/nrpe
플러그인 설치
# cd ../nagios-plugins
# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
# make && make install
다음은 nrpe 설치
# cd /usr/local/nrpe/
# ./configure --prefix=/usr/local/nagios
# make && make all
# mkdir –p /usr/local/nagios/etc
# mkdir -p /usr/local/nagios/bin
# cp ./src/check_nrpe /usr/local/nagios/libexec/
# cp ./src/nrpe /usr/local/nagios/bin
# cp sample-config/nrpe.cfg /usr/local/nagios/etc/
# cd /usr/local/nagios
# chown -R nagios:nagios bin
# chown -R nagios:nagios etc
# chown -R nagios:nagios libexec
# chown -R nagios:nagios share
# vi etc/nrpe.cfg
# allowed_hosts=127.0.0.1
allowed_hosts=192.168.0.207
nrpe를 서비스로 등록하자 (xinetd를 이용함)
# chkconfig --level 2345 xinetd on
# cd /etc/xinetd.d
# vi nrpe
service nrpe
{
flags = REUSE
type = UNLISTED
port = 5666
socket_type = stream
wait = no
user = nagios
group = nagios
server = /usr/local/nagios/bin/nrpe
server_args = -c /usr/local/nagios/etc/nrpe.cfg --inetd
log_on_failure += USERID
disable = NO
only_from = 192.168.0.207
}
위에서 only_from를 설정하지 않으면 아무 서버나 접근 가능
# vi /etc/services
nrpe 5666/tcp # nagios NRPE
xinetd를 재구동하자.
# /etc/init.d/xinetd restart
nrpe 구동확인
# netstat -nap |grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 3015/xinetd
다시, nagios 서버로 돌아와서, 클라이언트로 테스트를 해보자
# cd /usr/local/nagios
# ./libexec/check_nrpe -H 192.168.0.201 -c check_load
OK - load average: 0.00, 0.00, 0.00|load1=0.000;15.000;30.000;0; load5=0.000;10.000;25.000;0; load15=0.000;5.000;20.000;0;
성공적으로 결과가 나온다면, 다시 브라우저에서 http://192.168.0.207:8082/nagios 를 해보자
왼쪽 메뉴에서 Map을 클릭하면 nagios 클라이언트가 하나 더 추가되었을 것이다.
많은 서버를 한번에 관리하기 좋은 툴이라고 하겠다..