前言:

如 果Linux系统没有SNMP的环境,如何来使用Zenoss进行监控呢?Zenoss提供了基于SSH的远程命令方式,基本工作原理是Zenoss通过 SSH向远程主机发送执行命令,运行位于主机上的Plugin来收取数据。这里要求被监控主机上必须安装Zenoss Plugin(安装plugin是花我最多时间的地方)。

测试环境:
Zenoss box:openSUSE11 (hostname:zenoss ip: 192.168.2.10)
被监控Linux:openSUSE11 (hostname:linux11 ip:192.168.2.11)

在Linux上安装Zenoss Plugin:

Zenoss Plugin可在 这里下载
在下载之前请先检查你的python版本:rpm -q python,如果已经是2.5了,那就请下载源码包。

在linux11上安装zenoss-plugin (可以使用root)
wget [url]http://downloads.sourceforge.net/zenoss/Zenoss-Plugins-2.0.4.tar.gz[/url]
tar zxvf Zenoss-Plugins-2.0.4.tar.gz
cd Zenoss-Plugins-2.0.4
python ./setup.py build
python ./setup.py install


如果出现下面的错误请安装python-devel
error: invalid Python installation: unable to open /usr/lib/python2.5/config/Makefile (No such file or directory)

zenoss plugin还需要setuptools,否则运行zenplugin.py时会出现 ImportError: No module named pkg_resources

wget [url]http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c7.tar.gz#md5=dedbf6a4f71cd6deaf13ee885054f16b[/url]
tar zxvf setuptools-0.6c7.tar.gz
cd setuptools-0.6c7
python ./setup.py instal
l

测试zenoss plugin是否工作正常
zenplugin.py --list-plugins
platform 'linux2' supports the following plugins:
uptime
intf
process
tivo
mem
io
mysql
apache
disk
cpu
smart

运行正常,plugin安装完毕,可以执行zenplugin.py cpu来查看CPU的信息(--help看帮助)。如果zenoss plugin的安装还有问题的请给我留言。

配置Zenoss:

在配置开始之前先将linux11的SNMP关掉。#rcsnmpd

点击Add Device,输入: rcsnmpd stop
Device Name: 192.168.2.11
Device Class Path: /Server/Cmd //这里不能选择/Server/Linux,后面有解释
Discovery Protocol: none
点击下方Add Device

这时设备192.168.2.11已经添加,但没有任何信息,我们需要修改zenoss的收集数据的方式:
点击标签栏左侧下拉菜单->More->zProperties,依次修改下面内容:
zCommandPassword:xxxxxx //填写你用户的密码
zCommandPath:/usr/local/bin //这是被监控的linux11上zenplugin.py所在的目录
zCommandUsername: root //指定zenoss用什么用户连接被监控主机,我就直接用root了,也可是系统内的其他用户,但会不会有权限问题我没测试过。
(看出zenoss有什么问题了吧,你见过密码在用户名之前输入的吗,而且两者还隔得老远,不得不BS一下)

点击Save。留意一下Save下方的
这里会出现所有用户已修改过的项,通过Delete可以将其值恢复为默认,这个设计不错。

下面需要进行两次Model Device的操作,根据文档上的说法是第一次Model是获取platform信息,以决定使用何种plugin,第二次才能获得系统的详细信息,如interface,filesystem等等。(很雷人的设计,嘿嘿)

如果两次Model Device都没有错误的话,就能看到系统和性能信息了。

Device Class和Templates

为什么在配置SSH方式监控的时候要将Device放入/Server/Cmd而不是/Server/Linux呢?我们去看看这两个Device Class的Templates有什么不同。

点击Devices -> Server -> Linux -> Templates
点击Devices -> Server -> Cmd-> Templates
可以看出/Server/Cmd的模板在Device, FileSystem和ethernetCsmacd这三个组件的数据采集上使用了完全不同的方法。
在/Server/Linux模板中点击Device可以看到每个Data Source的Source Type是SNMP,而/Server/Cmd为COMMAND

到 这里我们应该对Zenoss的Class,Path和zProperties,Templates之间的关系有个初步的认识了,建议大家仔细读一下 Administration的Chapter 8. Organizers and Path Navigation in Zenoss。

用 户可以在任一Class上设置zProperties和Templates,该变化会影响其子分类。例如在上述的例子中,linux11被放入 /Server/Cmd,那它就将使用/Devices/Server/Cmd的zProperties和Templates,如果我们将关闭了snmp 的linux11移到/Server/Linux中会有什么后果呢?默认情况下将无法采集和监控linux,除非我们手工将/Server/Cmd的 zProperties和Templates的各项配置在/Server/Linux/192.168.2.11上都做一遍,这样的改变只对 192.168.2.11这一个设备有效。

Zenoss中的Templates是可以用户自定义的,更方便的是可通过已有的Zenpack来进行功能的扩展,开源的zenpack也有很多, [url]http://www.zenoss.com/community/projects/zenpacks/[/url]

在Zenoss中,SNMP还是占主导地位,绝大多数的PerformanceTemplates都是基于SNMP的,这种基于SSH的命令方式只适合在没有SNMP环境中使用。

Zenoss 计划在下一个版本(Blue Grab)中提供新的基于SSH的Monitor和Model的方法,不再使用zenplugin。所以的数据均通过远程SSH命令调用直接从操作系统中 获取。这也同样会带来问题,就是各种不同的类Unix的发行版的命令或者是输出结果有可能不一样,Zenoss看来需要做大量的平台兼容性的测试。