はじめに
ネットワーク機器の運用業務では、定期的に show コマンドでログを取得し、前回との差分を確認する作業があります。
この記事では、その作業を自動化するために業務で作ったツール(TeratermマクロとPowerShellスクリプト)をGitHubへ公開し、さらに自宅でAIを活用してOSS向けに改修した経緯をまとめます。
背景
ネットワークエンジニアとして日常的に発生するのが「Ciscoルータ・スイッチのshow取得 → 前回との差分確認」という作業です。
台数が増えるほど手作業でのコマンド実行・ログ比較は時間がかかり、ミスも起きやすくなります。
そこで業務では:
- TeratermマクロでCisco機器へのshow取得を自動化
- PowerShellでログファイルの差分を比較してレポート出力
という2つのツールを作成しました。これをGitHubにあげ、その後、自宅でAIを使ってOSS用に改修しました。
ツール①:Teratermマクロによるshow取得の自動化
目的
Ciscoのルータやスイッチに対して複数の show コマンドを実行し、結果をログファイルとして保存する作業を自動化します。
セキュリティへの配慮
マクロによる自動化で気になるのが パスワードの扱い です。
スクリプト内にパスワードをハードコードするのはセキュリティ上のリスクが高いため、以下の方針をとっています。
- ログインのパスワード入力は 手作業
-
enableコマンドによる特権モード移行時のパスワードも 手作業 - その後の
showコマンドの実行・ログ取得をマクロで自動化
[手動]
↓ ログインパスワード入力
↓ enableパスワード入力(特権モードへ)
[マクロ実行]
↓ showコマンドを連続実行
↓ ログファイルへ自動保存
この方式により、パスワードを一切スクリプトに持たせることなく、コマンド実行の効率化と手作業ミスの排除を両立しています。
ツール②:PowerShellによるShowログ比較スクリプト(AutoMerge)
GitHubリポジトリ: AutoMerge
概要
Ciscoの show コマンドで取得したログを、同一IP単位で自動比較し、差分レポートをテキストファイルに出力するPowerShellスクリプトです。
ログファイルは以下の命名規則を前提としています。
YYMMDD_HHMMSS_IP_from_USER.log
主な機能
- Windows PowerShell 5.1 / PowerShell 7+ に対応
- ファイル名の日時情報から比較対象を自動選定(約1日前・約1週間前)
- LCSベースの差分比較により、行の追加・削除があっても差分が崩れにくい
- ノイズ行を除外しても元の行番号を保持
-
-CurrentFileまたは-TargetIPで比較起点を明示可能 - UTF-8のテキストレポートを出力
基本的な使い方
# 既定値で実行
.\Compare-ShowLogs_ByIP.ps1
# 特定IPを指定
.\Compare-ShowLogs_ByIP.ps1 -TargetIP "10.0.0.1"
# ノイズ行を除外(uptime等、毎回変わる行を無視)
.\Compare-ShowLogs_ByIP.ps1 -IgnorePattern '^\s*$', 'uptime', 'Last input'
業務版とOSS版(AI改修版)の違い
ここが今回の記事で一番伝えたい部分です。
業務版(元の実装)
業務で作成したPowerShellスクリプトは、1行でも違えばその行から先をすべて差分として出力する シンプルな実装でした。
例えば以下のようなケースで問題が起きます。
【比較前のログ】
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
no shutdown
【比較後のログ(1行増えた)】
interface GigabitEthernet0/0
description WAN-Link ← 追加された行
ip address 192.168.1.1 255.255.255.0
no shutdown
この場合、業務版では「description 行以降が全部差分」として出力されてしまい、実際の変更点が見づらくなっていました。
OSS版(AI活用による改修版)
自宅でAIを活用して改修し、LCS(Longest Common Subsequence:最長共通部分列)アルゴリズム を導入しました。
LCSを使うことで、行が多少ずれていても「実際に追加・削除された行のみ」を正確に差分として検出できます。
【LCSによる差分検出のイメージ】
- (追加) description WAN-Link
(それ以外の行は「同じ」と判定)
これにより、行数の多いCiscoのshow出力でも 本当に変わった箇所だけ が明確にわかるようになりました。
AIを活用した改修について
OSSとして公開するにあたり、業務ロジックをゼロから書き直すのは大変です。
そこでAIに以下を相談しながら改修を進めました。
- LCSアルゴリズムのPowerShell実装
- ファイル命名規則に基づく比較対象の自動選定ロジック
- ノイズ除外・行番号保持の実装方針
AIとのやり取りをベースにコードを仕上げることで、業務版には存在しなかった柔軟な差分比較が実現できました。
まとめ
| 項目 | 業務版 | OSS版(AI改修) |
|---|---|---|
| 差分比較方式 | 行番号完全一致 | LCSベース |
| 行ずれへの対応 | ✗(ずれると全差分) | ✓(ずれても正確に検出) |
| パスワード管理 | 手動入力(安全) | 手動入力(安全) |
| 対応環境 | 社内環境 | PowerShell 5.1 / 7+ |
ネットワーク運用の自動化は「セキュリティを守りながら、いかに省力化するか」がポイントです。
今回の取り組みが、同じような課題を持つエンジニアの参考になれば幸いです。
GitHubのリポジトリも公開していますので、ぜひ使ってみてください。