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

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

研修コース検索

コラム

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

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

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

はじめに

みなさん、こんにちは。

これまでのコラムでは、ネットワーク管理の効率化を目指してさまざまなアプローチを紹介してきました。今回からは、Pythonライブラリを活用した具体的な自動化レシピを取り上げます。手動作業では膨大な時間と労力を必要とするタスクも、自動化することによって効率的かつ確実に実行できるようになります。

ここでは、次の3つのライブラリを中心に使用します。

  • NAPALM: ネットワーク機器の情報収集や設定操作を簡潔に実行できるライブラリ
  • netmiko: SSHを使ってネットワーク機器にコマンドを送信し、操作をスクリプト化できるライブラリ
  • OpenPyXL: Excelファイルの操作に特化したライブラリで、結果を整理・保存するのに便利

これらを活用して、ネットワーク管理に役立つシナリオを実際に構築していきましょう。

ネットワーク機器の状態モニタリング

ネットワーク運用では、機器の状態(CPU使用率、メモリ使用量、温度など)を把握することが重要です。NAPALMを使用することで、これらの情報を簡単に取得し、異常があれば迅速に対応できます。


from napalm import get_network_driver

# デバイス情報 devices = [ {’hostname’: ’192.168.1.1’, ’username’: ’admin’, ’password’: ’admin123’, ’platform’: ’ios’} ]
# 状態モニタリング 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() facts = device.get_facts() env = device.get_environment()
print(f"Hostname: {facts[’hostname’]}") print(f"CPU Usage: {env[’cpu’][0][’usage’]}%") print(f"Memory Usage: {env[’memory’][’used_ram’]}/{env[’memory’][’available_ram’]} bytes") print(f"Temperature: {env[’temperature’]}") device.close()
if env[’cpu’][0][’usage’] > 80: # CPU使用率が80%以上の場合アラート print(f"ALERT: High CPU usage on {facts[’hostname’]}!")
  • get_facts() は NAPALM のメソッドで、ネットワーク機器の基本情報(ファクト)を取得するために使用されます。このメソッドはデバイスに接続し、以下のような情報を辞書形式で返します。
    • hostname: デバイスのホスト名
    • vendor: デバイスの製造元(例: Cisco、Juniper)
    • model: デバイスのモデル(例: ISR 4000、MX480)
    • os_version: デバイスで実行されているオペレーティングシステムのバージョン
    • serial_number: シリアル番号
    • uptime: 起動後の稼働時間(秒単位)
    • interface_list: デバイスで利用可能なインターフェースのリスト
  • get_environment() は、デバイスの現在のハードウェア状態を取得するためのメソッドです。デバイスのパフォーマンスや正常性を監視できます。特に、以下のような用途で有用です。
    • 高負荷状態(CPU 使用率が高い場合)のアラート発生
    • 温度上昇時の冷却対策(ファンの動作確認など)
    • メモリ不足の早期検知
  • このメソッドも辞書形式で情報を返し、主に以下の情報が含まれます。
    • cpu: CPU 使用率の情報(通常、CPU コアごとに分かれる)
    • memory: メモリ使用状況
      • available_ram: 利用可能なメモリ量(バイト単位)
      • used_ram: 使用中のメモリ量(バイト単位)
    • temperature: デバイスの温度センサー情報
    • power: 電源ユニットの状態
    • fans: ファンの動作状況
  • get_facts() は主にデバイスの静的な情報(ハードウェアやOSに関する固定情報)を取得するために使用されます。
  • get_environment() は動的な情報(現在の状態やリソース使用状況)を取得します。
ログの一括収集

複数のネットワーク機器からログを収集して保存することで、トラブルシューティングやセキュリティ監視が効率的になります。ここではnetmikoを使ってログを収集し、テキストファイルに保存します。


from netmiko import ConnectHandler
# 対象デバイス情報
devices = [
    {’device_type’: ’cisco_ios’, ’host’: ’192.168.1.1’, ’username’: ’admin’, ’password’: ’admin123’}
]
# ログ収集
for device_info in devices:
    try:
        net_connect = ConnectHandler(**device_info)
        logs = net_connect.send_command("show logging")
        with open(f"{device_info[’host’]}_logs.txt", "w") as f:
            f.write(logs)
        print(f"Logs collected for {device_info[’host’]}")
        net_connect.disconnect()
    except Exception as e:
        print(f"Failed to collect logs for {device_info[’host’]}: {str(e)}")
  • send_command メソッドは、netmiko を使用してネットワーク機器に CLI コマンドを送信し、その結果をテキストとして取得するためのメソッドです。ここでは、show logging コマンドを送信します。 send_command メソッドを使用するメリットは以下です。
    • 柔軟性: 任意の CLI コマンドを送信可能
    • 即時実行結果: デバイスの応答をリアルタイムで取得
    • 簡単なログ解析: ログを文字列として取得するので、Python の文字列操作で容易に処理できる
  • show logging コマンドは、ネットワーク機器のログを表示するコマンドです。このコマンドを使うと、次のような情報を得ることができます。
    • システムログ
      • デバイスの過去の動作状況やエラーメッセージ。
      • 例えば、インターフェースの状態変化、セキュリティ警告、メモリ不足の警告など。
    • イベントの履歴
      • 日時付きで、特定のイベント(例: 再起動、設定変更)が記録される。
    • デバッグログ(必要に応じて)
      • トラブルシューティング時に役立つ詳細な情報。
  • なお、ここで注意する点は以下です。
    • デバイスによっては、非常に長いログを返す場合があります。そのため、メモリ消費や処理速度に注意する必要があります。
    • 大量のログを取得する場合、send_commandメソッド の delay_factor や read_timeout を調整しましょう。
まとめ

今回は、ネットワーク管理を効率化するための2つのレシピを紹介しました。1つ目の状態モニタリングでは、NAPALMを活用してハードウェアの状況をリアルタイムで把握し、早期に異常を検知することができます。2つ目のログ収集では、netmikoを使って複数機器から効率的に情報を収集し、解析用にファイルへ保存します。これらの手法を導入することで、管理作業を自動化し、作業効率を大きく改善できます。

次回は、さらに高度な自動化レシピとして、ネットワーク構成変更のバージョン管理やExcelを使ったインベントリ管理について解説します。どうぞお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes