zabbix小结(五)zabbix_sender与trapper
zabbix中支持及于zabbix_sender和trapper的方式获取数据并监控 ,在进行深一步的探讨之前有必要先了解下什么是zabbix_sender和trapper 。如果用过nagios的人,应该知道nagios里有一个nsca_send程序,可以通过将数据直接发送给monitor 监控端 ,同样zabbix_sender的作用也一样,也是将数据发送给zabbix server ;而什么是trapper呢?tapper也称作zabbix捕捉器,用于捕获zabbix_sender发送的数据 。所以想要使用zabbix_sender + trapper 模式,首先要在zabbix服务器上必须有一个捕捉项目(即trapper item ),用于把数据推送给zabbix服务器 ,这点也同nagios类似,需要在server端先要配置好cfg监控项,才能接收nsca_send发来的数据(总的来说所有,所有监控方式原理性的东西基本都是通的,像snmp也有trapper) 。
一、创建trapper item
正如上面所说 ,服务端想要接受到zabbix_sender发来的数据,先要创建 trapper item 。具体创建方式为 configuration -----> templates -----> items -----> create items , 如下图所示:
二、zabbix_sender的使用
先看下zabbix_sender的用法:
# zabbix_sender -h Zabbix Sender v2.2.3 (revision 44105) (7 April 2014) usage: zabbix_sender [-Vhv] {[-zpsI] -ko | [-zpI] -T -i <file> -r} [-c <file>] Options: -c --config <file> Absolute path to the configuration file -z --zabbix-server <server> Hostname or IP address of Zabbix server -p --port <server port> Specify port number of server trapper running on the server. Default is 10051 -s --host <hostname> Specify host name. Host IP address and DNS name will not work -I --source-address <IP address> Specify source IP address -k --key <key> Specify item key -o --value <key value> Specify value -i --input-file <input file> Load values from input file. Specify - for standard input Each line of file contains whitespace delimited: <hostname> <key> <value> Specify - in <hostname> to use hostname from configuration file or --host argument -T --with-timestamps Each line of file contains whitespace delimited: <hostname> <key> <timestamp> <value> This can be used with --input-file option Timestamp should be specified in Unix timestamp format -r --real-time Send metrics one by one as soon as they are received This can be used when reading from standard input -v --verbose Verbose mode, -vv for more details Other options: -h --help Give this help -V --version Display version number
详细的用法可以查看官网示例:https://www.zabbix.com/documentation/2.2/manpages/zabbix_sender
这里以最简单的发送一个key的值为例:
//成功的示例 # zabbix_sender -vv -z 127.0.0.1 -p 10051 -s 'mongodb-0-45' -k mongodb_version -o 2.4.10 zabbix_sender [6933]: DEBUG: answer [{ "response":"success", "info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000219"}] info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000219" sent: 1; skipped: 0; total: 1 //失败的示例 # zabbix_sender -vv -z 127.0.0.1 -p 10051 -s '172.20.0.45' -k mongodb_version -o 2.4.10 zabbix_sender [6973]: DEBUG: answer [{ "response":"success", "info":"processed: 0; failed: 1; total: 1; seconds spent: 0.000097"}] info from server: "processed: 0; failed: 1; total: 1; seconds spent: 0.000097" sent: 1; skipped: 0; total: 1
注:上面的发送示例中mongodb-0-45主机的IP就是172.20.0.45,同样的主机,为什么用主机名正确,用IP就失败呢?因为zabbix server是通过configuration ------> hosts ------> host name 里的名字来判读的 。如下图:
使用上面的命令发送完成后,可以通过monitoring -----> laster data ------>对应的主机的item 接收到的值 查看具体接收到的时候来验证一切是否正常。如下图,服务端接受到了我们刚刚发送的数据 。
三、具体示例
这里我们结合 mikoomi-mongodb-plugin 监控插件作为示例,看下zabbix_sender 和 trapper 是如何进行结合工作的 。该插件是利用php下的mongo.so 提供的API获取mongo的状态值,再将数据处理成zabbix_sender可以使用-i参数可以接受的格式再进行发送。该插件一共包含三个文件: 一个xml模板文件(创建trapper item)、一个shell脚本(调用php文件并传参给php文件)、一个php文件 ,其下载页位于:http://mikoomi.googlecode.com/svn/plugins/MongoDB%20Plugin/
1、导入xml模板文件
该过程实际上是简化第一部中创建trapper item 的过程 ,通过configuration ----> templates ------> import -------> 导入下载的xml文件。导入完成后,会发现在templates里多了一个名字为Template_MongoDB 的模板文件 。
2、利用zabbix_sender发送监控结果
下载mikoomi-mongodb-plugin.php、mikoomi-mongodb-plugin.sh两个文件,将使放到/etc/zabbix/externalscripts目录(没有该目录请创建 , 注意这里一定要是该名称的目录,因为脚本时写的是该目录,想要使用其他目录,需要修改脚本中的路径) 。进入该目录,执行类似如下的命令:
#sh mikoomi-mongodb-plugin.sh -D -h 172.20.0.45 -p 27017 -z mongodb-0-45
其中-D意为进入debug模式、-h是被监控主机的IP(即运行有mongodb的主机) 、-p mongodb主机的端口、-z 该机在zabbix_server端配置的host name ,细心的人估计会发现这里没有写zabbix_server的IP和端口,程序怎么知道发送到那里 。zabbix_server已经写到了mikoomi-mongodb-plugin.php目录里,在其末尾部分找到如下行:
exec("zabbix_sender -vv -z 127.0.0.1 -i $data_file_name 2>&1", $log_file_data) ;
所以这里也相当于指定了该插件需要安装在zabbix_server端上 ,如果是安装在proxy端或其他地方的,也可以通过修改该行正常工作 。
运行完上面的脚本,默认数据会在/tmp目录生成mikoomi-mongodb-plugin.php_主机名.data、mikoomi-mongodb-plugin.php_主机名.log两个文件 ,查看data文件,不难发现其格式为 主机名 key名 data ,具体如下:
# more mikoomi-mongodb-plugin.php_mongodb-0-45.data mongodb-0-45 mongodb_version 2.4.10 mongodb-0-45 uptime 1203 mongodb-0-45 globalLock_lockTime 202966 mongodb-0-45 globalLock_currentQueue_total 0 mongodb-0-45 globalLock_currentQueue_readers 0 mongodb-0-45 globalLock_currentQueue_writers 0 mongodb-0-45 mem_bits 64 mongodb-0-45 mem_resident 37 mongodb-0-45 mem_virtual 342 mongodb-0-45 connections_current 2 ……………………………………省略
3、zabbix_sender发送相关
上面的插件只是一个简单示例,如果想完成通过shell也可以实现,上面的php执行的内容和以下命令执行出的结果一样:
# echo "db.serverStatus()" | mongo admin # echo "db.rsconf()" | mongo admin
只要最终按zabbix_server所要的求的格式:主机名 key data 的方式发送给zabbix_server 就可以正常的在监控页面上展示 。
4、插件相关
由于该插件长久以为没有更新,我在ubuntu下的2.4.10版的mongodb上取数据时,发现里有的一些键值项已经发生变化,而php文件的判读上也存在错误 。使用过程中可能会报如下错误:
zabbix_sender -vv -z 127.0.0.1 -i $data_file_name # zabbix_sender -vv -z 127.0.0.1 -s 'mongodb-0-45' -i mikoomi-mongodb-plugin.php_mongodb-0-45.data zabbix_sender [4432]: Warning: [line 14] 'Key value' required Sending failed.
四、其他
zabbix_sender一些原理性的东西及利用python上传json格式的数据