前回(CiscoルータのConfigをHTTPを使ってバックアップする)の続きです。ルータのCLIから世代管理システムにcommitできないなら、設定変更したタイミングで世代管理システムが勝手にcommitしてくれないかなーというズボラを実現しました。楽をする為の努力は大事です。
構成図
Ciscoルータと世代管理システムの間に、rsyslogとlogsurfer、RANSIDを挟みます。設定変更を示すログがsyslogで飛んできたら、RANSIDが対象機器のリポジトリを自動更新します。あとは、ViewVCでリポジトリにアクセスして作業による差分を確認するだけ!
rsyslog
rsyslogの式ベースフィルタを利用して、NW機器から送信されるsyslogを機器ごとのログファイルに書き込みます。
# cat /etc/rsyslog.d/cisco.conf
$template DynamicFileName,"/var/log/rsyslog/%FROMHOST-IP%_%syslogfacility-text%.log"
if ( $FROMHOST-IP == 'xxx.xxx.xxx.xxx' ) and ($syslogfacility-text == 'local3' ) then ?DynamicFileName
& ~
logsurfer
rsyslogが出力するログファイルをlosurferで監視します。監視するログはconfiguration modeから抜けた時に表示される「%SYS-5-CONFIG_I: Configured from console by user on vty0 (xxx.xxx.xxx.xxx)」です。このログが監視でHITした場合、losurferがruncid-runを実施しリポジトリを更新します。
複数機器をRANSIDで管理している場合、rancidによるリポジトリの更新は、-rオプションを付けることで監視にHITした機器のみにします。オプションをつけないと全機器のログをcommitしてしまい、設定変更されていないログも世代管理されてしまいます。※-rで指定する機器名は、router.db内の名称を利用します。
# cat /etc/logsurfer/rancid.conf
'Configured from console' - - - 0 exec "/usr/bin/sudo -u rancid -H /usr/local/rancid/bin/rancid-run -r router-name"
#
# logsurfer -c /etc/logsurfer/rancid.conf -f /var/log/rsyslog/xxx.xxx.xxx.xxx_local3.log
RANSID+ViewVC
RANCID+ViewVCでコンフィグ管理を参考に、粛々と構築します。
課題
この仕組みは、rsyslogとlogsurfer、RANSIDが同一マシン上で稼働している必要があります。その為、既存環境に追加するには少々自由度が低いです。また、管理対象が増えた際にスケールさせるのが大変です。この仕組みで複数台を管理しようとすると、その分のログファイルとlogsurferのプロセスが必要になります。ちゃんと動くのか不安です。。。
そうはいっても、RANCIDを利用すると色々と楽ができそうなので、もう少し触ってみようと思います。