RANSIDを利用した自動世代管理

cisco network
Published: 2013-02-24

 前回(CiscoルータのConfigをHTTPを使ってバックアップする)の続きです。ルータのCLIから世代管理システムにcommitできないなら、設定変更したタイミングで世代管理システムが勝手にcommitしてくれないかなーというズボラを実現しました。楽をする為の努力は大事です。

構成図

 Ciscoルータと世代管理システムの間に、rsyslogとlogsurfer、RANSIDを挟みます。設定変更を示すログがsyslogで飛んできたら、RANSIDが対象機器のリポジトリを自動更新します。あとは、ViewVCでリポジトリにアクセスして作業による差分を確認するだけ!

rancid diagram

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を利用すると色々と楽ができそうなので、もう少し触ってみようと思います。