0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

業務ツールをGitHubへ → AIでOSS化まで:CiscoログをPowerShellで比較するツールを作った話

0
Posted at

はじめに

ネットワーク機器の運用業務では、定期的に 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のリポジトリも公開していますので、ぜひ使ってみてください。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?