4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zabbix+snmptt: NW機器でwriteしたコンフィグを外部サーバに自動的にバックアップする。

Posted at

やりたいこと

NW機器のコンフィグ修正したとき、copy run startぐらいはするけど、
修正したコンフィグを管理サーバに保管(バックアップ)するのって忘れちゃうよね!って方おられませんか?

私はそんなタイプの人間なので、今回はcopy(write)コマンド発行すると、自動でtftpサーバにバックアップする仕組みを作ってみた。

ざっくりとした動きは以下6ステップ

  1. CISCOルータでwriteコマンドをタイプしたとき、ルータがトラップ発報する。
  2. Zabbixでトラップを受けて、「障害状態」(バックアップ未実施)とする。
  3. Zabbixのtrigger でSNMPTRAPの内容を条件判断( tftpでバックアップする以外の動作であれば反応するようにする)
  4. Zabbixのactionで、上記triggerが反応すれば、スクリプトを実行
  5. スクリプトでCISCOルータのstartupコンフィグをtftpでバックアップする。
  6. バックアップ出来たら、Zabbixでトラップを受けて、「障害復旧状態」(バックアップ実施済)とする。

登場人物

  1. 監視サーバ Zabbix(snmptrapd+snmptt)(ip=192.168.99.18)
  • NW機器 Cisco(今回は1812J) (ip=192.168.99.2)
  • バックアップサーバ TFTPサーバ(ip=192.168.99.18)

前提

  • Zabbix(zabbix-server/snmptrapd/snmptt)が稼働していること
  • ZabbixでSNMPTRAPが受信できる状態であること
  • バックアップ(tftp)サーバが存在して、CISCOからのコンフィグのTFTP転送が受けることができること。

CISCOルータ側作業

NW機器のSnmptrap設定

SNMPTRAP設定
snmp-server host 192.168.99.18 version 2c public
snmp-server enable traps config
snmp-server trap-source FastEthernet0

(1行目)TRAP発報先の設定
(2行目)TRAP発報内容の設定
(3行目)TRAP発報の送信元インターフェース設定

  • Zabbixの場合、trapのsourceIPが監視対象ホストのIPに一致しないと表示されないので注意。

設定反映を以下で確認。

CISCOルータでcopyコマンド実行
Router#copy startup-config tftp://192.168.99.18/192.168.99.2.cfg
Address or name of remote host [192.168.99.18]?
Destination filename [192.168.99.2.cfg]?
!!
1503 bytes copied in 0.064 secs (23484 bytes/sec)
Router#

上記実行後、Zabbix側にトラップ(ccmHistoryMaxEventEntries)が飛ぶことを確認
加えて、TFTPサーバにコンフィグが保存されてることも確認

サーバ(OS/SNMP/SNMPTT)側作業

CISCOのMIBファイルの設置

mkdir /usr/share/snmp/mibs/cisco
このディレクトリに以下2ファイル設置

MIBファイル 備考
cisco-config-man.mib コンフィグ保存時のトラップ格納
cisco-smi.mib CISCO用MIBの繋ぎ役(Structure of Management Information)

CISCOのMIBファイルを認識させる

/etc/snmp/snmp.conf
mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/cisco
mibs ALL

CISCOのMIBファイルの認識を確認してみる。

snmptranslateコマンド(oid出力を確認)
snmptranslate -On -IR ccmHistoryMaxEventEntries
.1.3.6.1.4.1.9.9.43.1.1.4

snmpttで使用するトラップ設定ファイルを作成

トラップ抽出作業

snmpttconvertmibコマンド
snmpttconvertmib --in=/usr/share/snmp/mibs/cisco/cisco-config-man.mib --out=output

上記で抽出したファイルをsnmpttで使用できるように加工

  • FORMAT行の中身に文字列"ZBXTRAP $aA"を追記
  • /etc/snmp/snmptt.{mibファイル名}.confに作成
FORMAT行の加工
cat output | sed 's/^FORMAT /FORMAT ZBXTRAP $aA /' > /etc/snmp/snmptt.cisco-config-man.conf
実際出力された/etc/snmp/snmptt.cisco-config-man.conf
#
MIB: CISCO-CONFIG-MAN-MIB (file:/usr/share/snmp/mibs/cisco/cisco-config-man.mib) converted on Sun May 14 06:52:01 2017 using snmpttconvertmib v1.4beta2
#
EVENT ciscoConfigManEvent .1.3.6.1.4.1.9.9.43.2.0.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Notification of a configuration management event as $*
SDESC
Notification of a configuration management event as
recorded in ccmHistoryEventTable.
Variables:
  1: ccmHistoryEventCommandSource
  2: ccmHistoryEventConfigSource
  3: ccmHistoryEventConfigDestination
EDESC

上記confを見てわかるように、トラップメッセージの最後から2つのカラムには、
最後から2番目:ccmHistoryEventConfigSource(copy元)
最後から1番目:ccmHistoryEventConfigDestination(copy宛先)

つまり、
"copy run start"すると、メッセージは"~~~~ running startup"
"copy start tftp:~"すると、メッセージは"~~~~ startup networkTftp"
となる。

先ほど出力したトラップ設定ファイルをsnmpttに認識させる。

snmptt.iniファイルの"snmptt_conf_files"に、先ほど作成したconfファイルを追記し、restartする。

/etc/snmp/snmptt.ini
ファイルの一番最後に以下の行を追記
[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file).  The COMPLETE path
# and filename.  Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.cisco-config-man.conf    <----- この行を追加
END

最後に、SNMPTTリスタート(systemctl restart snmptt)する。

Zabbixサーバ(Zabbix-WEB)側作業

監視サーバ設定(item/trigger)

host設定(ipとホスト名)

image.png

host設定(macro)

ここでは、 ciscoへのtelnetアクセス情報( user/pass/enable-pass すべて ciscoとする)を定義する。
image.png

item設定

CISCO機器から発報される特定トラップ(ciscoConfigManEvent)をアイテムとして登録する。

image.png

trigger設定

先ほどのイベントの中で特定文字列(startup networkTftp)が含まれていない場合、障害とする。
つまり、ActionのTFTPバックアップ(start->tftp)以外、 copy run start等は障害となる。

image.png

監視サーバ設定(Action/アクションスクリプト)

監視サーバ設定(Action)

image.png

コマンド内容
/usr/local/bin/backupCiscoConfig.pl {HOST.IP} {$TELUSER} {$TELPASS} {$EXEPASS}

第一引数は、hostのipアドレスのマクロ(ここでは、SNMPTRAPを発報したルータIP)
第2引数以降は、ホスト設定(macro)で設定したマクロ情報を使用

監視サーバ設定(アクションスクリプト)

手抜きですが、とりあえず動きます。

/usr/local/bin/backupCiscoConfig.pl
# !/usr/bin/perl
use Net::Telnet::Cisco;

my $backup_host = "192.168.99.18";

my $session = Net::Telnet::Cisco->new(Host => $ARGV[0]);
$session->login( $ARGV[1], $ARGV[2]);

if ($session->enable( $ARGV[3]) ) {
    @out = $session->cmd("copy startup-config "
                        . "tftp://$backup_host/".$ARGV[0].".cfg\n\n\n");
    print "Result: @output\n";
} else {
    warn "Can't enable: " . $session->errmsg;
}

$session->close;

実際に動くことを確認

CISCOルータにログインして、writeコマンド発行

CISCOルータ
Router#write
Building configuration...
[OK]
Router#

tftpサーバにコンフィグファイルができることを確認

TFTPサーバのコンフィグファイル確認
[root@sv ~]# ls -l /var/lib/tftpboot/192.168.99.2.cfg
-rw-rw-rw- 1 nobody nobody 1503 May 14 07:43 /var/lib/tftpboot/192.168.99.2.cfg
[root@sv ~]#

Zabbixのイベントログを確認

image.png

2行目: (障害)writeコマンド発行したことで、ルータが発報するトラップ( running -> startup)
1行目: (復旧)Zabbixのアクションでcopy run tftpコマンド発行したことで、ルータが発報するトラップ( startup -> networkTftp)

(おまけ)SNMPTTログを確認

snmpttのログ
07:43:40 2017/05/14 ciscoConfigManEvent Normal "Status Events" 192.168.99.2 - ZBXTRAP 192.168.99.2 Notification of a configuration management event as commandLine running startup
07:44:07 2017/05/14 ciscoConfigManEvent Normal "Status Events" 192.168.99.2 - ZBXTRAP 192.168.99.2 Notification of a configuration management event as commandLine startup networkTftp

最後に

記載項目多すぎて、まとまりがなくなってしました。
今後、項目ごとにまとめようと思います。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?