Zabbixでsnmptrapdを使い、VMwareのホストから受信(zabbixスクリプト編 その2)

Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)これと
Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その2)これと
Zabbixでsnmptrapdを使い、VMwareのホストから受信(zabbixスクリプト編 その1)これの続き。

前回はVMwareのホストから出てくるsnmptrapdの出力が日本語HEXだったという発見ができたというところまで。

■日本語HEXの逆変換

では、日本語HEX逆変換をするには?という事で探したら、xxd というものが見つかった。
Linuxの16進ダンプツール(od,xxd)

さらに調べると、このxxdは単体のパッケージが見つからなかったので、vim を入れるとついてくるらしいという
情報を信じて、下記のようにインストール。(OSはCentOS5.4)

# yum install vim-common.x86_64


日本語HEX部分を/var/log/messages から取得してテキストファイルに落とし、コマンドで変換してみる。

# xxd -r -p /root/a.txt
snmptrapd-111 - メトリック 使用量 = 5% または メトリック 使用量 = 89% または メトリック 使用量 = 3% または メトリック 使用量 = 4% または メトリック スワップ アウト速度 = 0% または または

変換OKしかし、これをどのように使用すべきなのだろうか。

■日本語HEX変換をzabbix_snmptrap.shに適用

/usr/local/bin/zabbix_snmptrap.shを変更

vmware1=`echo $vmware1 | cut -f 2 -d'"' |xxd -r -p`
vmware2=`echo $vmware2 | cut -f 2 -d'"' |xxd -r -p`
vmware3=`echo $vmware3 | cut -f 2 -d'"' |xxd -r -p`
str="$address $community $vmware1 $vmware2 $vmware3"

※テストのため大胆に他の部分をカットしてある。

とりあえず、zabbixに取り込まれたもの

"host" 192.168.11.111 緑 赤 snmptrapd-111 -

改行が入っちゃっているのかもしれない。

read -d '"' vmware3
read -d '"' vmware4
 
vmware3=`echo $vmware3 | cut -f 2 -d'"' |xxd -r -p`
vmware4=`echo $vmware4 | cut -f 2 -d'"' |xxd -r -p`
 
str="$address $community $vmware1 $vmware2 $vmware4"

このような形に変更。read -d で区切り文字が変更できるとは知らなかった。初めて使った。

/root/b.txtに得られた値(/tmp/zabbix_vmware.output)
/root/a.shに抜粋したスクリプトと標準出力への出力を作成。

# cat b.txt|sh a.sh

"host" 192.168.11.111 緑 赤 snmptrapd-111 - メトリック 使用量 = 5% または または または メトリック ス ワップ アウト速度 = 0% または メトリック 使用量 = 90% または メトリック 使用量 = 7%

このような出力が得られたので、一定の情報は取得可能と思われる。(不必要な情報も多いけれど)

■最終的なスクリプト

#vi /etc/snmp/snmptrapd.conf

authCommunity log,execute,net snmptest
traphandle default /bin/bash /usr/local/bin/zabbix_vmware_snmptrap.sh >> /tmp/zabbix_snmptrap.log 2>&1

# vi /usr/local/bin/zabbix_vmware_snmptrap.sh

#!/bin/bash
#
# Zabbix
# Copyright (C) 2000,2001,2002,2003 Alexei Vladishev
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# FOR trouble shoot (rebine)
#echo '---------------' >> /tmp/zabbix_vmware.snmpoutput
 
# CONFIGURATION
 
ZABBIX_SERVER="127.0.0.1";
ZABBIX_PORT="10051";
 
ZABBIX_SENDER="/usr/bin/zabbix_sender";
 
KEY="snmptraps";
HOST="snmptraps";
 
# END OF CONFIGURATION
 
read hostname
read ip
read uptime
read oid
read address
read community
read enterprise
read vmware1
read vmware2
read -d '"' vmware3
read -d '"' vmware4
 
oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`
 
oid=`echo $oid|cut -f11 -d'.'`
community=`echo $community|cut -f2 -d'"'`
vmware1=`echo $vmware1 | cut -f 2 -d'"' |xxd -r -p`
vmware2=`echo $vmware2 | cut -f 2 -d'"' |xxd -r -p`
vmware3=`echo $vmware3 | cut -f 2 -d'"' |xxd -r -p`
vmware4=`echo $vmware4 | cut -f 2 -d'"' |xxd -r -p`
 
#str="$hostname $address $community $enterprise $oid"
str="$address $community $vmware1 $vmware2 $vmware4"
 
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST -k $KEY -o "$str"

■snmptrapdのワイルドカード

http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=582&forum=6

このような情報があり、snmp5.4以降からワイルドカードが使えるようになったらしいが、残念ながらこのサーバのバージョンが古い。古いままで個別の登録をするのは効率が悪いので、snmptrapd = VMware専用とするように設定をクローズ。

この回で終了。