rsyslog から snmptrap を飛ばせるようにしてみた

仕事で色々調べものをしていたら、rsyslogsnmptrap を飛ばすことが出来るということなので、早速試してみた。

sid でインストールされるrsyslogパッケージでは、snmpモジュールが有効になっておらず、ソースを入手してリビルドする必要があります。
まずは、ソースコードを入手。

nexus01:/usr/local/src# apt-get source rsyslog

ソースコードは、取得したタイミングで展開されるので、その中の”debian/rules”でconfigure実行時のオプションとして、”--enable-snmp”を追加。

nexus01:/usr/local/src/rsyslog-5.8.11# diff -u debian/rules~ debian/rules
--- debian/rules~ 2012-09-27 03:36:29.000000000 +0900
+++ debian/rules 2012-11-29 00:23:38.086788037 +0900
@@ -24,7 +24,8 @@
--enable-omprog \
--enable-omuxsock \
--disable-testbench \
- --with-systemdsystemunitdir=/lib/systemd/system
+ --with-systemdsystemunitdir=/lib/systemd/system \
+ --enable-snmp

override_dh_auto_install:
dh_auto_install

rsyslog のリビルドに必要なパッケージで足りていないものがあればインストール。

nexus01:/usr/local/src/rsyslog-5.8.11# apt-get -u build-dep rsyslog

コレで準備完了なので、ビルドしてみるとエラーが出て、ビルドが中断

nexus01:/usr/local/src/rsyslog-5.8.11# dpkg-buildpackage -us -uc -b -rfakeroot 2>&1 > /tmp/rebuild0.log
dpkg-buildpackage: warning: using a gain-root-command while being root
dpkg-source --before-build rsyslog-5.8.11
fake root debian/rules clean
debian/rules build
configure: WARNING: unrecognized options: --disable-maintainer-mode
configure: WARNING: no javac found, disabling features depending on it
configure: error: in `/usr/local/src/rsyslog-5.8.11':
configure: error: Net-SNMP is missing
See `config.log' for more details
dh_auto_configure: ./configure --build=x86_64-linux-gnu --prefix=/usr --includedir=${prefix}/include --mandir=${prefix}/share/man --infodir=${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=${prefix}/lib/rsyslog --disable-maintainer-mode --disable-dependency-tracking --enable-mysql --enable-pgsql --enable-mail --enable-imfile --enable-impstats --enable-gssapi-krb5 --enable-gnutls --enable-relp --enable-pmaixforwardedfrom --enable-pmcisconames --enable-pmlastmsg --enable-pmrfc3164sd --enable-pmsnare --enable-omprog --enable-omuxsock --disable-testbench --with-systemdsystemunitdir=/lib/systemd/system --enable-mmsnmptrapd --enable-snmp returned exit code 1
make[1]: *** [override_dh_auto_configure] エラー 25
make: *** [build] エラー 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2

よく見ると、”configure: error: Net-SNMP is missing”というメッセージ。
どうも、snmp関連のlibsnmp-devパッケージが足りてないようなので、libsnmp-devをインストール。

nexus01:/usr/local/src/rsyslog-5.8.11# aptitude install libsnmp-dev
以下の新規パッケージがインストールされます:
libperl-dev{a} libsensors4-dev{a} libsnmp-dev libwrap0-dev{a}
更新: 0 個、新規インストール: 4 個、削除: 0 個、保留: 0 個。
5,235 k バイトのアーカイブを取得する必要があります。展開後に 20.0 M バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
取得: 1 http://cdn.debian.or.jp/debian/ sid/main libperl-dev amd64 5.14.2-15 [3,321 kB]
取得: 2 http://cdn.debian.or.jp/debian/ sid/main libwrap0-dev amd64 7.6.q-24 [25.4 kB]
取得: 3 http://cdn.debian.or.jp/debian/ sid/main libsensors4-dev amd64 1:3.3.2-2 [63.6 kB]
取得: 4 http://cdn.debian.or.jp/debian/ sid/main libsnmp-dev amd64 5.4.3~dfsg-2.6 [1,825 kB]
Fetched 5,235 kB in 2秒 (1,917 kB/s)
バグレポートを取得しています… 完了
Found/Fixed 情報を解析しています… 完了
以前に未選択のパッケージ libperl-dev を選択しています。
(データベースを読み込んでいます … 現在 126022 個のファイルとディレクトリがインストールされています。)
(.../libperl-dev_5.14.2-15_amd64.deb から) libperl-dev を展開しています…
以前に未選択のパッケージ libwrap0-dev:amd64 を選択しています。
(.../libwrap0-dev_7.6.q-24_amd64.deb から) libwrap0-dev:amd64 を展開しています…
以前に未選択のパッケージ libsensors4-dev を選択しています。
(.../libsensors4-dev_1%3a3.3.2-2_amd64.deb から) libsensors4-dev を展開しています…
以前に未選択のパッケージ libsnmp-dev を選択しています。
(.../libsnmp-dev_5.4.3~dfsg-2.6_amd64.deb から) libsnmp-dev を展開しています…
man-db のトリガを処理しています …
libperl-dev (5.14.2-15) を設定しています …
libwrap0-dev:amd64 (7.6.q-24) を設定しています …
libsensors4-dev (1:3.3.2-2) を設定しています …
libsnmp-dev (5.4.3~dfsg-2.6) を設定しています …

改めて、dpkg-buildpackageを実行すると、無事パッケージが出来上がるので、dpkgコマンドでインストール。

nexus01:/usr/local/src/rsyslog-5.8.11# ls -l ../*.deb
-rw-r--r-- 1 root staff 1107164 11月 29 00:26 ../rsyslog-doc_5.8.11-2_all.deb
-rw-r--r-- 1 root staff 128186 11月 29 00:26 ../rsyslog-gnutls_5.8.11-2_amd64.deb
-rw-r--r-- 1 root staff 128866 11月 29 00:26 ../rsyslog-gssapi_5.8.11-2_amd64.deb
-rw-r--r-- 1 root staff 121022 11月 29 00:26 ../rsyslog-mysql_5.8.11-2_amd64.deb
-rw-r--r-- 1 root staff 120626 11月 29 00:26 ../rsyslog-pgsql_5.8.11-2_amd64.deb
-rw-r--r-- 1 root staff 121138 11月 29 00:26 ../rsyslog-relp_5.8.11-2_amd64.deb
-rw-r--r-- 1 root staff 544888 11月 29 00:26 ../rsyslog_5.8.11-2_amd64.deb
nexus01:/usr/local/src/rsyslog-5.8.11# dpkg -i ../rsyslog_5.8.11-2_amd64.deb
(データベースを読み込んでいます ... 現在 126406 個のファイルとディレクトリがインストールされています。)
rsyslog 5.8.11-2 を (../rsyslog_5.8.11-2_amd64.deb で) 置換するための準備をしています ...
rsyslog を展開し、置換しています...
rsyslog (5.8.11-2) を設定しています ...
[ ok ] Stopping enhanced syslogd: rsyslogd.
[ ok ] Starting enhanced syslogd: rsyslogd.
man-db のトリガを処理しています ...

あとは、下のような中身で/etc/rsyslog.d/snmptrap.confを作って、rsyslogdの再起動すればtrapが飛ぶはずなんだけど、コレが飛ばない。
#下の例だと、rsyslogが処理したログすべてに対してsnmptrapが飛ぶ、はず。

nexus01:/usr/local/src/rsyslog-5.8.11# more /etc/rsyslog.d/snmptrap.conf
$ModLoad omsnmp

$actionsnmptransport udp
$actionsnmptarget localhost
$actionsnmptargetport 162
$actionsnmpversion 1
$actionsnmpcommunity Gaia-Network

*.* :omsnmp:

今回のハマリポイント

設定ファイルのチェックのため、rsyslogdを-Nオプション付きで実行すると、下のようなメッセージが出て、その中に”dlopen: /usr/lib/rsyslog/omsnmp.so: cannot open shared object file: No such file or directory”とあって、omsnmp.soが所定の位置にないのが原因らしい。

nexus01:/usr/local/src/rsyslog-5.8.11# rsyslogd -c5 -N1
rsyslogd: version 5.8.11, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: could not load module '/usr/lib/rsyslog/omsnmp.so', dlopen: /usr/lib/rsyslog/omsnmp.so: cannot open shared object file: No such file or directory
[try http://www.rsyslog.com/e/2066 ]
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 1:"$ModLoad omsnmp"
rsyslogd: invalid or yet-unknown config file command - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 3:"$actionsnmptransport udp"
rsyslogd: invalid or yet-unknown config file command - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 4:"$actionsnmptarget localhost"
rsyslogd: invalid or yet-unknown config file command - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 5:"$actionsnmptargetport 162"
rsyslogd: invalid or yet-unknown config file command - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 6:"$actionsnmpversion 1"
rsyslogd: invalid or yet-unknown config file command - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 7:"$actionsnmpcommunity Gaia-Network"
rsyslogd: the last error occured in /etc/rsyslog.d/snmptrap.conf, line 9:"*.* :omsnmp:"
rsyslogd: warning: selector line without actions will be discarded
rsyslogd: End of config validation run. Bye.

確かに、lsでもdpkg -L rsyslogでパッケージの内容一覧を出してもomsnmp.soがない。

nexus01:/usr/local/src/rsyslog-5.8.11# ls -l /usr/lib/rsyslog/omsnmp.so
ls: /usr/lib/rsyslog/omsnmp.so にアクセスできません: そのようなファイルやディレクトリはありません
nexus01:/usr/local/src/rsyslog-5.8.11# dpkg -L rsyslog | grep omsnmp.so
nexus01:/usr/local/src/rsyslog-5.8.11#

でも、findで調べると見つかるので、makeされていないというわけでもない。orz

nexus01:/usr/local/src/rsyslog-5.8.11# find ./ -name omsnmp.so -type f -print | xargs ls -l
-rwxr-xr-x 1 root root 61005 11月 29 00:26 ./debian/tmp/usr/lib/rsyslog/omsnmp.so
-rwxr-xr-x 1 root root 61005 11月 29 00:26 ./plugins/omsnmp/.libs/omsnmp.so

どうやら、どっかがおかしくてomsnmp.soが正しくパッケージングされない模様なのだけど、原因を追求する気力もないので、とりあえずソースディレクトリ配下にあるコンパイル済みのomsnmp.soを/usr/lib/rsyslog配下にコピー。
これで、再び設定チェックすると、warningメッセージが出なくなるので、rsyslogdを再起動。

exus01:/usr/local/src/rsyslog-5.8.11# cp -p ./debian/tmp/usr/lib/rsyslog/omsnmp.so /usr/lib/rsyslog/
nexus01:/usr/local/src/rsyslog-5.8.11# chmod 644 /usr/lib/rsyslog/omsnmp.so
nexus01:/usr/local/src/rsyslog-5.8.11# ls -l /usr/lib/rsyslog/omsnmp.so
-rw-r--r-- 1 root root 61005 11月 29 00:26 /usr/lib/rsyslog/omsnmp.so
nexus01:/usr/local/src/rsyslog-5.8.11# rsyslogd -c5 -N1
rsyslogd: version 5.8.11, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.
nexus01:/usr/local/src/rsyslog-5.8.11# /etc/init.d/rsyslog restart
[ ok ] Stopping enhanced syslogd: rsyslogd. [ ok ] Starting enhanced syslogd: rsyslogd.

再起動後、ちょっと待って、/var/log/messagesを見てみると、

Nov 29 00:44:58 nexus01 snmptrapd[30358]: 2012-11-29 00:44:58 localhost [UDP: [127.0.0.1]:57862->[127.0.0.1]]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (76685674) 8 days, 21:00:56.74#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.4.1.19406.1.2.1#011iso.3.6.1.4.1.19406.1.1.2.1 = STRING: "<6>Nov 29 00:44:58 nexus01 kernel: imklog 5.8.11, log source = /proc/kmsg started."

というように、rsyslogが受けたログを、trapとして改めて受信したログが記録されたので、やっとOKとなりました。
ただ、なんの条件も指定せずに、rsyslogdが処理したログをsnmptrapで飛ばしているので、/etc/rsyslog.d/snmptrap.confの最後の1行、"*.* :omsnmp:"の部分をコメントにしてrsyslogd再起動をしないと、ログの大増殖が発生します…。
実運用時としては、特定メッセージだけtrapとして飛ばす設定にしなくちゃいけないわけですが、その辺はまた今度。

トラックバック(1)

以前書いて書きっぱなしだった、rsyslog 使った snmptrap を飛ばす件ですが、やっと特定条件て tra pを飛ばすのを試してみたので、メモ。 ... 続きを読む

コメントする