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

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

研修コース検索

コラム

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

CTC 教育サービス

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

第35回 ネットワーク自動化実践レシピ(7)ダッシュボードの作成(2) (小澤昌樹) 2025年6月

みなさん、こんにちは。

前回は、NAPALMやNetmikoを使ってネットワーク機器の状態を自動的に取得する方法を紹介しました。これにより、複数の機器に対して定期的に情報を取得し、手間なく一元的に状況を把握できるようになりました。ただ、取得した情報をその場で画面に表示するだけでは、後から分析したり可視化したりすることができません。そこで今回は、収集した情報を時系列で記録・蓄積し、後続のExcel出力やダッシュボード構築にも活用できるように、SQLiteを使ってデータベースに保存する仕組みを構築します。

1.なぜSQLiteなのか

SQLiteは、サーバー不要でファイル単体で扱える軽量なRDBMSです。Pythonには標準でsqlite3モジュールが用意されており、追加のインストールが不要で手軽に使える点が魅力です。また、ファイル単位で管理できるため、バックアップやレポート用途に最適です。 今回は、以下のような情報を保存することを想定しています。

  • 機器のホスト名やIPアドレス
  • データ取得時刻
  • CPU使用率
  • メモリ使用率
  • 各インターフェースの送受信バイト数
2.データベースの設計

まずは、保存するデータの構造を設計します。以下のような2つのテーブルを用意するとシンプルで使いやすくなります。


CREATE TABLE device_status (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    hostname TEXT,
    ip_address TEXT,
    timestamp TEXT,
    cpu_usage REAL,
    memory_usage REAL
);

CREATE TABLE interface_traffic ( id INTEGER PRIMARY KEY AUTOINCREMENT, device_id INTEGER, interface_name TEXT, tx_bytes INTEGER, rx_bytes INTEGER, FOREIGN KEY(device_id) REFERENCES device_status(id) );

この構造により、1回の取得に対して全体のステータスとインターフェースごとの詳細がきれいに分離できます。

3.スクリプトによる保存の流れ

それでは、NAPALMで取得した情報をSQLiteに保存する処理をPythonで実装してみましょう。


import sqlite3
from datetime import datetime
from napalm import get_network_driver

# データベースに接続(なければ作成) conn = sqlite3.connect(’network_monitor.db’) cur = conn.cursor()
# テーブル作成(初回のみ) cur.execute(’’’ CREATE TABLE IF NOT EXISTS device_status ( id INTEGER PRIMARY KEY AUTOINCREMENT, hostname TEXT, ip_address TEXT, timestamp TEXT, cpu_usage REAL, memory_usage REAL ) ’’’)
cur.execute(’’’ CREATE TABLE IF NOT EXISTS interface_traffic ( id INTEGER PRIMARY KEY AUTOINCREMENT, device_id INTEGER, interface_name TEXT, tx_bytes INTEGER, rx_bytes INTEGER, FOREIGN KEY(device_id) REFERENCES device_status(id) ) ’’’)
# 監視対象のデバイス 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() intfs = device.get_interfaces_counters()
timestamp = datetime.now().isoformat() cpu = env[’cpu’][0][’usage’] mem = env[’memory’] memory_usage = mem[’used_ram’] / mem[’available_ram’] * 100
# デバイス全体の情報を保存 cur.execute(’’’ INSERT INTO device_status (hostname, ip_address, timestamp, cpu_usage, memory_usage) VALUES (?, ?, ?, ?, ?) ’’’, (facts[’hostname’], device_info[’hostname’], timestamp, cpu, memory_usage)) device_id = cur.lastrowid
# 各インターフェースのトラフィックを保存 for intf, data in intfs.items(): cur.execute(’’’ INSERT INTO interface_traffic (device_id, interface_name, tx_bytes, rx_bytes) VALUES (?, ?, ?, ?) ’’’, (device_id, intf, data[’tx_octets’], data[’rx_octets’]))
device.close()
conn.commit() conn.close()

このスクリプトを実行すると、収集したデータがnetwork_monitor.dbというSQLiteファイルに時系列で保存されます。なお、今回の監視対象デバイスは、「’platform’: ’ios’」としており、これはCisco機器用です。YamahaやJuniperなど他ベンダーを対象にする場合は、事前に対応状況を確認しておく必要があります。また、認証情報は環境変数や外部ファイル(YAML)で管理したほうがよいでしょう。

4.まとめ

今回は、ネットワーク機器から収集した情報をSQLiteに保存する方法を紹介しました。単なる一時的な出力ではなく、履歴として記録していくことで、後からの分析や可視化、レポート作成に大きく役立ちます。

  1. 履歴の可視化
    過去のデータと比較することで、パフォーマンスの変化や傾向を把握できます。
  2. レポートの生成が容易
    次回扱うExcel出力機能では、このDBに記録されたデータをそのまま活用できます。
  3. ダッシュボードとの連携
    最終的な可視化ダッシュボードは、このSQLiteをデータソースとして利用することが可能です。

今回のスクリプトは日次または週次で実行されることを前提としているので、次回(第3回)では、cronなどを使った定期実行の仕組みを紹介します。スクリプトを一定の間隔で実行することで、常に最新のデータがDBに反映され、リアルタイムに近い可視化が実現できるようになります。次回もどうぞお楽しみに。

 

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