开篇
    NagVis是Nagios的一个插件,它在用户选择一个背景图片上显示主机和服务状态。背景图片必须是PNG格式,但可以自己选择背景图片,可以是图、系统文档图片、机房照片,或者系统环境的示意图等,如图18.1所示。
    通过Web接口,可以任意地将对象放在背景的任何位置。NagVis会根据对象的状态显示不同的图标:红色表示危急状态(CRITICAL),×××表示告警状态(WARNING),绿色表示正常状态(OK),以及一个灰色背景的问号表示未知状态(UNKNOWN)。如果设置了欢迎信息,它会由一个绿色按钮及其上面的一个角×××片表示。
    对于主机和服务有不同的图标表示;在默认模板中,主机图标是矩形的,而服务图标是圆形的。一个完成的NagVis展示——在NagVis中称为图——显示在图18.2中。更多的例子——如使用地理地图或机房照片作为背景——可以在NagVis首页找到。
   
作为NagVis模板的一个系统环境示意图
图18.1:作为NagVis模板的一个系统环境示意图。
    除了主机和服务之外,主机和服务组也可以整合到NagVis展示中,以及其它的图。因此一个地理概况图可以用在开始页,它用一个图标表示被监控的位置,并将图标链接到一个详细的专门描述该位置的NagVis图。
    如果一个图标包含几个状态,比如主机和服务组,NagVis会显示最高优先级的状态。CRITICAL比WARNING优先级高,而WARNING比 UNKNOWN高,UNKNOWN比欢迎信息更受关注,而OK是所有状态中优先级最低的。如果一个主机组中的任意主机出现CRITICAL状况,这会相应地显示在整个主机组上。
    对于主机和主机组,NagVis允许你选择只用主机状况来确定显示的状态,或者同时包括这些主机上的服务状态(见394页)。当选择后一种时,即使某个主机的一个服务处于CRITICAL状态,它都会显示一个红色的停止图标。
    非常有趣的是NagVis只能评估硬状态(见394页)。对于使用Web接口的日常工作,如果不是每一个临时软CRITICAL状态都立刻产生一个红色信号,那会很有用。
显示系统环境
图18.2:显示系统环境
    特别对于面向对象程序设计有好处的是NagVis利用了一些面向对象的概念。例如,系统继承针对单个图和图上设置的全局配置,并将这些配置传递给单个对象,其中本地设置选项总是可以被覆载。这可以很大范围内简化配置,同时NagVis还在图形化的编辑器上(也称为Web用户接口,WUI)指出哪些设置是基于对象本身的,以及哪些是继承来的(见399页图18.8)。
    NagVis是根据GNU Public License Version 2 (GPLv2)授权的;下面的介绍基于1.3版本。
    一、安装
    NagVis使用了NDOUtils并使用PHP实现。因此,NagVis除了需要运行NDO数据库,还需要量一个支持PHP 4.2或以上的Web服务器,以及访问NDO数据库所需要的库php-mysql和支持划线的库php-gd。根据使用的发行版和PHP版本不同,库的名称可能有所不同。对于 Debian “Etch”和PHP5,需要以下库libapache2-mod-php5、php5、php5-common、php5-gd和php-mysql。
    NagVis并不一定需要与Nagios和NDOUtils安装在同一台计算机上,虽然在许多情况下它们是都是安装在同一个主机上。NDO数据库的配置 ——NagVis文档上称为后台(Backend)——可以根据你的需要指向任何系统。NagVis甚至允许分别为每一个单独的对象选择后台,这样就可以生成在同一个图形中包含几个Nagios安装的图。
     1.安装源代码
    NagVis源代码可以从http://www.nagvis.org/downloads下载,要先解压到一个目录:
   
 
linux:~ # tar xvzf /pfad/zu/nagvis-1.3.tar.gz
...
如果之前有安装过NagVis,你应该先备份。然后你拷贝解压时创建的目录(这里是nagvis-1.3)到/usr/local/nagios/share的nagvis:
 
linux:~ # mv nagvis-1.3 /usr/local/nagios/share/nagvis
linux:~ # ls -F /usr/local/nagios/share/nagvis
INSTALL LICENCE README config.php etc/ index.php nagvis/ var/ wui/
重复的目录名nagvis可能看起来会有些奇怪,但这是正确的:
 
/usr/local/nagios/share/nagvis
/usr/local/nagios/share/nagvis/nagvis
/usr/local/nagios/share/nagvis/wui
/usr/local/nagios/share/nagvis表示NagVis的安装主目录,而子目录nagvis包含了NagVis应用,及其配置。最后子目录wui包含了图形化编辑器,它使我们可以通过浏览器编辑NagVis图。
目前,正确的目录和文件访问权限必须手动设置。首先你需要确定Web服务器运行的用户权限(参见39页,第1.2节):
 
linux:~ # grep "^User" /etc/apache2/apache2.conf
User www-data
linux:~ # id www-data
uid=33(www-data) gid=33(www-data) Groups=33(www-data),9001(nagcmd)
第一个grep命令查找Web服务器配置文件的相应用户——这里是Apache2,然后是使用id命令搜索这个用户的主组。这就是在gid部分的值。现在就可以相应地设置访问权限:
 
linux:~ # chown www-data.www-data -R /usr/local/nagios/share/nagvis
linux:~ # chmod 664 /usr/local/nagios/share/nagvis/etc/nagvis.ini.php
linux:~ # chmod 775 /usr/local/nagios/share/nagvis/nagvis/p_w_picpaths/maps
linux:~ # chmod 664 /usr/local/nagios/share/nagvis/nagvis/p_w_picpaths/maps/*
linux:~ # chmod 775 /usr/local/nagios/share/nagvis/etc/maps
linux:~ # chmod 664 /usr/local/nagios/share/nagvis/etc/maps/*
linux:~ # chmod 775 /usr/local/nagios/share/nagvis/var
linux:~ # chmod 664 /usr/local/nagios/share/nagvis/var/*
为了使用Web用户接口,必须创建中央配置文件并确保只有成功认证后才可以访问NagVis。
    2.初始化配置
    在目录/usr/local/nagos/share/nagvis/etc中有一个NagVis中央配置文件模板config.ini.php,只需要进行重命令和修改:
   
 
linux:~ # cd /usr/local/nagios/share/nagvis/etc
linux:nagvis/etc # cp config.ini.php.dist config.ini.php
linux:nagvis/etc # chown www-data.www-data config.ini.php
linux:nagvis/etc # chmod 664 config.ini.php
命令chown和chmod能够为Web用户(这里是www-data)和他的组设置正确的访问权限。
除了后台(NDO数据库)的配置,包含的config.ini.php已经有可用的默认值。下面的描述只限于介绍最重要的参数:
 
[global]
language="german"
refreshtime=60
在[global]部分你可以设置语言language;默认值是english。refreshtime定义了每经过多少秒钟浏览器的显示刷新一次。
在[defaults]部分指定了定义的对象从图配置继承的默认值。如果需要,这些值可以通过图来覆载。最好是在这里定义在大多数对象都相同的配置,以避免在对象定义中显式定义这些配置时做重复的工作。
 
[defaults]
backend="ndomy_1"
icons="std_medium"
recognizeservices=1
onlyhardstates=1
backend指定了哪一个NDO数据库作为默认的后台。这个名称可以是任意值,但后台本身仍然需要在一个单独的部分定义。如果你只是尝试一下,最好保留默认名称ndomy_1。
参数icons定义了从目录中设置的图标。其中/nagvis/nagvis/p_w_picpaths/iconsets就是所使用的目录。它包括了4个图标集:std_、small、std_medium、std_big,还有folder。其它的图标可以从NagVis的主页下载,或者可以自己创建图标。
设置recognizeservices=1可以保证在确定主机和主机组的总体状态时,伴随的服务的当前状态也会包括在内。值0则关闭此行为。
而onlyhardstates=1则告诉NagVis只报告硬状态。默认值0也包含了软状态。
[wui]部分可以对NagVis编辑器进行设置。
 
[wui]
autoupdatefreq=25
maplocktime=5
autoupdatefreq确定了多长时间(秒)Web用户接口自动地保存修改,而指定在最后一次修改后,当前正被编辑的图的任意更多的修改应该被锁定多少分钟。这样做的目的是防止多个用户同时编辑相同的图。
在文件系统(base)以及浏览器上——NagVis数据和NagVisCGI,指向NagVis的安装路径是在[paths]部分指定的:
 
[paths]
base="/usr/local/nagios/share/nagvis/"
htmlbase="/nagios/nagvis"
htmlcgi="/nagios/cgi-bin"
这里列出的默认值是上面描述的标准安装路径。
用于访问NDO数据库后台的配置位于配置文件的末尾:
 
[backend_ndomy_1]
backendtype="ndomy"
dbhost="localhost"
dbport=3306
dbname="nagios"
dbuser="nagios"
dbpass="verysecret"
dbprefix="nagios_"
dbinstancename="default"
maxtimewithoutupdate=180
这个部分的名称必须包含[defaults]下backend参数指定的名称,按照命名模式:[backend_value_of_backend]。这里默认是ndomy_1。如果backend参数值不与定义的后台部分的任何一个配置匹配,NagVis将不会工作。
backendtype定义了后台类型,而这里的ndomy——一个基于MySQL的NDO数据库——是唯一的可选值。
dbhost和dbport指定了主机名或IP地址,以
及附加的用于访问数据库的TCP端口。dbname包含了NDO数据库的名称,dbuser和dbpass指定访问的用户名和密码。
dbprefix和dbinstancename定义的默认值是为NDOUtils标准安装所设置的。假定你还没有修改文件ndomod.cfg(384页,第17.4.1节)中的参数instance_name和文件中 ndo2db.cfg(385页,第17.4.2节)的参数db_prefix,就可以使用这里的值。
需要特别注意的一个参数是maxtime-withoutupdate:它定义了 Nagios出现状态更新的时间(秒)。如果超出了这里指定的时间,NagVis会认为数据已经过时并显示一个错误。如果NagVis访问在几个服务器上的分布式NDO数据库,非常重要的一点是要保证服务器之间的时间是同步的,否则在NagVis遇到时间差大于maxtimewithoutupdate秒时,它将不会工作。
这里需要提到另一个关于NDO数据库和NagVis的数据交换问题:NagVis评估当前程序状态。然而,3.0b1之前版本的Nagios仅仅在每天日志文件修改后将它写到NDO数据库。从3.0b1版本开始,Nagios变为每5秒钟更新状态,这样NagVis就一直拥有最新的信息。
    3.用户认证
    NagVis要求用户认证。否则,它会报错。
    如果Nagios的share目录根据认证不能访问,如48页的Apache配置,应该在Apache配置文件/etc/apache2/conf.d/nagios中修改配置。认证数据最好是从CGI目录读取。
NagVis安装应用指南:用户认证
图18.3:右击显示的图形,会出现菜单
    二、创建NagVis图
    NagVis配置接口是通过URL:http://nagiosserver/nagios/wui/index.php访问。这里可以使用自己的Nagios主机名替代nagiosserver(图18.3显示的开始页)。
    它是通过右击鼠标后打开的菜单操作的。对于能用本身的菜单覆盖NagVis菜单的浏览器,如果你第二次右击鼠标就能使浏览器的菜单消失。
    如果没有合适的PNG格式的背景图片,可以通过菜单项Manage | Backgrounds创建一个新的空背景图片,如图18.4所示。在这个例子中,我们创建了一个800x600像素的灰×××片。
创建NagVis图
图18.4:创建一个新的空背景图片
    这个图片在屏幕上显示的是原始尺寸,没有缩放的。为了避免出现滚动条,它不应该太大,同时要根据屏幕分辩率和考虑可能的窗口帧来使用合适的大小。
    之后图片的大小只能在有限的范围内作调整的:虽然可以在任意时候上传或创建一个背景图片,但对于已经放置的对象是不受背景的大小或其它属性变化而影响的,所以它们可能不能很好地适应新的背景图片。这时只能去重新设置所有对象的位置。最好的方法是在建立大型图之前先在一个明确的环境中试验一小部分的对象。
创建NagVis图
图18.5:如果Map Iconset项仍然是空的,NagVis使用中央配置中的默认值。
    图18.5:如果Map Iconset项仍然是空的,NagVis使用中央配置中的默认值。
    现在可以为生成或上传的图片创建一个新的图。通过菜单项Manage |Maps(图18.3),可以浏览图18.5所显示的对话框。这里可以定义图的名称并选择背景图片。如果每一个认证用户都能够看到这个图,可以输入 EVERYONE到User with read permissions。而另一方面,对于User with write permissions可能会输入一个特定的用户,或者多个用逗号隔开的用户名。虽然这个例子中定义了图标集,但这是可选的。
    新创建的图可以在NagVis自动打开为编辑模式。你可以在后面通过打开的对话框的上下文菜单的菜单项Open Map打开,或者直接从URL http://nagiosserver/nagios/nagvis/wui/index.php?map=mapname打开它。
 
创建NagVis图
图18.6:使用图形化接口插入对象
    图18.5中创建的图的名称mapname是Test。现在可以在图上使用鼠标右键插入对象(见图18.6)。一个对象可以是一个图标、一条线或者一个特定的对象。图标和线表示一个主机或服务的当前状态,并且也可以代表整个主机或服务组。图标可能仅反应一个图的总体状态。特定对象是代表无状态对象(比如,可能也是图标)或文本框的图形,这也可能是由一个超链接提供的。
    选择菜单项Add Object | Icon | Hostgroup,你就可以插入一个主机组。然后你可以移到目标位置,通过鼠标左键定义图标的方向(图标位置可以在后面修改)。
    完成后,就会打开一个对话框,见图18.7。backend_id项仍然可以为空,然后NagVis将使用中央配置文件config.php.ini中的 backend参数值。在hostgroup_name下拉菜单中,NagVis允许在定义的主机组中进行选择。
    图标可以根据x和y坐标确定位置,坐标可以通过输入数字值或使用鼠标确定。对于一般图标,点(x,y)是相对于中心的位置;而对于线条,就是起点和终点。 z坐标只用于图标重叠。值为0表示图片在底部并作为背景,而有最大z值的对象在最前面。如果对象插入时z坐标留空,它会被自动地赋值为1。
 
创建NagVis图
图18.7:在图形化接口上定义一个主机组
    参数recognize_services允许覆载配置文件config.ini.php中设置的recognizeservices值,同样only_hard_states类似地控制参数onlyhardstates的覆载。
    使用这种方法插入的对象总是出现在带所选图标集的OK图标的图形化编辑器中;而Web则不考虑它的实际状态。
    将鼠标移到图标上方,就会有一个悬停菜单打开,如图18.8所示。菜单中可以很清楚地区分出哪些设置是继续的、哪些是直接在对象中指定的。如果点击Change链接,该设置可以被重新修改。
 
创建NagVis图
图18.8:将鼠标移到所插入对象上方时,会打开一个悬停菜单
    完成编辑后,不要忘记使用上下文项Save(见396页,图18.3)保存修改。然后菜单项Open Map in NagVis将会显示最后的完成视图,这时它显示的是对象的实际状态。
    在图18.9中,有一个文本框被添加到主机组图标上。在它旁边显示的域是一个悬停菜单,将鼠标移到对象上,它会显示对象的信息以及它的状态。这个例子显示主机组的两个主机的Not OK状态,以及已经确认的欢迎信息。

 
创建NagVis图
图18.9:最终视图的对象及文本框和悬停菜单
    1.文本方式编辑配置
    NagVis将一个图的整个配置保存在文本文件中,这个文件可以用一个文本编辑器进行编辑。这些文件保存在目录/user/local/nagios /share/nagvis/etc/maps/中。如果正在使用一个已知光栅的背景图片,可以往WUI插入多个对象,然后使用确定的坐标继续在编辑器中编辑图。这就是图18.2中创建的图。背景图片(图18.1)是用OpenOffice创建的,以获取可再现的光栅;OpenOffice画图最后导出为一个PNG文件。
    文本文件的配置选项都在在线文档中有描述,它们的数量很庞大。
    2.将NagVis图添加到Nagios Web接口
    NagVis图可能会被整合到Nagios Web接口中。如图18.10所示,第三个帧被添加到index.html页面上,它在主窗口旁边绑定了一个32像素高的图。不管管理员当前在研究什么,最重要的状态(这里是主机组)都总是直接显示,并且可以通过单击鼠标键来访问。在使用NagVis时,用户接口简直可以随心所欲!
   
创建NagVis图
图18.10:作为Nagios Web 接口“脚注”的Nagios Web图