web-dev-qa-db-ja.com

SNMPトラップを受信したときに電子メールを送信する

特定のデバイス(この場合はIBM TS3584テープライブラリ)からのトラップを処理し、エラーに関する情報を(電子メールとして)送信するようにSNMPトラップレシーバーを構成する必要があります。私のサーバーは、net-snmpパッケージを使用してCentOS 6.4linuxを実行しています。

ライブラリに接続しましたが、テストトラップを受け取ることができます。さらに、このデバイスのMIBをダウンロードし(ここから: http://www-01.ibm.com/support/docview.wss?uid=ssg1S4000318 )、取得できることを確認しました特定のイベントの値(またはOID):

snmpwalk -v2c -c public -m +IBM-TS3500-MIBv2 10.10.100.5 ibm3584MIBObjectsTD
**IBM-TS3500-MIBv1::ibm3584MIBObjectsTD.0 = STRING: "This is a test SNMP trap."**


snmptranslate -m +IBM-TS3500-MIBv2 -IR -On ibm3584MIBObjectsTD
**.1.3.6.1.4.1.2.6.182.1.2.71.1**

トラップ全体(/ var/log/messagesから)は次のようになります。

2013-08-27 15:49:37 10.10.100.5(via UDP: [10.10.100.5]:1795->[10.10.100.135]) TRAP,
SNMP v1, community public#012#011SNMPv2-SMI::enterprises.4484.1 Enterprise Specific
Trap (408) Uptime: 1:00:10.45#012#011SNMPv2-SMI::enterprises.2.6.182.1.2.11.1 =
STRING: "3584 L32 7814014"#011SNMPv2-SMI::enterprises.2.6.182.1.2.111.1 = STRING: "
0"#011SNMPv2-SMI::enterprises.2.6.182.1.2.101.1 = ""#011SNMPv2
SMI::enterprises.2.6.182.1.2.41.1 = STRING: "08"#011SNMPv2
SMI::enterprises.2.6.182.1.2.71.1 = STRING: "This is a test SNMP trap."#011SNMPv2
SMI::enterprises.2.6.182.1.2.151.1 = INTEGER: 1#011SNMPv2
SMI::enterprises.2.6.182.1.2.161.1 = STRING: "00000"

私の質問は、この形式で受信したトラップを処理し、重大度(SNMPトラップの1つの値)に基づいてトラップで提供された情報を使用して電子メールを送信できるソフトウェア(Linux、GUI以外)はありますか? ? Cactiを試しましたが、通知オプションが見つかりませんでした(ドキュメントのない古いプラグインを除く)。また、cactiをデバイスと通信する(名前や場所などを読み取る)ことはできましたが、役に立ちませんでした。 AFAIKNagiosにはTS3200/3300ライブラリのプラグインがありますが、Nagiosを使用できません。

だから私は、SNMPトラップ用に/ var/log/messagesをテーリングする独自のパーサーを作成して情報を検索する必要があるかどうかを考えていますか、それとも使用できる解決策はありますか?

1
Ziwi

スクリプトでトラップを処理するようにsnmptrapdを構成できます。これはtraphandleディレクティブです。

設定ファイルは/etc/snmp/snmptrapd.confだと思います。

たとえば、次を使用できます。

traphandle IBM-TS3500-MIBv1::ibm3584MIBObjectsTD.0 /usr/local/bin/myscript.pl

または、すべてを解析するには、次を使用できます。

traphandle default /usr/local/bin/myscript.pl

トラップの内容はSTDINのスクリプトに渡されるため、スクリプトはそこから読み取る必要があります。

これをスクリプト化するための優先言語については言及していないので、あまり詳しくは説明しません。ただし、Perl用に次のライブラリが存在します: SNMP :: Trapinfo

あなたはこのようなことをすることができます:

use strict;
use SNMP::Trapinfo;
my $trap = SNMP::Trapinfo->new(*STDIN, {hide_passwords => 1});
# parse trap here
my $subject = "Got trap from $trap->hostname";
open EMAIL, "|-", "/usr/bin/Mail", "-s", $subject, "[email protected]";
print EMAIL "My Email Body for SNMP Trap";
close EMAIL;

さらに、トラップが/var/log/messagesで完全に翻訳されているようには見えません。カスタムMIBを使用してトラップを変換するために設定する必要のある変数を思い出せませんが、MIBを/ usr/local/share/snmp/mibsにドロップできるはずです(ディレクトリが存在しない場合は作成します)。

1

Update2: http://www.net-snmp.org/docs/man/snmptrapd.html もっと検索してください。

更新:net-snmpトラップレシーバーsnmptrapd。

http://net-snmp.sourceforge.net/tutorial/tutorial-5/demon/

トラップを処理できる完全な監視システムが必要ですか?もしそうなら、Opennmsを試してみてください。これは、オープンソースの監視製品の中で最も成熟しています。

0
Neil H Watson

トラップの受信(サービスはポート162/udpでリッスンしています)とさらなる処理snmpttsnmptrapdを使用しています(を参照) http://snmptt.sourceforge.net/docs/snmptt.shtml )。

0
charkh