IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Pythonでネットワーク自動化をしよう

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第32回 ネットワーク自動化実践レシピ(4) (小澤昌樹) 2025年3月

はじめに

みなさん、こんにちは。

これまでのコラムでは、ネットワーク管理を効率化するための自動化レシピを紹介してきました。ネットワーク機器の状態モニタリングやログの一括収集から始まり、ネットワーク構成変更のバージョン管理やExcelを活用したインベントリ管理、さらにはネットワーク構成のコンプライアンスチェック、セキュリティ対策などの自動化手法を解説してきました。

  • ネットワーク機器の状態モニタリング(NAPALM)
  • ログの一括収集(Netmiko)
  • ネットワーク構成変更のバージョン管理(NAPALM、subprocess)
  • Excelを活用したインベントリ管理(NAPALM、OpenPyXL)
  • ネットワーク構成のコンプライアンスチェック(NAPALM、OpenPyXL)
  • ネットワークのセキュリティ対策(Netmiko、OpenPyXL)

これまでは、情報収集や構成管理、セキュリティ対策といったところを焦点としてきましたが、今回は、ネットワークパフォーマンスの監視と迅速な障害対応を自動化する方法を紹介します。

障害の早期発見と復旧が可能になれば、安定したネットワーク運用を実現できます。しかし、手動で行う監視や障害対応は、ヒューマンエラーを引き起こしやすく、対応の遅れが発生することもあります。作業を自動化することで、リアルタイムの監視と迅速な復旧作業が実現でき、管理業務を効率化することができるでしょう。

今回は、次の2つの自動化のシナリオを紹介します。

  1. ネットワークパフォーマンスの自動監視とアラート
  2. 障害検出から復旧までの自動化

なお、今回はヤマハ機器を使用します。ヤマハ機器は独自のCLIコマンドセットを持っているため、Netmiko や NAPALM のヤマハ対応機能を活用して、障害検出と復旧を自動化することが可能です。show status や show interface を使用してインターフェースの状態を監視したり、異常が発生した際に shutdown コマンドを送信したりすることができます。

1. ネットワークパフォーマンスの自動監視とアラート

ネットワークのパフォーマンス低下を早期に検出して対応するための監視システムを構築します。リアルタイムに状態を把握することで、異常が発生した際の迅速な対応を可能にし、ダウンタイムを最小限に抑えることができます。

使用ライブラリ
  • NAPALM
  • OpenPyXL
  • Slack API
ポイント
  • NAPALMでインターフェースのトラフィック、CPU使用率、メモリ使用率を取得
    NAPALMを使用することで、ヤマハ機器の状態を効率的に取得できます。インターフェースのトラフィック量やCPU、メモリの使用率を定期的に収集し、閾値を超えた場合にアラートを送信します。
  • 異常値の検出とアラートの自動送信
    異常値を検出した際には、Slackに自動でアラートを送信します。これにより、管理者は即座に状況を把握でき、迅速な対応に繋げられます。
  • 分析のためのExcelレポート自動生成
    OpenPyXLを利用して、収集したパフォーマンスデータをExcelレポートとしてまとめ、ネットワークパフォーマンスの分析に活用できます。
コード例

from napalm import get_network_driver
from openpyxl import Workbook
import requests
# デバイス情報
devices = [
    {’hostname’: ’192.168.100.1’, ’username’: ’admin’, ’password’: ’admin123’, ’platform’: ’yamaha’}
]
# Excelレポートの準備
wb = Workbook()
ws = wb.active
ws.title = "192.168.100.1"
ws.append([’Hostname’, ’CPU Usage’, ’Memory Usage’, ’Interface Traffic’])
# ネットワーク状態の監視
for device_info in devices:
    driver = get_network_driver(device_info[’platform’])
    device = driver(device_info[’hostname’], device_info[’username’], device_info[’password’])
    device.open()

# 情報収集 env = device.get_environment() interfaces = device.get_interfaces_counters()
cpu_usage = env[’cpu’][0][’usage’] memory_usage = env[’memory’][’used_ram’] / env[’memory’][’available_ram’] * 100 traffic = interfaces[’eth0’][’tx_octets’]
# Excelに記録 ws.append([device_info[’hostname’], cpu_usage, memory_usage, traffic])
# 80%を超えたらアラート送信 # YOUR_SLACK_TOKEN にはSlackのトークンを設定する if cpu_usage > 80: requests.post("<https://slack.com/api/chat.postMessage>", { "token": "YOUR_SLACK_TOKEN", "channel": "#network-alerts", "text": f"{device_info[’hostname’]} で高負荷検出!\\nCPU: {cpu_usage}% / メモリ: {memory_usage}%" })
device.close()
wb.save(’network_performance.xlsx’)
解説
  • NAPALM を使用したネットワーク状態の監視
    • NAPALM を使用してヤマハ機器にSSHで接続します。
    • get_network_driver() メソッドで、対象機器のプラットフォームに応じたドライバを取得します。
    • open() メソッドを使って、実際に機器に接続しています。
  • パフォーマンスデータの収集
    • get_environment() メソッドを使用して、CPU使用率とメモリ使用率を取得しています。
    • get_interfaces_counters() メソッドで、インターフェースのトラフィック量を取得しています。
    • CPU使用率は env[’cpu’][0][’usage’] で取得します。
    • メモリ使用率は、used_ram と available_ram を用いて割合 (%)に変換しています。
    • インターフェーストラフィックは、tx_octets で送信バイト数を取得しています。
  • Slack へのアラート送信
    • CPU使用率が80%を超えた場合、Slackに自動でアラートを送信します。
    • Slack API の chat.postMessage を利用して、#network-alerts チャンネルに通知を送っています。
    • tokenには、Slack API トークンを設定する必要があります。
    • アラートメッセージには、対象機器のホスト名、CPU使用率、メモリ使用率が含まれます。
    • Slack以外にも、Microsoft Graph API や SMTP を使用できます。
2. 障害検出から復旧までの自動化

ヤマハ機器のインターフェースで障害が発生した場合、その影響を最小限に抑えるためシャットダウンを実施、そのあとの復旧作業までを自動化します。これによって、障害発生から復旧までの対応時間を短縮し、システムの安定性を確保します。

使用ライブラリ
  • Netmiko
  • OpenPyXL
  • Ping3
  • subprocess(Tracerouteの実行)
ポイント
  • 障害の自動検出とインターフェースのシャットダウン
    Netmikoを使用して、show status や show interface を利用して障害を検出します。異常が見つかった場合、影響を最小限にするために shutdown コマンドを送信します。
  • 障害対応の履歴管理
    OpenPyXLを用いて、障害対応の履歴をExcelに記録します。過去のインシデントの情報を蓄積し、将来的なトラブルシューティングの資料として利用できます。
  • 復旧後の動作確認
    Ping3 を利用して復旧後の動作確認を自動化します。また、subprocess モジュールを利用して Traceroute を実行し、ネットワーク経路の確認を行います。
コード例

from netmiko import ConnectHandler
from openpyxl import Workbook
from ping3 import ping
import subprocess
from datetime import datetime

# デバイス情報 devices = [ {’device_type’: ’yamaha’, ’host’: ’192.168.1.1’, ’username’: ’admin’, ’password’: ’admin123’} ]
# Excelレポートの準備 wb = Workbook() ws = wb.active ws.title = "192.168.1.1" ws.append([’Hostname’, ’Interface’, ’Status’, ’Timestamp’])
# インシデント対応の自動化 for device_info in devices: try: # デバイスへSSH接続 net_connect = ConnectHandler(**device_info)
# インターフェースの状態確認 output = net_connect.send_command("show status")
# 障害検出 if "down" in output: print(f"ALERT: Down interface detected on {device_info[’host’]}")
# 該当インターフェースのシャットダウン interface = "lan1" net_connect.send_config_set([f"interface {interface}", "shutdown"]) print(f"{interface} has been shut down.")
# 障害対応履歴の記録 ws.append([device_info[’host’], interface, ’Shutdown’, datetime.now()])
# 復旧確認 response = ping(device_info[’host’]) if response: print(f"{device_info[’host’]} is reachable.") else: print(f"Failed to reach {device_info[’host’]}.")
# Tracerouteで経路確認 traceroute_result = subprocess.run(["traceroute", device_info[’host’]], capture_output=True, text=True) print(traceroute_result.stdout)
# 接続終了 net_connect.disconnect()
except Exception as e: print(f"Error handling {device_info[’host’]}: {e}")
# Excelファイルの保存 wb.save(’incident_history.xlsx’)
解説
  • 障害の自動検出
    show status コマンドを使用して、ヤマハ機器のインターフェース状態を確認しています。down 状態のインターフェースを検出すると、影響を最小限にするために自動でシャットダウンを実行します。
  • 自動シャットダウン
    interface lan1 shutdown コマンドを使用して、特定のインターフェースをシャットダウンします。
  • 障害対応履歴の記録
    OpenPyXLを使用して、障害対応の履歴をExcelに保存しています。対応内容、インターフェース、対応時間を記録することで、分析に役立てます。
  • 復旧確認
    Ping3 を使用して、復旧後に対象デバイスへの到達性を確認しています。
    接続できなかった場合には、subprocess を利用して Traceroute を実行し、ネットワーク経路の確認を行います。
まとめ

今回は、ヤマハ機器に対応したリアルタイムの状態監視、異常検知時のアラート通知、さらには障害発生時の自動対応まで、効率的なネットワーク管理を実現する手法を紹介しました。手動操作によるヒューマンエラーを削減し、対応の遅延を防ぐことで、ネットワークの安定稼働を確保できます。また、Slackを活用したアラート通知によって、異常発生時の状況把握を迅速に行えます。

次回は、セキュリティリスクの自動検出や脆弱性診断の自動化、ダッシュボードによるリアルタイム状況把握などを取り上げる予定です。どうぞお楽しみに。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes