• 1. Nagios 4.0.7 简介2014.7.10
  • 2. Nagios简介 Nagios工作原理 Nagios安装与配置 Nagios的启动与停止 Web界面查看监控信息 Nagios邮件报警的配置
  • 3. Nagios简介简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。 Nagios原名为NetSaint,由Ethan Galstad开发并维护至今。NAGIOS是一个缩写形式: "Nagios Ain't Gonna Insist On Sainthood" Sainthood 翻译为圣徒,而"Agios"是"saint"的希腊表示方法。Nagios被开发在Linux下使用,但在Unix下也工作得非常好。
  • 4. 主要功能 网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH) 主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin) 可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……) 可以通过配置Nagios远程执行插件远程执行脚本 远程监控支持SSH或SSL加通道方式进行监控 简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等) 包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等) 可并行服务检查 能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查 当服务或主机出现问题时发出通告,可通过email, pager, sms 或任意用户自定义的plugin进行通知 能够自定义事件处理机制重新激活出问题的服务或主机 自动日志循环 支持冗余监控 包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等
  • 5. Nagios工作原理工作原理 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。 启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。 Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有 nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以 通过运行./check_xxx –h 来查看其使用方法和功能。
  • 6. 四种监控状态 监控远程Linux主机原理(通过NRPE)
  • 7. NRPE 总共由两部分组成: check_nrpe 插件,位于监控主机上 NRPE daemon,运行在远程的Linux主机上(通常就是被监控机) Nagios 通过NRPE 来远端管理服务,监控过程如下: 1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。 2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon 3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc) 4. 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中。 5. Nagios 依次读取队列中的信息,再把结果显示出来。
  • 8. 监控远程Windows主机原理(通过check_nt和NSCP) nagios监控windows主机的资源信息需要通过执行check_nt这个脚本,然后穿过远程windows主机的防火墙,和windows主机通信。     被监控客户端要安装NSCP(NSClinet++)这个软件,这个服务开启,会一直监听12489端口。
  • 9. Nagios安装与配置Nagios相关安装 准备工作: 需要以root身份安装Nagios。确保在CentOS安装了下面几个软件包: GCC compiler GD development libraries(PHP的支持库) Apache (依赖apr、apr-util和pcre库) PHP 需要安装的软件: 监控机: nagios-xxx.tar.gz nagios-plugins-xxx.tar.gz nrpe-xxx.tar.gz Linux被监控机: nagios-plugins-xxx.tar.gz nrpe-xxx.tar.gz windows被监控机: nsclient++ (nscp)
  • 10. 监控机上的安装步骤: 1.创建nagios用户及用户组 useradd nagios passwd nagios (指定nagios用户的密码) 注: nagios用户创建后会默认属于一个nagios的用户组。 2.编译安装nagios a.进入nagios压缩文件所在目录解压文件,并进入解压后的目录 tar zxvf nagios-4.0.7.tar.gz cd nagios -4.0.7 b.运行nagios配置脚本,指定安装目录和用户组 ./configure –-prefix=/usr/local/nagios –-with-command-group=nagios c.编译源码 make all d.安装二进制,init脚本,sample配置文件和设置外部命令目录权限。
  • 11. make install make install-init make install-config make install-commandmode 3.编译安装nagios插件 tar xzf nagios-plugins-2.0.2.tar.gz cd nagios-plugins-2.0.2 ./configure --with-nagios-user=nagios --with-nagios-group=nagios make && make install 4.安装nrpe插件 tar zxvf nrpe-2.15.tar.gz cd nrpe-2.15 ./configure make all make install-plugin
  • 12. 5.配置Apache 找到apache 的配置文件/usr/local/apache2/conf/httpd.conf,进行如下操作: a.修改User、Group为nagios(自己创建的用户及组); b.在标签中添加index.php; c.增加 AddType application/x-httpd-php .php d.为了安全起见,一般情况下要让nagios 的web 监控页面必须经过授权才能 访问,这需要增加验证配置,即在httpd.conf 文件最后添加如下信息: #setting for nagios ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" AuthType Basic Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd //用于此目录访问身份验证的文件 Require valid-user
  • 13. Alias /nagios "/usr/local/nagios/share" AuthType Basic Options None AllowOverride None Order allow,deny Allow from all AuthName "nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd Require valid-user e.创建apache目录验证文件,指定登录密码  /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd admin 这样就在/usr/local/nagios/etc 目录下创建了一个htpasswd 验证文件,当 通过http://192.168.42.47/nagios/ 访问时就需要输入用户名和密码了。 f. 启动Apache服务 /usr/local/apache2/bin/apachectl start
  • 14. Linux被监控机上的安装步骤: 1.添加用户 useradd nagios passwd nagios(指定用户密码) 2.安装nagios插件 tar zxvf nagios-plugins-1.4.16.tar.gz cd nagios-plugins-1.4.16 ./configure --prefix=/usr/local/nagios make && make install 这一步完成后会在/usr/local/nagios/下生成三个目录include、libexec和share。 修改目录权限: chown nagios.nagios /usr/local/nagios chown -R nagios.nagios /usr/local/nagios/libexec 3.安装nrpe daemon tar zxvf nrpe-2.15.tar.gz cd nrpe-2.15 ./configure make all make install-plugin (不是必须的) make install-daemon //安装daemon make install-daemon-config //安装配置文件
  • 15. 4.查看nrpe是否工作正常 使用上面在被监控机上安装的check_nrpe 这个插件测试NRPE 是否工作正常。 /usr/local/nagios/libexec/check_nrpe -H localhost Windows被监控机上的安装步骤: 1.下载 NSCP-0.4.1.105-x64.msi 安装包 2.双击运行,根据自己的情况按步骤进行安装 3.修改nsclient.ini配置文件(确认一下allow_hosts、port等选项是否正确) 4.启动nsclient++服务
  • 16. 配置nagios Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的Nagios 配置没有任何监控内容,仅是一些模板文件。若要让Nagios 提供服务,就必须修改配置文件,增加要监控的主机和服务,下面将详细介绍。 1.Nagios默认配置文件介绍,如下:
  • 17. (本页无文本内容)
  • 18. 2. 配置文件之间的关系 在nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令,模板等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。 成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点: 第一:定义监控哪些主机、主机组、服务和服务组;  第二:定义这个监控要用什么命令实现;  第三:定义监控的时间段;  第四:定义主机或服务出现问题时要通知的联系人和联系人组。 为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义对象创建独立的配置文件: 创建hosts.cfg文件来定义主机和主机组 创建services.cfg文件来定义服务 用默认的contacts.cfg文件来定义联系人和联系人组 用默认的commands.cfg文件来定义命令 用默认的timeperiods.cfg来定义监控时间段 用默认的templates.cfg文件作为资源引用文件
  • 19. 3.配置文件详解 (1)templates.cfg文件: nagios主要用于监控主机资源以及服务,在nagios配置中称为对象,为了不必重复定义一些监控对象,Nagios引入了一个模板配置文件,将一些共性的属性定义成模板,以便于多次引用。这就是templates.cfg的作用。 (2) resource.cfg文件: resource.cfg是nagios的变量定义文件,文件内容只有一行: $USER1$=/usr/local/nagios/libexec 其中,变量$USER1$指定了安装nagios插件的路径,如果把插件安装在了其它路径,只需在这里进行修改即可。需要注意的是,变量必须先定义,然后才能在其它配置文件中进行引用。 (3)commands.cfg文件: 此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。 如:检测主机是否存活的命令: define command{ command_name check-host-alive #命令名称,用来检测主机状态。 command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 }
  • 20. (4)  hosts.cfg文件: 此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息,根据实验目标配置如下: define host{ use linux-server #引用主机linux-server的属性信息,linux-server主机在templates.cfg文件中进行了定义。 host_name Nagios-Linux #主机名 alias Nagios-Linux #主机别名 address 192.168.42.238 #被监控的主机地址,这个地址可以是ip,也可以是域名。 } #定义一个主机组 define hostgroup{ hostgroup_name linux-servers #主机组名称,可以随意指定。 alias linux-servers #主机组别名 members Nagios-Linux #主机组成员,其中“Nagios-Linux”就是上面定义的主机。 }
  • 21. (5)services.cfg文件: 此文件默认也不存在,需要手动创建,services.cfg文件主要用于定义监控的服务和主机资源,例如监控http服务、ftp服务、主机磁盘空间、主机系统负载等等。 define service{ use local-service #引用local-service服务的属性值,local-service在templates.cfg文件中进行了定义。 host_name Nagios-Linux #指定要监控哪个主机上的服务,“Nagios-Server”在hosts.cfg文件中进行了定义。 service_description check-host-alive #对监控服务内容的描述,以供维护人员参考。 check_command check-host-alive #指定检查的命令。 } (6)contacts.cfg文件: contacts.cfg是一个定义联系人和联系人组的配置文件,当监控的主机或者服务出现故障,nagios会通过指定的通知方式(邮件或者短信)将信息发给这里指定的联系人或者使用者。
  • 22. define contact{ contact_name zyj #联系人的名称,这个地方不要有空格 use generic-contact #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义 alias Nagios Admin email zhang_yingju@163.com } define contactgroup{ contactgroup_name ts #联系人组的名称,同样不能空格 alias Technical Support #联系人组描述 members zyj #联系人组成员,其中“zyj”就是上面定义的联系人,如果有多个联系人则以逗号相隔 }
  • 23. (7)  timeperiods.cfg文件: 此文件只要用于定义监控的时间段,下面是一个配置好的实例: #下面是定义一个名为24x7的时间段,即监控所有时间段 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 }
  • 24. (8) cgi.cfg文件: 此文件用来控制相关cgi脚本,如果想在nagios的web监控界面执行cgi脚本,例如重启nagios进程、关闭nagios通知、停止nagios主机检测等,这时就需要配置cgi.cfg文件了。 由于nagios的web监控界面验证用户为admin,所以只需在cgi.cfg文件中添加此用户的执行权限就可以了,需要修改的配置信息如下: default_user_name=admin authorized_for_system_information=nagiosadmin,admin authorized_for_configuration_information=nagiosadmin,admin …… (9)nagios.cfg文件: nagios.cfg默认的路径为/usr/local/nagios/etc/nagios.cfg,是nagios的核心配置文件,所有的对象配置文件都必须在这个文件中进行定义才能发挥其作用,这里只需将对象配置文件在Nagios.cfg文件中进行引用即可。如下: log_file=/usr/local/nagios/var/nagios.log # 定义nagios日志文件的路径 cfg_file=/usr/local/nagios/etc/objects/commands.cfg # “cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。 check_external_commands=1 # 该变量用于设置是否允许nagios在web监控界面运行cgi命令; ……
  • 25. 验证Nagios 配置文件的正确性 Nagios 在验证配置文件方面做的非常到位,只需通过一个命令即可完成: /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg   Nagios提供的这个验证功能非常有用,在错误信息中通常会打印出错误的配置文件以及文件中的哪一行,这使得nagios的配置变得非常容易,报警信息通常是可以忽略的,因为一般那些只是建议性的。  看到上面这些信息就说明没问题了,然后启动Nagios 服务。
  • 26. Nagios的启动与停止 通过初始化脚本启动、停止nagios 1. /etc/init.d/nagios start|stop|restart|reload…… 2. service nagios start|stop|restart|reload…… 手动启动nagios 启动: /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg 停止: kill
  • 27. web界面查看监控信息启动Apache和nagios之后,登录Nagios Web监控页http://192.168.42.47/nagios/ 查看相关信息 1. 点击左面的Current Status -> Hosts 可以看到所定义的三台主机已经全部UP了。
  • 28. 2.点击Current Status -> Services 查看服务监控情况。
  • 29. 对远程主机是否存活作监控,我们可以使用ping 工具对其监测。还有一些远程主机服务,例如ftp、ssh、http,都是对外开放的服务,即使不用Nagios,我们也可以试的出来,随便找一台机器看能不能访问这些服务就行了。但是对于像磁盘容量,cpu负载这样的“本地信息”,Nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力。毕竟没得到被控主机的适当权限是不可能得到这些信息的。为了解决这个问题,”NRPE”这个附加组件就派上用场了,用它可以完成对远程Linux 类型主机“本地信息”的监控。同理,要想监控windows主机,也要使用一个附加组件NSCP,通过监控机的check_nt插件与NSCP通信,才能对windows本地的资源进行监控。 Nrpe的使用前提: 监控端: 安装了nrpe插件;在commands.cfg 中创建check_nrpe 的命令定义,因为只有在commands.cfg 中定义过的命令才能在services.cfg 中使用;创建对被监控主机的监控项目(Nrpe命令格式: ./check_nrpe –H 被监控的主机 –c 要执行的监控命令) 被监控端: 安装了nrpe(包括daemon和实例配置文件等); 有可使用的nrpe命令 NSCP的使用前提: 监控端:在commands.cfg 中创建check_nt 的命令定义,因为只有在commands.cfg 中定义过的命令才能在services.cfg 中使用;创建对被监控主机的监控项目(nt命令格式: ./check_nt –H 被监控的主机 –v 命令和参数) 被监控端:安装并开启了NSCP服务
  • 30. Nagios邮件报警的配置 nagios发警告邮件是采用本机的smtp服务,可以查看commands.cfg中关于发邮件的命令的定义,使用本机的mail命令,这就需要开启本机的smtp服务,为了安全可以在防火墙上设置拒绝其他的机器连本机的25号端口 现在我们的网络里面有一个邮件服务器,所以要求使用这台现有的邮件服务器,不开启本机的smtp服务,这就需要重新定义命令使用第三方软件sendEmail.  这里我们使用的邮件服务器的地址为smtp.qq.com , 用来发邮件的帐号1192429495@test.com SMTP验证的用户名 1192429495 密码 password  邮件报警配置步骤: 1.安装sendEmail a.下载sendEmail-v1.56.tar.gz安装包 b.解压 tar zxvf sendEmail-v1.56.tar.gz c.将可执行程序复制 cp sendEmail /usr/local/bin ,并确保有执行权限 2.修改commands.cfg中关于发邮件的命令的定义,我们现在来修改notify-service-by-email这个命令,如下:
  • 31. 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$\n" | /usr/local/bin/sendEmail -f 1192429495@qq.com -t $CONTACTEMAIL$ -s smtp.qq.com -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ -xu 1192429495 -xp password} 3.修改联系人的相关定义 define contact{ contact_name nagios use generic-contact alias Nagios Admin email zhang_yingju@163.com //将此处改为联系人的邮箱地址 }
  • 32. 到此,邮件报警的配置基本上就完成了。如果还有其他设置,比如 报警时间段/报警间隔,可以根据自己的情况设置,我们在这里不再做详细解释。其实sendEmail是一个十分有用的程序,我们在这个地方用了它,其实别的地方也可以用,典型的好处就是你不需要每台机器都装sendmail,开启smtp服务.直接用现成的一台邮件服务器就行了,这无疑很大的加强了系统的安全性,也节约了资源. 我们可点击Reports-> Notification 查看服务报警情况。如图:
  • 33. End!Thanks