本文档基于CENTOS5.2系统和Nagios实现网管监控功能,并与Cacti实现整合。Centos初始安装后的一些系统基本设置工作本文档不做说明,请参考相关资料。
文档版本:V1.0
最后修改:2009-3-19 By NetKey
系统环境:CentOS5.2
格式约定:
黑色粗体:为输入命令部分 红色粗体:为需要按你的环境修改的部分 绿色粗体:系统返回的提示信息 蓝色粗体:文档注释部分 |
Nagios是一款开源的免费网络监视工具,其功能强大,灵活性强。能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。本文档主要实现nagios监控windows主机,nagios监控windows系统有三种实现方式:SNMP、NSClient++、NRPE,后面两种方式都需要在windows上安装agent,因目前服务器上都开启了SNMP,所以本文档只介绍使用SNMP方式来监控Windows。
第一部分:Nagios的安装
1.安装基础支持套件和添加用户
nagios需要一些基础支持套件才能运行,如httpd;gcc;glibc;glibc-common;gd;gd-devel库等。
创建一个用户组名为nagcmd 用于从web执行外部命令:将nagios与apache用户加入到这个用户主:
#yum install httpd #yum install gcc #yum install glibc glibc-common #yum install gd gd-devel #/usr/sbin/useradd -m nagios 添加一个名为nagios的用户用以专门跑nagios #passwd nagios 设置密码 #/usr/sbin/groupadd nagcmd 添加nagcmd用户组,用以通过web页面提交外部控制命令 #/usr/sbin/usermod -a -G nagcmd nagios 将nagios用户加入nagcmd组 #/usr/sbin/usermod -a -G nagcmd apache 将apache用户加入nagcmd组 |
2.编译与安装nagios
#mkdir ~/downloads #cd ~/downloads #wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz #wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz #cd ~/downloads #tar xzf nagios-3.0.6.tar.gz #cd nagios-3.0.6 #./configure --with-command-group=nagcmd #make all #make install #make install-init #make install-config #make install-commandmode 这时nagios基本已经安装完成,默认安装后的配置文件用于启动nagios是没有问题的。 #vi usr/local/nagios/etc/objects/contacts.cfg 修改nagiosadmin这行其中的邮件地址为你的email地址,以将报警邮件发到你的邮箱 #make install-webconf 安装nagios的web接口 #htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 设置登陆web界面时HTTP验证的账号密码 #service httpd restart 启动apache |
验证程序是否被正确安装。切换目录到安装路径(默认是/usr/local/)看是否存在etc、bin、sbin、share、var这五个目录,如果存在则可以表明程序被正确的安装到系统了,后表是五个目录功能的简要说明:
Bin | Nagios执行程序所在目录,nagios文件即为主程序 |
etc | Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件 3与2区别 对象配置文件都在etc/objects目录下 |
sbin | Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录 |
Share | Nagios网页文件所在的目录 |
Var | Nagios日志文件、spid 等文件所在的目录 |
var/archives | Empty directory for the archived logs |
var/rw | Empty directory for the external command file |
3. 编译并安装nagios-plugins
nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。
#cd ~/downloads #tar xzf nagios-plugins-1.4.13.tar.gz #cd nagios-plugins-1.4.13 #./configure --with-nagios-user=nagios --with-nagios-group=nagios #make #make install |
4. 验证:
ls /usr/local/nagios/libexec
会显示安装的插件文件,即所有的插件都安装在libexec这个目录下
3.2.5 配置WEB接口
方法一:直接在安装nagios时 make install‐webconf
创建一个nagiosadmin的用户用于Nagios的WEB接口登录。记下你所设置的登录口令,一会儿你会用到它。
htpasswd ‐c /usr/local/nagios/etc/htpasswd.users nagiosadmin
重启Apache服务以使设置生效。
service httpd restart
方法二:在httpd.conf最后添加如下内容: #setting for nagios 20090325 #setting by bbs.linuxtone.org ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin <Directory "/usr/local/nagios/sbin"> Options ExecCGI AllowOverride 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"> Options None AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd //用于此目录访问身份验证的文件 Require valid-user </Directory> |
/usr/local/apache2/bin/htpasswd ‐c /usr/local/nagios/etc/htpasswd test
New password: (输入12345)
Re‐type new password: (再输入一次密码)
Adding password for user test
查看认证文件的内容
less /usr/local/nagios/etc/htpasswd
test:OmWGEsBnoGpIc 前半部分是用户名test,后面是加密后的密码
本例添加的是test 用户名,需要改 cgi.cfg 配置文件,允许test用户 authorized_for_system_information=test authorized_for_configuration_information=test authorized_for_system_commands=test authorized_for_all_services=test authorized_for_all_hosts=nagiosadmin,test authorized_for_all_service_commands=test authorized_for_all_host_commands=test 如果有多用户,请用逗号格开 |
4.安装nagios-snmp-plugins
nagios-snmp-plugins是一套用Perl编写的通过SNMP方式监控主机的插件程序。
#cd ~/downloads #wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz #tar xzf nagios-snmp-plugins.1.1.1.tgz #cd nagios_plugins 配置check_snmp_int.pl这些插件的使用时需要配置cpan,CPAN是Comprehensive Perl Archive Network的缩写.。它是一个巨大的Perl软件收藏库,收集了大量有用的Perl模块(modules)及其相关的文件。这里主要是使用Perl-Net-SNMP模块。有两种方式安装: #perl -MCPAN -e shell cpan> install Net::SNMP B) 手工安装 首先去官方网站www.cpan.org下载以下几个模块 Crypt::DES Digest::MD5 Digest::SHA1 Digest::HMAC Net::SNMP 下载后对于每个模块依次按照下面的方式安装 #tar zxf <module>.tar.gz <module>表示模块名,具体请按上面提到的模块替换 #cd <module> <module>表示模块名,具体请按上面提到的模块替换 #perl Makefile.pl #make test #make install 注意:Net::SNMP模块必须在最后安装。至此Net::SNMP手动安装完毕 #./install.sh |
5.其他设置
至此nagios基本已经安装完毕,但这时还不能马上启动nagios,需要以下设置。 #chkconfig --add nagios 将nagios添加到服务中 #chkconfig nagios on 设置服务为自启动 #/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #service nagios start 启动nagios 需要注意的是,Centos默认打开了selinux并且运行于强制安全模式,这将导致在打开nagios的web界面时会出现Internet Server Error的错误。 #getenforce 查看是否运行于强制模式,结果为1表示是 #setenforce 0 更改selinux运行于宽容模式 但是这个设置重启后就会失效,如需要重启后保持该设置需要修改/etc/sysconfig/selinux,将其中的SELINUX= enforcing更改为SELINUX= permissive并重启系统。当然你也可以改成disable禁用selinux。 也可以不更改selinux的运行模式,解决办法为: #chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/ #chcon -R -t httpd_sys_content_t /usr/local/nagios/share/ |
6.实现MSN报警
要实现MSN报警需要使用phpmsnclass,这是一个用php实现的msn机器人程序。
#cd ~/downloads 下载phpmsnclass,此文件为7zip压缩格式,需要安装7z #wget http://nchc.dl.sourceforge.net/sourceforge/p7zip/p7zip_4.65_x86_linux_bin.tar.bz2 #tar jxvf p7zip_4.65_x86_linux_bin.tar.bz2 #cd p7zip_4.65 #./install.sh 安装7z #cd - #7z e phpmsnclass_1.9.7z 解压文件 phpmsnclass需要php支持,安装php,这里为了方便就直接完成LAMP环境的安装 #yum -y install mysql-server 安装mysql数据库,后面安装cacti需要 #yum install -y php php-cli php-xcache php-mysql php-mbstring php-gd php-pgsql php-mcrypt php-mhash php-xml php-bcmath 安装php相关模块 msn报警有2种方式,一种是ls息,另外一个是以msn机器人的形式发送,将消息存储在目录内。这里采用第二种。 #cd phpmsnclass #mkdir /var/spool/msnbot #mkdir /var/spool/msnbot/log #mkdir /var/spool/msnbot/spool 下面把msnbot.php, config.php和msn.class.php拷贝到/var/spool/msnbot/ #cp msnbot.php config.php msn.class.php /var/spool/msnbot #chmod 777 /var/spool/msnbot/spool #chmod +x /var/spool/msnbot/msnbot.php #vi config.php #cp msnbot.sh /etc/init.d/ #chmod +x msnbot.sh 加上执行权限 #vi msnbot.sh 在启动函数里执行的php文件前要加上php (php后有空格) #./msnbot.sh start 启动MSN机器人 下面发个消息测试一下 #php msnsendmsg.php netkey530@hotmail.com "this is a test2" 如果成功接收到信息说明配置正确,此步骤到此结束,后面的能让Nagios使用MSN进行报警的功能需要到Nagios里设置了。 如果需要支持离线消息即当你在离线状态下也能接收到机器人的信息,需要使用MSNP15协议,修改相关发信的vi 文件将声明新类的地方new MSN的第一个参数改为MSNP15 |
第二部分 nagios的配置
nagios目录结构比较清晰,安装后下面一共有bin etc libexec sbin share var几个目录,其中配置文件都存放在etc目录下,bin下存放的是nagios的相关命令,sbin下存放的是通过web方式外部执行的cgi,libexec存放的是所有插件,而var则存放的是log和pid文件等。而实现监控都是依靠执行插件来实现的。
要实现监控,需要在nagios中定义一个service,在这个service中指定监控对象和监控命令以及报警机制等。Nagios的配置关系可以按照下图来做说明:
nagios的配置也比较清晰明了,etc目录下默认有objects目录和一些配置文件,其中objects里放的是主配置文件nagios.cfg包含进去的配置文件。在nagios.cfg中既可以指定单独包含一个cfg,也可以指定一个包含目录,即该目录下所有的cfg文件都会包含进来。
首先我们配置下主配置文件,为了目录的清晰我们自己建立一些目录来存放相关的配置文件,比如建立commands目录存放命令,建立services目录存放服务,建立hosts目录存放主机,在nagios.cfg文件中找到cfg_file的部分,下面是一个示例,实际部署的时候可以按照你自己的情况去设置:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg //监事脚本配置 cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人/组配置文件 cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg//监事时段配置文件 cfg_file=/usr/local/nagios/etc/objects/templates.cfg //监事服务,报警设置 cfg_file=/usr/local/nagios/etc/objects/localhost.cfg//本机配置文件 cfg_file=/usr/local/nagios/etc/objects/switch.cfg//监事路由 cfg_dir=/usr/local/nagios/etc/services 包含配置目录,目录下所有cfg文件将被包含;下同 cfg_dir=/usr/local/nagios/etc/hosts cfg_dir=/usr/local/nagios/etc/commands cfg_dir=/usr/local/nagios/etc/switches cfg_dir=/usr/local/nagios/etc/routers |
nagios.cfg其他地方可以暂不调整,该文件中具体参数请参考附件中的配置文件中文注释
这里先说明一下,监控都是依靠插件去完成的,举个例子说明,如我们要监控60.222.111.83这台服务器的虚拟内存,当达到70%的时候状态为警告,达到90%的时候为严重。这个依靠check_snmp_storage.pl这个插件来完成。
[root@localhost etc]# /usr/local/nagios/libexec/check_snmp_storage.pl -H 60.222.111.83 -C mypublic -2 -m "^Virtual Memory$" -w 70 -c 90 Virtual Memory: 21%used(531MB/2472MB) (<70%) : OK |
其中-H参数表示主机地址,-C参数表示SNMP团体名称,-2表示使用SNMP v2协议,-w为warning(警告)状态的阈值,-c表示为critical(严重)状态的阈值
要用nagios实现监控某主机,就是要实现用nagios调用这样的命令即可。
配置resource.cfg,文件内容:
[root@localhost etc]# cat resource.cfg |grep -v '#'| sed /^$/d 查看resource.cfg配置 $USER1$=/usr/local/nagios/libexec $USER7$=-C mypublic -2 |
这里其实是定义两个变量$USER1$和$USER7$,因为在后面定义command的时候插件的路径是绝对路径,为了节省输入直接可以用$USER1$代替/usr/local/nagios/libexec。而SNMP插件的命令行中的参数需要设置SNMP相关的信息,为节省输入这里用$USER7$来代替
-C mypublic -2。大家可对照上面检测60.222.111.83的虚拟内存的例子结合来加以理解。
下面我们来定义一个command用以监控,仍然以在nagios中实现监控60.222.111.83这台主机的虚拟内存为例说明。为了目录结构的清晰,我们将command的定义都放到commands目录下。在commands下建立一个cfg后缀的文件,针对此示例的command定义内容为
define command{ command_name check_snmp_storage command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ $USER7$ $ARG1$ -w $ARG2$ -c $ARG3$ } |
其中的$USER1$和$USER7$即为我们在上面的resource.cfg中定义的两个变量,$HOSTADDRESS$为我们在下面要定义的主机。
在hosts目录下建立一个cfg后缀的文件来存放主机配置。
define host{ use windows-server 定义使用的模板 host_name web83 定义主机名为web83 alias web server on 111.83 主机别名 address 60.222.111.83 主机IP地址 hostgroups linuxtoneweb 将该主机归到linuxtoneweb这个组,如果要归到多个组里,用逗号分隔组名 } |
在定义主机的时候我们将83归到了linuxtoneweb这个组,下面来定义这个组名。可以直接在hosts下建立一个定义组名的cfg文件。
define hostgroup{ hostgroup_name linuxtoneweb alias linuxtone web servers } |
这样就定义了一个linuxtoneweb组,将主机归为一个组有两种方法,一种是我们这种在主机的定义中去设置,另外一种是在组的设置中定义members。如下:
define hostgroup{ hostgroup_name linuxtoneweb alias linuxtone web servers } |
在定义主机分组里面我们还可以用hostgroup_members定义下级分组,十分方便。
OK,上面我们完成了命令、主机的定义,下面我们就要进入nagios监控某个对象的关键设置,nagios的监控都是靠定义一个service来实现,这里我们定义一个service来实现监控83的虚拟内存。在services目录下建立一个cfg文件。
define service { hostgroup_name linuxtone,linuxtoneweb,database 定义监控对象 name memory 设置服务名 service_description check memory 服务描述 check_period 24x7 监控周期设置 max_check_attempts 4 最大检测尝试次数 normal_check_interval 3 正常检测间隔时间 retry_check_interval 2 重试检测间隔时间 contact_groups admins 报警联系组 notification_interval 10 通知间隔 notification_period 24x7 通知周期设置 notification_options w,u,c,r 定义什么状态时报警 check_command check_snmp_storage!-m "^Virtual Memory$"!70!90 } |
这样我们完成对一个service的定义,定义监控对象我们这里是定义了3个组,即属于这3个组的所有主机都会检测虚拟内存(注意:组必须在其他文件中事先定义好)。当然你也可以用host_name针对主机作为检测对象(多主机用逗号分隔)。监控周期和报警周期我们设置的都是24x7,这个会在后面去定义。定义报警状态中的w表示warning,u表示unknown,c表示critial,r表示recovery(即恢复后是否发送通知);报警选项一般生产环境下设置w,c,r即可。最后我们看到实现监控的主体部分
check_command check_snmp_storage!-m "^Virtual Memory$"!70!90
定义实现这个检测的命令,check_snmp_storage即为我们上面在commands里定义的命令名,
!表示带入的参数,这里有三个!表示带入三个参数到command里,每个参数之间用!分隔,这里表示第一个参数为-m “^Virtual Memory$”,第二个参数为70,第三个参数为90。下面我们回头去看看check_snmp_storage这个command的定义:
command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ $USER7$ $ARG1$ -w $ARG2$ -c $ARG3$
这里的$ARG1$即表示参数1,$ARG2即表示参数2,$ARG3$即表示参数3
而$HOSTADDRESS$是我们定义的检测对象,它的值就是我们的主机IP地址;$USER1$和$USER7$为在resource.cfg里的定义。下面我们将参数值代入这个command里,最后实现的效果是:
/usr/local/nagios/libexec/check_snmp_storage.pl –H 60.222.111.83 –C mypublic -2 –m “^Virtual Memory$” –w 70 –c 90
而这个命令就是我们实现监控83的虚拟内存的命令!
设置3个参数是为了灵活的针对不同主机的调用,如果你对不同的主机设置的阈值不同,只需要对不同的主机定义不同的service即可,command是可以通用的!而这里的参数1也是为了实现不同的功能而设置的,这个脚本还可以检测物理内存,如果我们把参数1的值设置为”^Phisical Memory$”就可以针对物理内存进行检测!定义command的时候参数的个数的设定是你可以根据需要设置的。只需要在后面service中能将参数值代到command中最终能实现你要检测的命令即可。到此为止你可以感受到nagios的灵活性了吧。
到这里我们基本实现了nagios的监控功能,下面我们继续来看看其他设置。在定义host的时候我们有个主机模板的设置,这个设置的定义在object/template.cfg中定义的,这是一个系统自带的配置文件,关于我们所使用的Windows-Server的模板定义内容为:
# Windows host definition template - This is NOT a real host, just a template! define host{ name windows-server ; The name of this host template use generic-host ; Inherit default values from the generic-host template check_period 24x7 ; By default, Windows servers are monitored round the clock check_interval 5 ; Actively check the server every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each server 10 times (max) check_command check-host-alive ; Default command to check if servers are "alive" notification_period 24x7 ; Send notification out at any time - day or night notification_interval 30 ; Resend notifications every 30 minutes notification_options d,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups windows-servers ; Host groups that Windows servers should be a member of register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE } |
objects目录下的contact.cfg中定义的是报警联系人。
define contact{ 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 netkey@linuxtone.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** address1 netkey530@hotmail.com ;这里是个自定义的变量设置,定义了一个MSN地址用以接收MSN报警信息,联系人的自定义变量只能使用address1-address6;通过这个设置你可以实现多种报警方式,如电话,手机短信等,通过在这里设置你的电话,手机号,然后到报警命令定义里定义一个命令即可。 } |
其使用了generic-contact这个联系模板,关于这个模板templates.cfg里的定义内容为:
define contact{ name generic-contact ; The name of this contact template service_notification_period 24x7 ; service notifications can be sent anytime host_notification_period 24x7 ; host notifications can be sent anytime service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events service_notification_commands notify-service-by-email,notify-service-by-msn ; send service notifications via email host_notification_commands notify-host-by-email,notify-host-by-msn ; send host notifications via email register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE! } |
上面我在该配置文件中增加了notify-service-by-msn和notify-service-by-msn的两种报警命令
而关于报警的周期设置在objects下的timeperiods.cfg中,如我们上面在service里定义的7x24的报警周期设置内容为:
define timeperiod{ timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 } |
通过这里我们可以灵活设置报警时间以和报警方式结合,如周末和休息时间设置报警为发送短信和邮件,工作时间设置为发送邮件和MSN报警方式。
下面我们来看关于报警命令的设置,在objects下的command.cfg里定义的为
define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ } # 'notify-host-by-msn' command definition define command{ command_name notify-host-by-msn command_line php /usr/local/nagios/share/msn/msnsendmsg.php $CONTACTADDRESS1$ "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" } # 'notify-service-by-msn' command definition define command{ command_name notify-service-by-msn command_line php /usr/local/nagios/share/msn/msnsendmsg.php $CONTACTADDRESS1$ "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" } |
定义了4种报警命令,后面两种msn报警是我添加的;邮件报警是使用系统自带的sendmail来发送邮件的(注意要启动sendmail服务),而msn报警是使用我们上面所配置的msn机器人发送的报警信息。
至此,整个nagios的监控和报警机制了解完毕。注意我们在配置过程中的任何改动都记得要去通过/usr/local/nagios/bin/nagios –c /usr/local/nagios/etc/nagios.cfg以检查配置文件是否正确,如果正确则可以重启nagios加载新配置(service nagios restart)
7:nagios 使用FetionRobot短信/msn在线报警
1、安装fetion 官网地址:http://www.it‐adv.net/ 支持库安装: 需要Glibc2.4以上的版本 2、安装过程 下载包地址 LINUX X86/32(REDHAT ES4X32):支持库 最新程序fetion20080522004‐linrh4.tar.gz 其中支持库和安装包内容如下: # tar zxvf libraryrh4x32.tar.gz libACE‐5.6.5.so libACE_SSL‐5.6.5.so libcrypto.so.0.9.7a libssl.so.0.9.7a # tar zxvf fetion20080522004‐linrh4.tar.gz 我将fetion放在/../nagios/libexec/sms 把支持库复制到/usr/lib/目录下,并作软链接如下: cp lib*so* /usr/lib/ ln ‐s /usr/lib/libcrypto.so.0.9.7a /usr/lib/libcrypto.so.4 ln ‐s /usr/lib/libssl.so.0.9.7a /usr/lib/libssl.so.4 设定lib库配置文件 #vi /etc/ld.so.conf #增加一条 /usr/lib/ #保存退出后,执行 #ldconfig |
2.测试安装 #cd install # ./fetion ‐h Usage: fetion ‐h ‐h: help fetion ‐u mobile ‐p pwd [‐b batchfile] [‐EN] [‐d] fetion ‐u mobile ‐p pwd [‐b batchfile] [‐EN] [‐d] ‐u: Fetion user account(only supports mobile phone No.) ‐p: Account password ‐b: Batch file name ‐d: Debug and write logs to [mobile]‐debug.log ‐EN: English 3、实际测试 测试帐号:13888888888 密码:123456 (如果密码中含有特殊字符,请使用单引号) 如果发送成功。那么fetion安装过程就OK了 |
3.与nagios组合及perl脚本
3、与nagios 组合及perl脚本 fetion 组合nagios 1、Fetion以后台方式启动:nohup /usr/local/nagios/libexec/sms/fetion ‐u 13888888888 ‐p 123456 >/dev/null 2>1 & 2、写一个perl脚本 Sms.pl (/../nagios/libexec/sms/sms.pl) #!/usr/bin/perl ‐w use strict; use Data::Dumper; use LWP::UserAgent; my $mesg = shift; $mesg =~ s/\//|/g; my @number = (接收手机号,接收手机号); foreach my $number ( @number ) { #print "send sms to $number \n"; my $send_sms_url = "http://localhost:40000/API/buddy/sms/" . $number . "/" . $mesg . '?rand=0.7394060082921254'; my $request = HTTP::Request‐>new(GET => $send_sms_url); my $ua = LWP::UserAgent‐>new; $ua‐>timeout( 5 ); $ua‐>agent("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; Maxthon 2.0)"); my $response = $ua‐>request($request); my $content = $response‐>content(); } |
4.nagios配置
contacts.cfg添加: define contact{ contact_name sms‐members use sms‐mail‐contact alias Nagios Admin SMS pager 138888888888 } define contactgroup{ contactgroup_name admins‐and‐lijs alias Nagios Administrators members sms‐members } 修改报警选项:templates.cfg define contact{ name generic‐contact service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r,f,s host_notification_options d,u,r,f,s service_notification_commands notify‐service‐by‐email; service‐notify‐by‐sms host_notification_commands notify‐host‐by‐email register 0 } define contact{ name sms‐mail‐contact service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r,f,s host_notification_options d,u,r,f,s service_notification_commands service‐notify‐by‐sms host_notification_commands notify‐host‐by‐email register 0 } 修改调用脚本:commands.cfg #host‐notify‐by‐sms define command { command_name host‐notify‐by‐sms command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nWAN_IP: $HOSTALIAS$\nLAN_IP: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/nagios/libexec/sms.pl 710880931 "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } #service notify by sms define command { command_name service‐notify‐by‐sms command_line /usr/local/nagios/libexec/sms/sms.pl '$NOTIFICATIONTYPE$ $HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ info: $SERVICEOUTPUT$' } |
Nagios PNP配置绘图
参考本人以前的文档:http://bbs.linuxtone.org/thread‐1235‐1‐1.html
1、PNP 安装见官网:http://www.pnp4nagios.org/pnp/install
2、zlib gd rrdtool 可以使用yum 安装
wget http://packages.sw.be/rpmforge‐release/rpmforge‐release‐0.3.6‐1.el5.rf.i386.rpm rpm ‐ivh rpmforge‐release‐0.3.6‐1.el5.rf.i386.rpm yum –y install zlib gd gd‐devel rrdtool |
3.修改PNP
修改PNP配置文件,开启日志 默认路径在:/usr/local/nagios/var/process_perfdata.cfg LOG_FILE = /usr/local/nagios/var/perfdata.log # # Loglevel 0=silent 1=normal 2=debug # LOG_LEVEL = 0 #本例设置为2 使用debug模式 |
4、太阳图标配置文件修改
参照官网:http://www.pnp4nagios.org/pnp/webfe 本例3.X有一个小区别就是加太阳图标的时候 是在/usr/local/nagios/etc/objects/templates.cfg server选项及local选项, 添加红色部分 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ define service{ name generic‐service action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ process_perf_data 1 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ define service{ name local‐service use generic‐service action_url /nagios/pnp/index.php?host=$HOSTNAME$ process_perf_data 1 |
5.nagios主配置文件修改
service_perfdata_command=process‐service‐perfdata 修改command.cfg 配置文件 # 'process‐service‐perfdata' command definition define command{ command_name process‐service‐perfdata command_line /usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$ \t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\ t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$ \t$SERVICEPERFDATA$\n" >> /usr/local/nagios/var/service‐perfdata.out } define command { command_name process‐service‐perfdata command_line /usr/local/nagios/libexec/process_perfdata.pl } |
重新加载nagios配置文件即可。如有问题注意看权限及日志提示。
第三部分 安装cacti
Cacti的运行需要AMP(Apache + MySQL + PHP), RRDTool , net-snmp , AMP环境我们在上面已经配置。
安装rrdtool,rrdtool不能直接通过yum安装,可以加入Dag RPM Repository以便让yum能找到rrdtool #wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm #rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm #yum install rrdtool 安装net-snmp #yum –y install net-snmp net-snmp-utils 安装cacti Mysql>source /usr/local/cacti/cacti.sql 导入mysql数据库 配置cacti数据库信息 1. $database_type = "mysql"; 2. $database_default = "cacti"; 3. $database_hostname = "localhost"; 4. $database_username = "cactiuser"; 5. $database_password = "cacti"; 配置cacti自动运行: 1. */5 * * * * /opt/php/bin/php /opt/htdocs/www/cacti/poller.php > /dev/null 2>&1 Spine更有效率可以选择性安装 Spine更有效率可以选择性安装 配置cacti: 1.选择"新的安装" 2.配置路径(以系统中实际安装路径为准) 3.默认用户名及密码 4.进入cacti后台 5.查看报表 6.创建磁盘监控 以上完成了cacti安装,下面安装插件 安装插件框架: 1. cd /opt/htdocs/www 2. unzip cacti-plugin-0.8.7e-PA-v2.6.zip 3. chown -R www:website cacti-plugin-arch/ 4. chmod -R 0775 cacti-plugin-arch 2.导入数据库结构 1. mysql -u cacti -p cacti<cacti-plugin-arch/pa.sql 3.覆盖文件 1. cp –rf cacti-plugin-arch/files-0.8.7e/* /opt/htdocs/www/cacti 方法二:打补丁 1. cp cacti-plugin-arch/cacti-plugin-0.8.7e-PA-v2.6.diff /opt/htdocs/www/cacti/ 2. cd /opt/htdocs/www/cacti/ 3. patch -p1 -N <cacti-plugin-0.8.7e-PA-v2.6.diff 我用方法一 4.配置插件的数据库信息 1. $database_type = "mysql"; 2. $database_default = "cacti"; 3. $database_hostname = "localhost"; 4. $database_username = "cactiuser"; 5. $database_password = "cacti"; 5.配制插件 1. #我的cacti安装在域下的cacti目录,这里也需修改 2. $config['url_path'] = '/cacti/'; 3. 4. #为后面安装npc增加变量 5. $plugins[] = 'npc'; 注:0.8.7g开始上面两变量改放在includes/config.php中,如果参照以前的教程会找不到了囧 Apache设置 Alias /cacti "/usr/local/wwwroot/cacti" <Directory "/usr/local/wwwroot/cacti"> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> #vi /usr/local/wwwroot/cacti/include/config.php #wget http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7d-PA-v2.4.zip |
第四部分 整合cacti和nagios
整合cacti和nagios是利用了cacti的一个插件nagios for cacti,它的原理是将nagios的数据通过ndo2db导入到mysql数据库(cacti的库中),然后cacti读取数据库信息将nagios的结果展示出来。
1.安装ndoutils
首先需要安装ndoutils以将nagios的数据能导入到mysql数据库中。 #wget http://nchc.dl.sourceforge.net/sourceforge/nagios/ndoutils-1.4b7.tar.gz #tar zxvf ndoutils-1.4b7.tar.gz #./configure --enable-mysql --disable-pgsql --with-mysql-lib=/usr/lib/mysql #make #cp config/ndomod.cfg /usr/local/nagios/etc 修改nagios主配置文件 command_check_interval=-1 event_broker_options=-1 broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg process_performance_data=1 添加的内容至此结束 #cd src #cp ndomod-3x.o nod2db-3x log2ndo file2sock /usr/local/nagios/bin #cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db #cp config/ndo2db.cfg /usr/local/nagios/etc instance_name=default output_type=tcpsocket output=127.0.0.1 tcp_port=5668 output_buffer_items=5000 buffer_file=/usr/local/nagios/var/ndomod.tmp file_rotation_interval=14400 file_rotation_timeout=60 reconnect_interval=15 reconnect_warning_interval=15 data_processing_options=-1 config_output_options=2 [root@localhost downloads]# cat /usr/local/nagios/etc/ndo2db.cfg |grep -v '^#'|sed /^$/d ndo2db_user=nagios ndo2db_group=nagios socket_type=tcp socket_name=/usr/local/nagios/var/ndo.sock tcp_port=5668 db_servertype=mysql db_host=127.0.0.1 db_port=3306 db_name=cacti db_prefix=npc_ db_user=cacti db_pass=cacti2008 max_timedevents_age=1440 max_systemcommands_age=10080 max_servicechecks_age=10080 max_hostchecks_age=10080 max_eventhandlers_age=44640 debug_level=1 debug_verbosity=1 debug_file=/usr/local/nagios/var/ndo2db.debug max_debug_file_size=1000000 |
2.安装php-json
npc展示部分用到json,需要在php中安装php-json的支持,centos 5下的php 版本默认是5.1.6 不带json支持,无法简单地通过yum install php5-json方式来安装。
#cd ~/downloads #tar xvjf php-json-ext-1.2.0.tar.bz2 #cd #phpize 编译前初始化php环境(注:如果要使用phpize首先安装php-devel) #./configure #make #make install #vi /etc/php.d/json.ini #/usr/sbin/apache2ctl graceful 重启apache 为了验证是否成功可使用phpinfo查看是否已支持json |
3.安装npc
至此完成nagios和cacti的整合完毕!
转载于:https://blog.51cto.com/asaderas/1548496