[原创] Nagios安装、配置、问题记录(2)

 

本文描述了我在使用Nagios的过程中遇到的一些问题、解决办法以及总结的注意事项。文章很长,请使用Ctrl+F定位到你需要的部分。

Nagios是一套强大的监控报警系统,但是你不花一些时间,是绝对不可能很好地配置它的。除非你只需要监控主机的alive等简单的情况(例如ping),否则请放弃幻想,以极大的耐心去研究它吧。

 

(1)被动监测的实现——NSCA

详情请点击这个链接

 

(2)5个使用check_http插件检测 http / https 服务的例子:

详情请点击这个链接

文章来源:http://www.codelast.com/

(3)监测交换机的端口流量/速率

我们无法在交换机上自己安装软件,所以不能像监测一台Linux服务器一样,写一个监测插件来放到被监测的机器上。但是,交换机一般都支持SNMP协议(不支持的很少),因此,可以通过SNMP协议来获取到交换机的各数数据。

通过SNMP来取交换机的数据也有好几种方法,可以通过snmpwalk命令来取数据,自己分析数据中的结果,也可以利用Nagios中现成的插件来完成。这里说的是利用Nagios的check_snmp插件来实现的方法。

首先你要保证你的Nagios Plugin在编译的时候已经把 check_snmp 插件编译出来了(在Nagios安装目录下的 libexec 子目录下,会有一个名为 check_snmp 的程序);如果没有,那么就说明你的Linux服务器环境少了点东西:net-snmp-utils 软件包。如果你的系统中已经安装过这个软件包,编译Nagios Plugin的时候,就会自动把 check_snmp给编译出来(不需要你自己指定编译参数);如果没有,当然就会少掉 check_snmp,但也不会报错。

有了check_snmp这个插件之后,如何使用?还需要和MRTG来配合使用。MRTG是一款可以绘流量图的软件。在安装前,你要确保你的系统中已经安装了以下库:gd,libpng,zlib。这里就不这些库的安装过程了,只说MRTG的安装。

解压源码安装包,之后configure:

./configure –prefix=/usr/local/mrtg-2

然后make,make install即可。安装之后,就要生成一个MRTG的配置文件了:

进入安装目录下:

cd /usr/local/mrtg-2

mkdir cfg

cd bin

./cfgmaker –global 'WorkDir: /usr/local/apache2/htdocs' –global 'Options[_]: bits,growright' –output /usr/local/mrtg-2/cfg/mrtg.cfg public@192.168.26.127

其中,cfgmaker 是用于生成配置文件的程序;/usr/local/apache2/htdocs 是你的web服务器的根目录(如果你不想在web页上查看流量曲线图,那么这里可以填任意路径,同时,下面的一些内容也就无所谓了),/usr/local/mrtg-2/cfg/mrtg.cfg是生成的配置文件的路径+文件名,192.168.26.127是你要取数据的远程服务器的IP地址。

文章来源:http://www.codelast.com/

然后再生成一个索引文件:

./indexmaker –output="/usr/local/apache2/htdocs/mrtg.html" –title="MRTG" /usr/local/mrtg-2/cfg/mrtg.cfg

索引文件的作用是使你可以在web页面中,以整合的方式查看所有通过SNMP获取到的数据绘成的图。

好了,现在MRTG的配置已经完成了,但MRTG还不能自动获取数据,我们需要在crontab中添加一个定时运行的任务,来调用MRTG去定期地获取数据:

编辑/etc/crontab文件,添加一行:

*/5 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/cfg/mrtg.cfg

这表示5分钟获取一次数据。

现在大功告成了,可以通过web页面查看MRTG生成的曲线图了,在浏览器中访问如下地址即可:

http://your_IP_address/mrtg.html

其中,your_IP_address是你的MRTG所在的服务器的IP地址或域名。

其实,要用Nagios的check_snmp插件来检测交换机端口的速率与MRTG的绘图没什么关系,因为我们的目的不是绘图,而是监测交换机端口流量速度,上面只是顺便把一些无关的内容写出来了。check_snmp插件只是利用了MRTG生成的日志文件(.log文件)来分析其中的内容,得到数据并进行监测。

那么,MRTG的日志文件格式是什么样的呢?在MRTG官方网站上有说明:http://oss.oetiker.ch/mrtg/doc/mrtg-logfile.en.html

从它的这篇有点不明不白的文章里,我们是可以得到一些有用信息的。但是,在我实际使用中,还是自己试验才得出了正确的结果。

找到与你要监测的交换机端口相关的MRTG日志文件,查看其内容的前N行(注意,不是末尾N行),可以看到类似于下面的内容:

1295179801 1096754878 2488338087

 

1295179801 1522839 2709629 1522839 2709629

1243339501 1516835 2686609 1516835 2686609

1243339500 1516367 2686296 1516835 2686609

1243339200 1446680 2639603 1453574 2639760

……

首先,所有行的第1列都是Unix时间戳的值,代表产生这条记录的时间。

 

 

其次,第一行是与众不同的一行,它只有3列,第二列代表该端口上流入(incoming)的数据的字节数,第三列代表该端口上流出(outgoing)的数据的字节数。

 

再次,从第二行开始,下面所有行的格式都一样,第2、3、4、5列分别代表平均的数据流入(incoming)速率,平均的数据流出(outgoing)速率,最大的数据流入(incoming)速率,最大的数据流出(outgoing)速率。并且,它们的单位均为Bytes/s,即 字节/秒。如果你要换算成平常我们在谈及带宽时常用的单位Mbps,需要将这个值先乘8,再除以1000000

 

如果你要获取当前的带宽值,就用第二行的数据好了。因为对带宽的监测总是通过流入/流出的数据除以流逝的时间得到的,所以,除非时间取极限趋于0,否则是不可能得到一个当前带宽的精确值的,在MRTG5分钟采样一次的情况下,我们可以用5分钟的平均值来当作当前的带宽值。经过与Cacti的监测值的对比,我得出一个结论:这样做是合理的,两个值很接近。

 

 

至于这个值怎么取,很简单:

取incoming值:  

sed -n '2p' $MRTG_FILE | awk '{print $2}'

取outgoing值:  

sed -n '2p' $MRTG_FILE | awk '{print $3}'

 

 

其中,变量 MRTG_FILE 是你与你要监测的交换机端口相对应的MRTG日志文件路径,请为其赋上正确的值。下面的处理,应该就不用我说了吧?获取到了这个值,就可以在Nagios中根据值的大小来监测报警了。

 

 

(4)宏 $USER1$,$USER2$ …的作用

在commands.cfg文件(命令定义文件中),你可能会看到有些默认的命令中使用了 $USER1$ 这样的宏,这些宏是在resource.cfg文件中定义的,你可以自己定义或修改宏。默认的$USER1$是指代Nagios插件的路径。

文章来源:http://www.codelast.com/

(5)Android上的Nagios客户端

如果你有Android设备,那么随时监控Nagios的状态就方便了!如下几个应用(还有更多),可以让你方便地在Android设备上查看你的Nagios状态,请安装apk后自己体会吧:

http://code.google.com/p/nagroid/   tip:如果要通过SSH tunnel的https访问Nagios,则该应用可以和这个Android应用非常好地配合:http://code.google.com/p/connectbot/

http://code.google.com/p/nagmondroid/

文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):

wechat qrcode of codelast

发表评论