2007年11月13日

 

Nagios自身是不带任何功能的,要实现监控功能,我们必须安装插件(plugins),幸好,现在只要安装一个通用的plugin,就能实现大部分的

监控功能。
以下是安装plugin的步骤,一般在正常安装的时候都已经装上了。
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.7.tar.gz
cd ~/downloads
tar xzf nagios-plugins-1.4.7.tar.gz
cd nagios-plugins-1.4.7
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install

这时候在/usr/local/nagios/下就会出现一个libexec文件夹,有很多自带的功能程序。我们自定义的功能,也可以放在这个文件夹下面。
较常用的有chekc_http,check_disk,等等,如果我们想了解其用法,可以用./check_http -h的命令。
这一次我要实现的功能,是监控某个进程是否还存在,如果不存在了,就执行某个shell,使之启动。在此处,要用到check_procs和

eventhandler,与eventhandler例子中的检查apache的状态略有不同,故记录下来,与有需要的朋友分享。

首先,因为check_procs要去检查进程,所以我们要给他root的权限。
chown root check_procs
chmod 555 check_procs
接下来运行:
./check_procs
(应该显示为: PROCS OK: XX processes)
我用ps aux|grep cypress,查找我想监控的进程,里面带有/usr/local/cypressTemp/javasdk/bin/java

再用./check_procs -h查看check_procs的用法。以下是几个sampler。
Examples:
 check_procs -w 2:2 -c 2:1024 -C portsentry
  Warning if not two processes with command name portsentry.
  Critical if < 2 or > 1024 processes

 check_procs -w 10 -a ‘/usr/local/bin/perl’ -u root
  Warning alert if > 10 processes with command arguments containing
  ‘/usr/local/bin/perl’ and owned by root

 check_procs -w 50000 -c 100000 –metric=VSZ
  Alert if vsz of any processes over 50K or 100K

 check_procs -w 10 -c 20 –metric=CPU
  Alert if cpu of any processes over 10%% or 20%%

根据以上的sampler,我就能写出service和command了。
define service{
        host_name               localhost
        service_description     check-cypress
        check_command           check_cypress
        event_handler       restart-cypress
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        check_period            24×7
       }
define command{
        command_name    check_cypress
        command_line    $USER1$/check_procs -c 1:1 -a ‘/usr/local/cypressTemp/javasdk/bin/java’
        }
check_procs -c 1:1 -a ‘/usr/local/cypressTemp/javasdk/bin/java’的意思为:如果进程中没有一条包

含’/usr/local/cypressTemp/javasdk/bin/java’,则状态为critical(c)。
因为我们还需要对这个做出动作,所以要用到eventhandler。
define command{
    command_name    restart-cypress
    command_line    /usr/local/nagios/libexec/eventhandlers/restart-cypress  $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
    }
然后去/usr/local/nagios/libexec/eventhandlers/ 编辑restart-cypress 文件,如下:

#!/bin/sh
#
# Event handler script for restarting the cypress server on the local machine
#
#

# What state is the search service in?
/usr/bin/printf "We enter" >> /usr/local/nagios/var/Cypress.log
yourdate=`date   +%Y%m%d%H%M%S`
case "$1" in
OK)
         
    # The service just came back up, so don’t do anything…
    /usr/bin/printf "check OK $yourdate \n" >> /usr/local/nagios/var/Cypress.log
    ;;  
CRITICAL)
    # Aha!  The cypress service appears to have a problem – perhaps we should restart the server…
    /usr/bin/printf " The cypress service appears to have a problem $yourdate \n " >> /usr/local/nagios/var/Cypress.log
    /usr/local/cypressTemp/runsearch.sh
    ;;
esac
exit 0

以上的shell文件很简单,就是运行一个已经写好的shell脚本。这个例子很简单,如果学习过www.nagios.org上的eventhandler例子后,会非

常容易理解,我把完整的过程写出来,只是想提供一个实际的例子给各位朋友参考。

 

 

2007年11月08日

所有的安装配置里面,都说将cgi.cfg的use_authentication=0,据说这样能够访问全部的页面。事实上,这是一个偷懒的做法,而且在以后必将会更正。

我们会在web页面对一些设置进行更改,在nagios的机制中,都会通过nagios.cmd。而use_authentication=0,会disable external_command_file的使用,于是,所有更改都会提示authentication错误。

正确的做法,首先,将cgi.cfg的use_authentication=1,然后我们授权用户的权限。
authorized_for_system_information=*
authorized_for_configuration_information=*
authorized_for_system_commands=siemsen
authorized_for_all_services=*
authorized_for_all_hosts=*
authorized_for_all_service_commands=*
authorized_for_all_host_commands=*
*代表所有用户,也可以用逗号形式将用户逐一添入(推荐这种方法)。例如:
authorized_for_system_information=nagios,nagiosadmin,www-data,apacheuser

接着,要改变nagios.cmd所在目录/usr/local/nagios/var/rw的权限,命令如下。
chown nagios.nagiocmd /usr/local/nagios/var/rw
chmod u+rwx /usr/local/nagios/var/rw
chmod g+rwx /usr/local/nagios/var/rw
chmod g+s /usr/local/nagios/var/rw
最后重起nagios:
/etc/init.d/nagios restart
再去更新设置,就能成功了!

2007年11月06日

这个问题碰到的人应该不少,我在中文内容查找了一下,提问的人不少,但是几乎没有解决的。虽然还

是有点疑惑,至少,我现在配置的status map可以访问了,把我的经历写出来,和大家分享一下。

首先,可以进入/usr/local/nagios/sbin,
# ldd statusmap.cgi
在我这里显示的结果是,libgd.so.2 => not found
只要把这些notfound的文件补上了,就可以了。
google libgd.so.2,找到这个rpm的下载。
wget ftp://rpmfind.net/linux/sourceforge/l/lu/lua-gd/gd-2.0.33-1aei.i386.rpm
获取这个包,然后进行安装。
在ubuntu linux下,安装rpm可以采用以下方式。
sudo apt-get install alien
转换一个rpm包为deb
alien -d package-name.rpm

转换一个rpm包为deb并安装生成的包
alien -i package-name.rpm

完成之后,我以为可以访问了,但还是出错,再运行ldd statusmap.cgi,发现多了几个not found。
libXpm.so.4 => not found
libX11.so.6 => not found
libfontconfig.so.1 => not found

我又去google,找到下载。
wget http://down1.chinaunix.net/distfiles/libXpm-3.5.5.tar.bz2
tar xvjf libXpm-3.5.5.tar.bz2
./configure –prefix=/usr/local/libxml
make
make install

在别人的机器上是可以运行的,但是在我的服务器上,出现pkgconfig的错误,读了很多国外的论坛讨论,试了很多种方法,还是不能解决,难道这是不可解的?

无意之中,我找到了一个地址,http://packages.ubuntu.com/feisty/x11/x11-common
原来ubuntu已经有一个最新的package发布地址,任何package都能找到,而且是deb文件,安装方便。
所有的依赖关系也一目了然。(老手可别讥笑我,除了用vi编辑php文件,我几乎没用过linux)
在安装了几个deb之后,ldd statusmap.cgi已经不再有找不到的文件了。于是,我再次去访问status map,果然可以访问了!

2007年11月05日

今天因为工作的需要,实践了nagios的安装,感觉国内有不少中文的版本,虽然比较有用,但是有不准确的地方,而且有些细节也没有解释清楚。我就按照个人体会,结合nagios.org上的英文安装说明(以ubuntu为例)和一些中文的安装说明,再捋一遍,记录下来,可能对有些新上手的朋友有所帮助。

http://nagios.sourceforge.net/docs/3_0/quickstart-ubuntu.html
以上是官方的文档,非常简明,清晰。
一)
第一部分关于创建用户,是容易被人忽略的,但是很重要,如果这里没有配置好,在最后看web端的时候就会出问题。
Create a new nagcmd group for allowing external commands to be submitted through the web interface. Add both the nagios user and the apache user to the group.

/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -G nagcmd nagios
/usr/sbin/usermod -G nagcmd www-data(这里是apache user,未必是这个,可以去apache目录察看)
二)
接着是下载必要的安装包。
wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0b6.tar.gz
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.7.tar.gz
获得图库文件:
http://dl.sf.net/nagios/imagepak-base.tar.gz

Compile and Install Nagios到处有文章,不用赘述。
三)
和apache的结合,让我费了一番功夫。

我这台服务器上只有lighttpd,没有apache。nagios看起来是支持lighttpd的,但是有些配置非常复杂,或者说,还没有可用的文档,所以虽然看起来能访问http://yourIP/nagios/,我也不建议使用lighttpd。
我还是安装了apache,更改了端口。
官方说明的make install-webconf,因为目录不同,没法使用。其实他做的事情就是将以下的配置文件写入httpd.conf。所以如果您也不能运行,可以手动配置。

在apache的配置文件httpd.conf中追加 (注意,要有image这段,不然nagios不能显示图片,这三段顺序好象不能变,不然启动nagios的时候会提示错误)
Alias /nagios/cgi-bin/images/ "/usr/local/nagios/share/images/"
<Directory "/usr/local/nagios/share/images/">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /usr/local/nagios/etc/.htpasswd #—–此处的文件一定要存在,以用户名/密码方式存在
    Require valid-user
</Directory>
ScriptAlias /nagios/cgi-bin/ "/usr/local/nagios/sbin/"
<Directory "/usr/local/nagios/sbin/">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /usr/local/nagios/etc/.htpasswd  #—–此处的文件一定要存在,以用户名/密码方式存在
    Require valid-user
</Directory>
Alias /nagios/ "/usr/local/nagios/share/"
<Directory "/usr/local/nagios/share/">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /usr/local/nagios/etc/.htpasswd  #—–此处的文件一定要存在,以用户名/密码方式存在
    Require valid-user
</Directory>
设置访问权限
在/usr/local/nagios/share目录下
[]#/usr/local/www/bin/htpasswd –c /usr/local/nagios/etc/.htpasswd nagios
这个apache目录根据安装目录的不同而不同,主要所以用.htpasswd这个命令生成用户名和密码

设置访问权限 1、在/usr/local/nagios/share目录下
     vi .htaccess
     AuthName "Nagios Access"
     AuthType Basic
     AuthUserFile /usr/local/nagios/etc/.htpasswd
     require valid-user
     2、在/usr/local/nagios/sbin目录下
     vi .htpasswd
     AuthName "Nagios Access"
     AuthType Basic
     AuthUserFile /usr/local/nagios/etc/.htpasswd
     require valid-user
四)配置nagios
这个最新的版本和原来不太一样,已经不需要做什么了,唯一要做的是修改cgi.cfg  改use_authentication=1为use_authentication=0,即不用验证.不然有一些页面不会显示。

然后检查配置文件是否出错
/usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfg
出现Total Warnings: 0
  Total Errors:  0
为正常
出错的话,就是.cfg文件有问题 根据错误提示 一个个修正
五)启动后台进程
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
/usr/local/etc/rc.d/nagios start
默认的配置应该是没有问题的,建议好好学习一下nagios的具体概念和语法。
要注意的是,每次更改httpd.conf都需要重启apache,然后/usr/local/etc/rc.d/nagios restart,再去访问http://yourIP/nagios

如何判断自己安装是否成功?访问http://yourIP/nagios,如果出现让你登录,那么基本上就成功了,可以输入nagios/自定义的密码。如果发现有些地方显示没有权限察看,那一定是忘记修改cgi.cfg了。
一个比较完整的中文说明:http://www.chinaunix.net/jh/88/810986.html