SlideShare a Scribd company logo
LinuxTone IT 运维专家论坛文档




             Nagios 的安装部署和与 Cacti 的整合


本文档基于 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 需要一些基础支持套件才能运行,如 apache,gcc,glibc,gd 库等。
#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
LinuxTone IT 运维专家论坛文档


#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



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
安装插件,安装后所有插件命令将被安装到 /usr/local/nagios/libexec 目录下



4.                     安                     装                    nagios-snmp-plugins

nagios-snmp-plugins 是 一 套 用 Perl 编 写 的 通 过 SNMP 方 式 监 控 主 机 的 插 件 程 序 。

#cd ~/downloads
#wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz
LinuxTone IT 运维专家论坛文档




#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 模 块。 有两 种方 式安 装:

A)通过 CPAN 来安装
#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
执 行 nagios-snmp-plugins 安 装 脚 本 , 执 行 之 后 会 将 插 件 命 令 安 装
到 /usr/local/nagios/libexec 下



5.                    其                  他                 设                   置

至 此 nagios 基 本 已 经 安 装 完 毕 , 但 这 时 还 不 能 马 上 启 动 nagios , 需 要 以 下 设 置 。


#chkconfig --add nagios 将 nagios 添加到服务中
#chkconfig nagios on 设置服务为自启动
#/usr/local/nagios/bin/nagios        -v           /usr/local/nagios/etc/nagios.cfg
检 测 nagios 的 配 置 是 否 正 确 , 在 后 面 配 置 nagios 过 程 中 我 们 为 了 检 测 配 置 的 是 否 正
确需要不断执行该命令来检查配置文件。
LinuxTone IT 运维专家论坛文档




#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
#wget http://phpmsnclass.googlecode.com/files/phpmsnclass_1.9.7z

下载 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 需 要
由于安全原因请将 mysql 设置为只监听在 127.0.0.1 上,并删除 mysql 库中默认的除了
root@localhost 外 的 所 有 用 户 , 相 关 设 置 请 见 以 前 的 关 于 postfix 安 装 中 的 设 置 。

#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 种方式,一种是直接使用 php 进行登陆验证发送消息,另外一个是以 msn 机
器 人 的 形 式 发 送 , 将 消 息 存 储 在 目 录 内 。 这 里 采 用 第 二 种 。
LinuxTone IT 运维专家论坛文档




#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                             o+t                          /var/spool/msnbot/spool


这 个 机 器 人 的 工 作 原 理 是 如 果 要 发 送 消 息 , 就 调 用 php 生 成 消 息 文 件 到
/var/spool/msnbot/spool 目录中,发送程序检查到该目录有新文件就会模拟 msn 登陆和发信
将            信          息           发         送            出            去           。

#chmod +x /var/spool/msnbot/msnbot.php
#vi        config.php
在配置文件中设置 MSN 的账号和密码(以后报警通过这个 MSN 发出)
#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"
向    netkey530@hotmail.com    的    MSN    账 号 发 送 测 试 信 息
注意需要将 netkey530@hotmail.com 和 config.php 里设置的 MSN 账号相互加为好友

如果成功接收到信息说明配置正确,此步骤到此结束,后面的能让 Nagios 使用 MSN 进行
报  警 的  功  能  需 要  到  Nagios 里 设     置   了   。

如果需要支持离线消息即当你在离线状态下也能接收到机器人的信息 ,需要使用 MSNP15 协
议,修改相关发信的 php 文件将声明新类的地方 new MSN 的第一个参数改为 MSNP15




第        二        部         分                     nagios         的          配       置


nagios 目录结构比较清晰,安装后下面一共有 bin etc libexec sbin share var 几个目录,其
中配置文件都存放在 etc 目录下,bin 下存放的是 nagios 的相关命令, sbin 下存放的是通过
web 方式外部执行的 cgi,libexec 存放的是所有插件,而 var 则存放的是 log 和 pid 文件等。
LinuxTone IT 运维专家论坛文档



而    实    现    监     控    都    是    依    靠     执    行    插    件     来    实    现     的   。

要实现监控,需要在 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 配置
LinuxTone IT 运维专家论坛文档




$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
}
LinuxTone IT 运维专家论坛文档



这样就定义了一个 linuxtoneweb 组,将主机归为一个组有两种方法,一种是我们这种在主
机 的 定 义 中 去 设 置 , 另 外 一 种 是 在 组 的 设 置 中 定 义 members 。 如 下 :

define hostgroup{
     hostgroup_name linuxtoneweb
                         alias             linuxtone web servers
     members     web83 设置该组的成员,需要是在 host 中定义的主机名,多个成员
请用逗号分隔
}


在 定 义 主 机 分 组 里 面 我 们 还 可 以 用 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 的 定 义 :
LinuxTone IT 运维专家论坛文档



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
     }
LinuxTone IT 运维专家论坛文档



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
LinuxTone IT 运维专家论坛文档




    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 *****nnNotification Type:
$NOTIFICATIONTYPE$nHost:         $HOSTNAME$nState:         $HOSTSTATE$nAddress:
$HOSTADDRESS$nInfo: $HOSTOUTPUT$nnDate/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 *****nnNotification Type:
$NOTIFICATIONTYPE$nnService: $SERVICEDESC$nHost: $HOSTALIAS$nAddress:
$HOSTADDRESS$nState:                                        $SERVICESTATE$nnDate/Time:
$LONGDATETIME$nnAdditional Info:nn$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 *****nnNotification Type: $NOTIFICATIONTYPE$
nHost:      $HOSTNAME$nState:         $HOSTSTATE$nAddress:       $HOSTADDRESS$nInfo:
$HOSTOUTPUT$nnDate/Time: $LONGDATETIME$n"
LinuxTone IT 运维专家论坛文档




    }



# '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 *****nnNotification Type: $NOTIFICATIONTYPE$
nnService: $SERVICEDESC$nHost: $HOSTALIAS$nAddress: $HOSTADDRESS$nState:
$SERVICESTATE$nnDate/Time:                              $LONGDATETIME$nnAdditional
Info:nn$SERVICEOUTPUT$"
     }



定 义 了 4 种 报 警 命 令 , 后 面 两 种 msn 报 警 是 我 添 加 的 ; 邮 件 报 警 是 使 用 系 统 自 带 的
sendmail 来发送邮件的(注意要启动 sendmail 服务),而 msn 报警是使用我们上面所配置
的      msn   机     器    人     发     送    的     报     警    信     息     。

至此,整个 nagios 的监控和报警机制了解完毕。                       注意我们在配置过程中的任何改动都记得要
去通过 /usr/local/nagios/bin/nagios –c /usr/local/nagios/etc/nagios.cfg 以检查配置文件是否正确,
如 果 正 确 则 可 以 重 启 nagios 加 载 新 配 置 (service nagios restart)


第           三           部            分                      安           装            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
#cd                                                                           ~/downloads
#wget                                    http://www.cacti.net/downloads/cacti-0.8.7d.tar.gz
#tar                                zxvf                                cacti-0.8.7d.tar.gz
LinuxTone IT 运维专家论坛文档




#mkdir                                   –p                                 /usr/local/wwwroot
#cp                 –rf                  cacti-0.8.7.d                /usr/local/wwwroot/cacti


下 面 开 始 导 入 数 据 库 , mysql 数 据 库 的 基 本 安 全 配 置 这 里 不 做 说 明 , 请 参 考 以 前 的
postfix 邮 件 安 装 文 档 中 的                      mysql  设 置 部 分 。

#mysql                        –u                     root                       –p
mysql>create database cacti;                创 建 一 个 数 据 库 供 cacti 使 用
mysql>use cacti;
Mysql>source /usr/local/cacti/cacti.sql             导 入 mysql 数 据 库
Mysql>grant all privileges on cacti.* to cacti@localhost identified by ‘cactipass’;
添 加 一 个 数 据 库 账 号 cacti 密 码 为 cactipass 用 以 访 问 cacti 库
Mysql>flush      privileges;                   刷      新     权      限     信      息

Apache                                      设                                                置
#vi /etc/http/conf.d/cacti.conf 编辑 cacti 站点的配置文件,文件内容如下:
Alias /cacti "/usr/local/wwwroot/cacti"

<Directory "/usr/local/wwwroot/cacti">
  Options FollowSymLinks MultiViews
 AllowOverride None
  Order allow,deny
 Allow from all
</Directory>


修改 cacti 的配置文件
#vi                                                /usr/local/wwwroot/cacti/include/config.php
修改其中的数据库连接信息,设置好数据库主机地址,用户,密码信息。

至此安装完成,访问 http://ip/cacti/install 根据提示安装 cacti (ip 换成你对应的主机 ip 地址)



接        下         来        安        装        cacti     的        插        件        管          理
#cd ~/download/
#wget           http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7d-PA-v2.4.zip
#unzip                                                         cacti-plugin-0.8.7d-PA-v2.4.zip
#mysql –u root –p cacti<pa.sql                            导 入 sql 到 cacti 库 中
#cd                                        cd                                      files-0.8.7d/
#cp –rf * /usr/local/wwwroot/cacti 复制相关文件到 cacti 下
LinuxTone IT 运维专家论坛文档




第        四        部         分                整         合         cacti       和         nagios


整合 cacti 和 nagios 是利用了 cacti 的一个插件 nagios for cacti,它的原理是将 nagios 的数据
通过 ndo2db 导入到 mysql 数据库( cacti 的库中),然后 cacti 读取数据库信息将 nagios 的
结            果         展         示               出       来          。

1.安装 ndoutils

首 先 需 要 安 装 ndoutils 以 将 nagios 的 数 据 能 导 入 到 mysql 数 据 库 中 。
#yum -y install mysql-devel 安装 mysql 开发包以编译 ndoutils
#wget http://nchc.dl.sourceforge.net/sourceforge/nagios/ndoutils-1.4b7.tar.gz
#tar                                 zxvf                                 ndoutils-1.4b7.tar.gz
#cd ndoutils
#./configure --enable-mysql --disable-pgsql --with-mysql-lib=/usr/lib/mysql
#make
#cp config/ndomod.cfg /usr/local/nagios/etc
修            改           nagios           主           配            置           文             件
#vi                                                            /usr/local/nagios/etc/nagios.cfg
添                 加                  以                下                   内                 容
check_external_commands=1
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


修 改 配 置 文 件 ndocmd.cfg 和 ndo2db.cfg , 这 里 我 的 配 置 文 件 内 容 为 :
[root@localhost downloads]# cat /usr/local/nagios/etc/ndomod.cfg |grep -v '^#'|sed /^$/d
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
LinuxTone IT 运维专家论坛文档




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

#/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg   启动 ndo2db



2.                  安                 装                        php-json
npc 展示部分用到 json,需要在 php 中安装 php-json 的支持,centos 5 下的 php 版本默认是
5.1.6 不 带 json 支 持 , 无 法 简 单 地 通 过 yum install php5-json 方 式 来 安 装 。

#cd                                                                              ~/downloads
#wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.0.tar.bz2

#tar xvjf php-json-ext-1.2.0.tar.bz2
#cd php-json-ext-1.2.0
#phpize       编译前初始化 php 环境
#./configure
#make
#make install
LinuxTone IT 运维专家论坛文档




#vi                                                                 /etc/php.d/json.ini
extension=php_json.so
#/usr/sbin/apache2ctl graceful 重启 apache
为了验证是否成功可使用 phpinfo 查看是否已支持 json



3.                        安                          装                             npc

#cd                                                                     ~/downloads
#wget
http://www.assembla.com/spaces/npc/documents/aUjAwmdW8r3BuPab7jnrAJ/download?
filename=npc-2.0.0b.166.tar.gz
#mv                           npc                   /usr/local/wwwroot/cacti/plugins/
启用 cacti 的插 件功 能, 以 admin 用户 登陆 cacti, 在 console 中的 user management 里 对
admin 的用户权限进行编辑,勾选上 Plugin Management,然后到插件管理中心安装并启用
NPC 即可。


至此完成 nagios 和 cacti 的整合。

More Related Content

What's hot

5, system admin
5, system admin5, system admin
5, system admin
ted-xu
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linuxYiwei Ma
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
MarsZ Chen
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
MarsZ Chen
 
Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)haiyuan ning
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器ekoing
 
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security建融 黃
 
Showinnodbstatus公开
Showinnodbstatus公开Showinnodbstatus公开
Showinnodbstatus公开
longxibendi
 
一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程WASecurity
 
pfSsense
pfSsensepfSsense
pfSsense
Chris Hsiang
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解zzc89522
 
Linux必学的60个命令
Linux必学的60个命令Linux必学的60个命令
Linux必学的60个命令yiditushe
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)heima911
 
Linuxguide4f2e
Linuxguide4f2eLinuxguide4f2e
Linuxguide4f2e
tb-vertical-guide
 
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 ZendCentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zendwensheng wei
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡Cary Yang
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡guest2d0fe3
 

What's hot (18)

5, system admin
5, system admin5, system admin
5, system admin
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
 
Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器
 
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security
 
Showinnodbstatus公开
Showinnodbstatus公开Showinnodbstatus公开
Showinnodbstatus公开
 
一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程
 
pfSsense
pfSsensepfSsense
pfSsense
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解
 
Linux必学的60个命令
Linux必学的60个命令Linux必学的60个命令
Linux必学的60个命令
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
 
Linuxguide4f2e
Linuxguide4f2eLinuxguide4f2e
Linuxguide4f2e
 
unixtoolbox_zh_CN
unixtoolbox_zh_CNunixtoolbox_zh_CN
unixtoolbox_zh_CN
 
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 ZendCentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 

Viewers also liked

Linux 系統管理與安全:系統防駭與資訊安全
Linux 系統管理與安全:系統防駭與資訊安全Linux 系統管理與安全:系統防駭與資訊安全
Linux 系統管理與安全:系統防駭與資訊安全
維泰 蔡
 
Groovy Introduction for Java Programmer
Groovy Introduction for Java ProgrammerGroovy Introduction for Java Programmer
Groovy Introduction for Java Programmer
Li Ding
 
Linux 系統管理與安全:基本 Linux 系統知識
Linux 系統管理與安全:基本 Linux 系統知識Linux 系統管理與安全:基本 Linux 系統知識
Linux 系統管理與安全:基本 Linux 系統知識
維泰 蔡
 
配布用Cacti running with cherokee
配布用Cacti running with cherokee配布用Cacti running with cherokee
配布用Cacti running with cherokee
yut148atgmaildotcom
 
Web_DBの監視
Web_DBの監視Web_DBの監視
Web_DBの監視
ii012014
 
Cheatsheet: Hex file headers and regex
Cheatsheet: Hex file headers and regexCheatsheet: Hex file headers and regex
Cheatsheet: Hex file headers and regex
Kasper de Waard
 
Tmux quick-reference
Tmux quick-referenceTmux quick-reference
Tmux quick-referenceRamesh Kumar
 
RHEL roadmap
RHEL roadmapRHEL roadmap
RHEL roadmap
Ramesh Kumar
 
Webサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについてWebサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについてyut148atgmaildotcom
 
UNIX SHELL IN DBA EVERYDAY
UNIX SHELL IN DBA EVERYDAYUNIX SHELL IN DBA EVERYDAY
UNIX SHELL IN DBA EVERYDAY
Andrejs Vorobjovs
 
Sorting techniques in Perl
Sorting techniques in PerlSorting techniques in Perl
Sorting techniques in Perl
Yogesh Sawant
 
Hadoopp0f 150325024427-conversion-gate01
Hadoopp0f 150325024427-conversion-gate01Hadoopp0f 150325024427-conversion-gate01
Hadoopp0f 150325024427-conversion-gate01
Kalyan Hadoop
 
Unix interview questions
Unix interview questionsUnix interview questions
Unix interview questions
Kalyan Hadoop
 
shell script introduction
shell script introductionshell script introduction
shell script introduction
Jie Jin
 
Recommender system
Recommender systemRecommender system
Recommender system
Jie Jin
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions
Ahmed El-Arabawy
 
sed -- A programmer's perspective
sed -- A programmer's perspectivesed -- A programmer's perspective
sed -- A programmer's perspective
Li Ding
 

Viewers also liked (20)

Linux 系統管理與安全:系統防駭與資訊安全
Linux 系統管理與安全:系統防駭與資訊安全Linux 系統管理與安全:系統防駭與資訊安全
Linux 系統管理與安全:系統防駭與資訊安全
 
Groovy Introduction for Java Programmer
Groovy Introduction for Java ProgrammerGroovy Introduction for Java Programmer
Groovy Introduction for Java Programmer
 
Donate Organs
Donate OrgansDonate Organs
Donate Organs
 
Linux 系統管理與安全:基本 Linux 系統知識
Linux 系統管理與安全:基本 Linux 系統知識Linux 系統管理與安全:基本 Linux 系統知識
Linux 系統管理與安全:基本 Linux 系統知識
 
配布用Cacti running with cherokee
配布用Cacti running with cherokee配布用Cacti running with cherokee
配布用Cacti running with cherokee
 
Web_DBの監視
Web_DBの監視Web_DBの監視
Web_DBの監視
 
Cheatsheet: Hex file headers and regex
Cheatsheet: Hex file headers and regexCheatsheet: Hex file headers and regex
Cheatsheet: Hex file headers and regex
 
Tmux quick-reference
Tmux quick-referenceTmux quick-reference
Tmux quick-reference
 
RHEL roadmap
RHEL roadmapRHEL roadmap
RHEL roadmap
 
Webサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについてWebサーバ勉強会#5mod sedについて
Webサーバ勉強会#5mod sedについて
 
UNIX SHELL IN DBA EVERYDAY
UNIX SHELL IN DBA EVERYDAYUNIX SHELL IN DBA EVERYDAY
UNIX SHELL IN DBA EVERYDAY
 
Cacti manual
Cacti manualCacti manual
Cacti manual
 
Sorting techniques in Perl
Sorting techniques in PerlSorting techniques in Perl
Sorting techniques in Perl
 
Hadoopp0f 150325024427-conversion-gate01
Hadoopp0f 150325024427-conversion-gate01Hadoopp0f 150325024427-conversion-gate01
Hadoopp0f 150325024427-conversion-gate01
 
Unix interview questions
Unix interview questionsUnix interview questions
Unix interview questions
 
Url
UrlUrl
Url
 
shell script introduction
shell script introductionshell script introduction
shell script introduction
 
Recommender system
Recommender systemRecommender system
Recommender system
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions
 
sed -- A programmer's perspective
sed -- A programmer's perspectivesed -- A programmer's perspective
sed -- A programmer's perspective
 

Similar to Nagios的安装部署和与cacti的整合(linuxtone)

unix toolbox 中文版
unix toolbox 中文版unix toolbox 中文版
unix toolbox 中文版Jie Bao
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1
imacat .
 
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
liuts
 
Openshift by mtchang
Openshift by mtchangOpenshift by mtchang
Openshift by mtchangChang Mt
 
Linux系统工程师教程
Linux系统工程师教程Linux系统工程师教程
Linux系统工程师教程yiditushe
 
Apache安装配置mod security
Apache安装配置mod securityApache安装配置mod security
Apache安装配置mod security
Huang Toby
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
cachowu
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理Jason Zheng
 
Nagios & puppet
Nagios & puppetNagios & puppet
Nagios & puppet
Jason Shen
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
Kenny (netman)
 
Unixtoolbox zh cn
Unixtoolbox zh cnUnixtoolbox zh cn
Unixtoolbox zh cnxdboy2006
 
Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩
chinafenghao
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
chinafenghao
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
chinafenghao
 
[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程
NJU OPEN
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版pigso
 
8, lamp
8, lamp8, lamp
8, lamp
ted-xu
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build System
imacat .
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 

Similar to Nagios的安装部署和与cacti的整合(linuxtone) (20)

unix toolbox 中文版
unix toolbox 中文版unix toolbox 中文版
unix toolbox 中文版
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1
 
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
 
Openshift by mtchang
Openshift by mtchangOpenshift by mtchang
Openshift by mtchang
 
Linux系统工程师教程
Linux系统工程师教程Linux系统工程师教程
Linux系统工程师教程
 
Apache安装配置mod security
Apache安装配置mod securityApache安装配置mod security
Apache安装配置mod security
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
Nagios & puppet
Nagios & puppetNagios & puppet
Nagios & puppet
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
Unixtoolbox zh cn
Unixtoolbox zh cnUnixtoolbox zh cn
Unixtoolbox zh cn
 
Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
 
[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
 
8, lamp
8, lamp8, lamp
8, lamp
 
LinuxGuide4F2E
LinuxGuide4F2ELinuxGuide4F2E
LinuxGuide4F2E
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build System
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 

More from Yiwei Ma

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconYiwei Ma
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconYiwei Ma
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconYiwei Ma
 
Taobao practice-liyu-qcon
Taobao practice-liyu-qconTaobao practice-liyu-qcon
Taobao practice-liyu-qconYiwei Ma
 
Thoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconThoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconYiwei Ma
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qconYiwei Ma
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qconYiwei Ma
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qconYiwei Ma
 
Google arch-fangkun-qcon
Google arch-fangkun-qconGoogle arch-fangkun-qcon
Google arch-fangkun-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconYiwei Ma
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qconYiwei Ma
 
Netflix keynote-adrian-qcon
Netflix keynote-adrian-qconNetflix keynote-adrian-qcon
Netflix keynote-adrian-qconYiwei Ma
 
Facebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconFacebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconYiwei Ma
 
Domainlang keynote-eric-qcon
Domainlang keynote-eric-qconDomainlang keynote-eric-qcon
Domainlang keynote-eric-qconYiwei Ma
 
Devjam keynote-david-qcon
Devjam keynote-david-qconDevjam keynote-david-qcon
Devjam keynote-david-qconYiwei Ma
 
Baidu keynote-wubo-qcon
Baidu keynote-wubo-qconBaidu keynote-wubo-qcon
Baidu keynote-wubo-qconYiwei Ma
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011Yiwei Ma
 

More from Yiwei Ma (20)

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qcon
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qcon
 
Taobao practice-liyu-qcon
Taobao practice-liyu-qconTaobao practice-liyu-qcon
Taobao practice-liyu-qcon
 
Thoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconThoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qcon
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qcon
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qcon
 
Google arch-fangkun-qcon
Google arch-fangkun-qconGoogle arch-fangkun-qcon
Google arch-fangkun-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qcon
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qcon
 
Netflix keynote-adrian-qcon
Netflix keynote-adrian-qconNetflix keynote-adrian-qcon
Netflix keynote-adrian-qcon
 
Facebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconFacebook keynote-nicolas-qcon
Facebook keynote-nicolas-qcon
 
Domainlang keynote-eric-qcon
Domainlang keynote-eric-qconDomainlang keynote-eric-qcon
Domainlang keynote-eric-qcon
 
Devjam keynote-david-qcon
Devjam keynote-david-qconDevjam keynote-david-qcon
Devjam keynote-david-qcon
 
Baidu keynote-wubo-qcon
Baidu keynote-wubo-qconBaidu keynote-wubo-qcon
Baidu keynote-wubo-qcon
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
 

Nagios的安装部署和与cacti的整合(linuxtone)

  • 1. LinuxTone IT 运维专家论坛文档 Nagios 的安装部署和与 Cacti 的整合 本文档基于 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 需要一些基础支持套件才能运行,如 apache,gcc,glibc,gd 库等。 #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
  • 2. LinuxTone IT 运维专家论坛文档 #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 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 安装插件,安装后所有插件命令将被安装到 /usr/local/nagios/libexec 目录下 4. 安 装 nagios-snmp-plugins nagios-snmp-plugins 是 一 套 用 Perl 编 写 的 通 过 SNMP 方 式 监 控 主 机 的 插 件 程 序 。 #cd ~/downloads #wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz
  • 3. LinuxTone IT 运维专家论坛文档 #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 模 块。 有两 种方 式安 装: A)通过 CPAN 来安装 #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 执 行 nagios-snmp-plugins 安 装 脚 本 , 执 行 之 后 会 将 插 件 命 令 安 装 到 /usr/local/nagios/libexec 下 5. 其 他 设 置 至 此 nagios 基 本 已 经 安 装 完 毕 , 但 这 时 还 不 能 马 上 启 动 nagios , 需 要 以 下 设 置 。 #chkconfig --add nagios 将 nagios 添加到服务中 #chkconfig nagios on 设置服务为自启动 #/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 检 测 nagios 的 配 置 是 否 正 确 , 在 后 面 配 置 nagios 过 程 中 我 们 为 了 检 测 配 置 的 是 否 正 确需要不断执行该命令来检查配置文件。
  • 4. LinuxTone IT 运维专家论坛文档 #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 #wget http://phpmsnclass.googlecode.com/files/phpmsnclass_1.9.7z 下载 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 需 要 由于安全原因请将 mysql 设置为只监听在 127.0.0.1 上,并删除 mysql 库中默认的除了 root@localhost 外 的 所 有 用 户 , 相 关 设 置 请 见 以 前 的 关 于 postfix 安 装 中 的 设 置 。 #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 种方式,一种是直接使用 php 进行登陆验证发送消息,另外一个是以 msn 机 器 人 的 形 式 发 送 , 将 消 息 存 储 在 目 录 内 。 这 里 采 用 第 二 种 。
  • 5. LinuxTone IT 运维专家论坛文档 #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 o+t /var/spool/msnbot/spool 这 个 机 器 人 的 工 作 原 理 是 如 果 要 发 送 消 息 , 就 调 用 php 生 成 消 息 文 件 到 /var/spool/msnbot/spool 目录中,发送程序检查到该目录有新文件就会模拟 msn 登陆和发信 将 信 息 发 送 出 去 。 #chmod +x /var/spool/msnbot/msnbot.php #vi config.php 在配置文件中设置 MSN 的账号和密码(以后报警通过这个 MSN 发出) #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" 向 netkey530@hotmail.com 的 MSN 账 号 发 送 测 试 信 息 注意需要将 netkey530@hotmail.com 和 config.php 里设置的 MSN 账号相互加为好友 如果成功接收到信息说明配置正确,此步骤到此结束,后面的能让 Nagios 使用 MSN 进行 报 警 的 功 能 需 要 到 Nagios 里 设 置 了 。 如果需要支持离线消息即当你在离线状态下也能接收到机器人的信息 ,需要使用 MSNP15 协 议,修改相关发信的 php 文件将声明新类的地方 new MSN 的第一个参数改为 MSNP15 第 二 部 分 nagios 的 配 置 nagios 目录结构比较清晰,安装后下面一共有 bin etc libexec sbin share var 几个目录,其 中配置文件都存放在 etc 目录下,bin 下存放的是 nagios 的相关命令, sbin 下存放的是通过 web 方式外部执行的 cgi,libexec 存放的是所有插件,而 var 则存放的是 log 和 pid 文件等。
  • 6. LinuxTone IT 运维专家论坛文档 而 实 现 监 控 都 是 依 靠 执 行 插 件 来 实 现 的 。 要实现监控,需要在 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 配置
  • 7. LinuxTone IT 运维专家论坛文档 $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 }
  • 8. LinuxTone IT 运维专家论坛文档 这样就定义了一个 linuxtoneweb 组,将主机归为一个组有两种方法,一种是我们这种在主 机 的 定 义 中 去 设 置 , 另 外 一 种 是 在 组 的 设 置 中 定 义 members 。 如 下 : define hostgroup{ hostgroup_name linuxtoneweb alias linuxtone web servers members web83 设置该组的成员,需要是在 host 中定义的主机名,多个成员 请用逗号分隔 } 在 定 义 主 机 分 组 里 面 我 们 还 可 以 用 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 的 定 义 :
  • 9. LinuxTone IT 运维专家论坛文档 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 }
  • 10. LinuxTone IT 运维专家论坛文档 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
  • 11. LinuxTone IT 运维专家论坛文档 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 *****nnNotification Type: $NOTIFICATIONTYPE$nHost: $HOSTNAME$nState: $HOSTSTATE$nAddress: $HOSTADDRESS$nInfo: $HOSTOUTPUT$nnDate/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 *****nnNotification Type: $NOTIFICATIONTYPE$nnService: $SERVICEDESC$nHost: $HOSTALIAS$nAddress: $HOSTADDRESS$nState: $SERVICESTATE$nnDate/Time: $LONGDATETIME$nnAdditional Info:nn$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 *****nnNotification Type: $NOTIFICATIONTYPE$ nHost: $HOSTNAME$nState: $HOSTSTATE$nAddress: $HOSTADDRESS$nInfo: $HOSTOUTPUT$nnDate/Time: $LONGDATETIME$n"
  • 12. LinuxTone IT 运维专家论坛文档 } # '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 *****nnNotification Type: $NOTIFICATIONTYPE$ nnService: $SERVICEDESC$nHost: $HOSTALIAS$nAddress: $HOSTADDRESS$nState: $SERVICESTATE$nnDate/Time: $LONGDATETIME$nnAdditional Info:nn$SERVICEOUTPUT$" } 定 义 了 4 种 报 警 命 令 , 后 面 两 种 msn 报 警 是 我 添 加 的 ; 邮 件 报 警 是 使 用 系 统 自 带 的 sendmail 来发送邮件的(注意要启动 sendmail 服务),而 msn 报警是使用我们上面所配置 的 msn 机 器 人 发 送 的 报 警 信 息 。 至此,整个 nagios 的监控和报警机制了解完毕。 注意我们在配置过程中的任何改动都记得要 去通过 /usr/local/nagios/bin/nagios –c /usr/local/nagios/etc/nagios.cfg 以检查配置文件是否正确, 如 果 正 确 则 可 以 重 启 nagios 加 载 新 配 置 (service nagios restart) 第 三 部 分 安 装 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 #cd ~/downloads #wget http://www.cacti.net/downloads/cacti-0.8.7d.tar.gz #tar zxvf cacti-0.8.7d.tar.gz
  • 13. LinuxTone IT 运维专家论坛文档 #mkdir –p /usr/local/wwwroot #cp –rf cacti-0.8.7.d /usr/local/wwwroot/cacti 下 面 开 始 导 入 数 据 库 , mysql 数 据 库 的 基 本 安 全 配 置 这 里 不 做 说 明 , 请 参 考 以 前 的 postfix 邮 件 安 装 文 档 中 的 mysql 设 置 部 分 。 #mysql –u root –p mysql>create database cacti; 创 建 一 个 数 据 库 供 cacti 使 用 mysql>use cacti; Mysql>source /usr/local/cacti/cacti.sql 导 入 mysql 数 据 库 Mysql>grant all privileges on cacti.* to cacti@localhost identified by ‘cactipass’; 添 加 一 个 数 据 库 账 号 cacti 密 码 为 cactipass 用 以 访 问 cacti 库 Mysql>flush privileges; 刷 新 权 限 信 息 Apache 设 置 #vi /etc/http/conf.d/cacti.conf 编辑 cacti 站点的配置文件,文件内容如下: Alias /cacti "/usr/local/wwwroot/cacti" <Directory "/usr/local/wwwroot/cacti"> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> 修改 cacti 的配置文件 #vi /usr/local/wwwroot/cacti/include/config.php 修改其中的数据库连接信息,设置好数据库主机地址,用户,密码信息。 至此安装完成,访问 http://ip/cacti/install 根据提示安装 cacti (ip 换成你对应的主机 ip 地址) 接 下 来 安 装 cacti 的 插 件 管 理 #cd ~/download/ #wget http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7d-PA-v2.4.zip #unzip cacti-plugin-0.8.7d-PA-v2.4.zip #mysql –u root –p cacti<pa.sql 导 入 sql 到 cacti 库 中 #cd cd files-0.8.7d/ #cp –rf * /usr/local/wwwroot/cacti 复制相关文件到 cacti 下
  • 14. LinuxTone IT 运维专家论坛文档 第 四 部 分 整 合 cacti 和 nagios 整合 cacti 和 nagios 是利用了 cacti 的一个插件 nagios for cacti,它的原理是将 nagios 的数据 通过 ndo2db 导入到 mysql 数据库( cacti 的库中),然后 cacti 读取数据库信息将 nagios 的 结 果 展 示 出 来 。 1.安装 ndoutils 首 先 需 要 安 装 ndoutils 以 将 nagios 的 数 据 能 导 入 到 mysql 数 据 库 中 。 #yum -y install mysql-devel 安装 mysql 开发包以编译 ndoutils #wget http://nchc.dl.sourceforge.net/sourceforge/nagios/ndoutils-1.4b7.tar.gz #tar zxvf ndoutils-1.4b7.tar.gz #cd ndoutils #./configure --enable-mysql --disable-pgsql --with-mysql-lib=/usr/lib/mysql #make #cp config/ndomod.cfg /usr/local/nagios/etc 修 改 nagios 主 配 置 文 件 #vi /usr/local/nagios/etc/nagios.cfg 添 加 以 下 内 容 check_external_commands=1 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 修 改 配 置 文 件 ndocmd.cfg 和 ndo2db.cfg , 这 里 我 的 配 置 文 件 内 容 为 : [root@localhost downloads]# cat /usr/local/nagios/etc/ndomod.cfg |grep -v '^#'|sed /^$/d 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
  • 15. LinuxTone IT 运维专家论坛文档 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 #/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg 启动 ndo2db 2. 安 装 php-json npc 展示部分用到 json,需要在 php 中安装 php-json 的支持,centos 5 下的 php 版本默认是 5.1.6 不 带 json 支 持 , 无 法 简 单 地 通 过 yum install php5-json 方 式 来 安 装 。 #cd ~/downloads #wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.0.tar.bz2 #tar xvjf php-json-ext-1.2.0.tar.bz2 #cd php-json-ext-1.2.0 #phpize 编译前初始化 php 环境 #./configure #make #make install
  • 16. LinuxTone IT 运维专家论坛文档 #vi /etc/php.d/json.ini extension=php_json.so #/usr/sbin/apache2ctl graceful 重启 apache 为了验证是否成功可使用 phpinfo 查看是否已支持 json 3. 安 装 npc #cd ~/downloads #wget http://www.assembla.com/spaces/npc/documents/aUjAwmdW8r3BuPab7jnrAJ/download? filename=npc-2.0.0b.166.tar.gz #mv npc /usr/local/wwwroot/cacti/plugins/ 启用 cacti 的插 件功 能, 以 admin 用户 登陆 cacti, 在 console 中的 user management 里 对 admin 的用户权限进行编辑,勾选上 Plugin Management,然后到插件管理中心安装并启用 NPC 即可。 至此完成 nagios 和 cacti 的整合。