Rootop 服务器运维与web架构

2014-05-12
发表者 Venus
暂无评论

nagios添加图表(小太阳)支持

nagios监控服务器只显示当前的信息,没有图表功能,不能查看历史状态,为了解决这个问题
需要安装PNP来实现这个功能,pnp基于PHP和Perl可以利用rrdtool工具将Nagios采集的数据绘制成图表显示主机或服务在一段时间内的运行情况。

系统环境:
centos6.4_x64,selinux关闭,iptables关闭。

下载rrdtool:
http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz
下载pnp:
wget -c http://nchc.dl.sourceforge.net/project/pnp4nagios/PNP/pnp-0.4.14/pnp-0.4.14.tar.gz

安装rrdtool和pnp需要几个rpm包支持,有gd、gd-devel、zlib、zlib-devel、pango、pango-devel、perl-devel、perl-CPAN、perl-Time-HiRes

[root@localhost rrdtool-1.4.8]# yum install pango pango-devel perl-devel perl-CPAN perl-Time-HiRes -y  #其它的包之前已经装过
[root@localhost rrdtool-1.4.8]# ./configure --prefix=/usr/local/rrdtool
[root@localhost rrdtool-1.4.8]# make && make install

安装pnp:
在安装pnp之前需要执行一个命令来检查是否有相关模块:

[root@localhost pnp-0.4.14]# perl -MRRDs -le 'print q(ok!)'
Can't locate RRDs.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

提示找不到RRDs.pm,通过软链接解决:

[root@localhost pnp-0.4.14]# ln -s /usr/local/rrdtool/lib/perl/5.10.1/x86_64-linux-thread-multi/RRDs.pm /usr/lib64/perl5/

再次检查,出现另一个错误:

[root@localhost pnp-0.4.14]# perl -MRRDs -le 'print q(ok!)'
Can't locate loadable object for module RRDs in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at -e line 0
Compilation failed in require.
BEGIN failed--compilation aborted.

提示库文件找不到,解决办法:

[root@localhost pnp-0.4.14]# ln -s /usr/local/rrdtool/lib/perl/5.10.1/x86_64-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib64/perl5/
[root@localhost pnp-0.4.14]# perl -MRRDs -le 'print q(ok!)'  #重新检查,通过。
ok!
[root@localhost pnp-0.4.14]# mkdir /usr/local/nagios/share/perfdata  #保存RRD Database Files
[root@localhost pnp-0.4.14]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata --with-perl_lib=/usr/local/rrdtool/lib/perl/5.10.1/x86_64-linux-thread-multi/
[root@localhost pnp-0.4.14]# make all
[root@localhost pnp-0.4.14]# make install
[root@localhost pnp-0.4.14]# make install-config
[root@localhost pnp-0.4.14]# make install-init

配置pnp:
在PNP安装完成后,默认安装目录下自带了模板配置文件,只需将模板文件全部复制一份即可。

[root@localhost pnp-0.4.14]# cd /usr/local/nagios/etc/pnp/
[root@localhost pnp]# ls
background.pdf  check_commands  config.php  npcd.cfg-sample  pages  pnp4nagios_release  process_perfdata.cfg-sample  rra.cfg-sample
[root@localhost pnp]# cp process_perfdata.cfg-sample process_perfdata.cfg
[root@localhost pnp]# cp npcd.cfg-sample npcd.cfg
[root@localhost pnp]# cp rra.cfg-sample rra.cfg
[root@localhost pnp]# chown nagios:nagios *  #将所有配置文件属主属组都改为nagios运行账户nagios

编辑process_perfdata.cfg:
LOG_LEVEL = 2 #把0改为2
修改nagios配置文件来增加小太阳图标:
修改templates.cfg,增加一个定义PNP的host和service。

[root@localhost ~]# vi /usr/local/nagios/etc/objects/templates.cfg
#pnp host definition
define host {
        name                            hosts-pnp
        register                        0
        action_url                      /nagios/pnp/index.php?host=$HOSTNAME$
        process_perf_data               0
}
#pnp service
define service {
        name                            services-pnp
        register                        0
        action_url                      /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
        process_perf_data               0
}

修改nagios.cfg:

[root@localhost ~]# vi /usr/local/nagios/etc/nagios.cfg
process_performance_data=1  #0改为1
host_perfdata_command=process-host-perfdata  #将前面的注释去掉
service_perfdata_command=process-service-perfdata

修改commands.cfg:
process-host-perfdata和process-service-perfdata指令声明了nagios输出哪些值到输出文件中。不过这些定义相对简单,而PNP提供了一个Perl脚本,非常详细地定义了一个输出数据的方法,process_perfdata.pl就是PNP自带的一个脚本,这个脚本在PNP安装完成后会自动生成。因此可以将process-host-perfdata和process-service-perfdata指令中对应的执行命令的内容替换成此脚本。

[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
# 'process-host-perfdata' command definition
define command{
        command_name    process-host-perfdata        command_line    /usr/local/nagios/libexec/process_perfdata.pl
        }


# 'process-service-perfdata' command definition
define command{
        command_name    process-service-perfdata        command_line    /usr/local/nagios/libexec/process_perfdata.pl
        }

修改hosts.cfg文件和services.cfg文件:
将hosts-pnp和services-pnp引用到hosts.cfg和services.cfg中

define host{
        use                     linux-server,hosts-pnp            ; Name of host template to use
                                                        ; This host definition will inherit all variables that are defined
                                                        ; in (or inherited by) the linux-server host template definition.
        host_name               localhost
        alias
        address                 127.0.0.1
        }

define service{
        use                             local-service,services-pnp         ; Name of service template to use
        host_name                       localhost
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }

重启nagios服务。
完成。

PS:
编译rrdtool时的一个错误,因为当时没安装pango和pango-devel包。

configure: error: Please fix the library issues listed above and try again
[root@localhost rrdtool-1.4.8]# yum install pango pango-devel -y

编译rrdtool时在make的时候一个报错,因为当时没安装perl-devel perl-CPAN:

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.

解决方法:
[root@localhost rrdtool-1.4.8]# yum install -y perl-devel perl-CPAN
重新configure

如果不通过perl -MRRDs -le ‘print q(ok!)’来检查环境,可能在编译安装pnp的时候报错:
WARNING: The RRDs Perl Modules are not found on your system
Using RRDs will speedup things in larger installations.

安装pnp,在configure时一个报错,因为最开始的时候没有安装perl-Time-HiRes:
checking for Perl Module Time::HiRes… no
configure: error: Perl Module Time::HiRes not available
解决办法:
[root@localhost pnp-0.4.14]# yum install -y perl-Time-HiRes

 

2014-05-11
发表者 Venus
暂无评论

HTTP WARNING: HTTP/1.1 403 Forbidden – 5237 bytes in 0.001 second response time

HTTP WARNING: HTTP/1.1 403 Forbidden – 5237 bytes in 0.001 second response time

nagios监控了一台服务器的web服务,老提示403错误,后来用火狐的firebug插件才看出来默认apache的欢迎页返回的状态码为403,一直以为欢迎页也属于200状态码。


解决方法:
在/var/www/html下创建个index.html文件即可。
然后过会儿HTTP监控就正常了,或者可以直接重定制该服务的计划检测时间,快速恢复。

2014-05-10
发表者 Venus
暂无评论

opendaemonsocket: daemon MTA: cannot bind: Address already in use

启动nagios、启动sendmail测试nagios发信,通过监控maillog日志发现始终没有发信信息,并且得到错误提示:
sendmail[28180]: NOQUEUE: SYSERR(root): opendaemonsocket: daemon MTA: cannot bind: Address already in use
sendmail[28180]: daemon MTA: problem creating SMTP socket
查资料说是和postfix冲突,查看postfix服务状态,果然postfix启动了,果断停掉。重新启动一下sendmail。重新测试nagios检测服务停止发信功能。正常···

2014-05-09
发表者 Venus
暂无评论

Error: Could not open command file ‘/usr/local/nagios/var/rw/nagios.cmd’ for update!

Error: Could not open command file ‘/usr/local/nagios/var/rw/nagios.cmd’ for update!

出现这个问题,一般是apache服务运行的账户对nagios.cmd没有权限。所以导致报错。
常见的解决办法是直接修改nagios.cmd的文件权限,直接改为777,问题即可解决。
但是在下次重新启动nagios服务时,此文件权限会又会变为原先的权限。
prw-rw—-. 1 nagios nagios 0 May 9 23:13 nagios.cmd

解决办法1:
修改apache的运行账户为nagios账户。这个nagios账户就是运行nagios服务的账户,一般我们会用”nagios”用户来运行。
但是这样可能会对apache有某种程度影响。如果是本机单纯跑nagios监控那就无所谓了。
解决办法2:
将naigos的运行账户改为apache的运行账户。
上面两种方法总结一句话就是apache和nagios的运行账户必须是同一个

由于实际环境限制,它俩又不能用同一个账户,我采用下面方法。
解决方法3:
在nagios启动脚本上下手。
[root@localhost ~]# vi /etc/rc.d/init.d/nagios #截取其中一部分

case "$1" in

 start)
 echo -n "Starting nagios:"
 $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;
 if [ $? -eq 0 ]; then
 su - $NagiosUser -c "touch $NagiosVarDir/nagios.log $NagiosRetentionFile"
 rm -f $NagiosCommandFile
 touch $NagiosRunFile
 chown $NagiosUser:$NagiosGroup $NagiosRunFile
 $NagiosBin -d $NagiosCfgFile
 if [ -d $NagiosLockDir ]; then touch $NagiosLockDir/$NagiosLockFile; fi
 echo " done."
 chmod 777 /usr/local/nagios/var/rw/nagios.cmd
 exit 0
 else
 echo "CONFIG ERROR! Start aborted. Check your Nagios configuration."
 exit 1
 fi
 ;;

在 echo ” done.”(13行)下面添加一句chmod 777 /usr/local/nagios/var/rw/nagios.cmd
目的就是为了启动nagios的时候顺便执行一下修改权限。
另外还需要修改restart)部分 (重启nagios),这里第三种方式我认为最方便。
这样一来支持执行 service nagios start/restart 时就可以自动修改文件权限。

2014-05-09
发表者 Venus
暂无评论

ssh端口修改后nagios监控ssh服务

ssh端口修改后nagios监控ssh服务

nagios默认监控ssh的端口是22,这个是无疑的,为了安全我们可能会修改ssh的默认端口,这样一样nagios就无法正常监控了。
现在就需要修改监控主机的配置文件。
我们可能不了解nagios插件的参数,不过可以通过如下方式查看:
[root@localhost ~]# cd /usr/local/nagios/libexec/ #进入nagios插件目录

[root@localhost libexec]# ./check_ssh #直接执行二进制文件,有的是shell脚本
check_ssh: Could not parse arguments
Usage:
check_ssh [-4|-6] [-t <timeout>] [-r <remote version>] [-p <port>] <host>
[root@localhost libexec]# ./check_http
check_http: Could not parse arguments
Usage:
 check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>]
 [-J <client certificate file>] [-K <private key>]
 [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L] [-E] [-a auth]
 [-b proxy_auth] [-f <ok|warning|critcal|follow|sticky|stickyport>]
 [-e <expect>] [-d string] [-s string] [-l] [-r <regex> | -R <case-insensitive regex>]
 [-P string] [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>]
 [-A string] [-k string] [-S <version>] [--sni] [-C <warn_age>[,<crit_age>]]
 [-T <content-type>] [-j method]

根据提示可以看到插件支持的参数,那么这里ssh的就需要-p指定端口号。
比如我现在监控本机,直接修改localhost.cfg

define service{
 use local-service ; Name of service template to use
 host_name localhost
 service_description SSH
 check_command check_ssh! -p 1122
 notifications_enabled 0
 }

nagios下,命令与参数之间通过叹号!来分开。

define service{
 use local-service ; Name of service template to use
 host_name localhost
 service_description HTTP
 check_command check_http! -p 8080 #也可以用check_tcp!8080这种方法
 notifications_enabled 0
 }