ネットワークエンジニアのプログラミング【Python入門(SNMPGet実行)】

ネットワークエンジニアのプログラミング【Python入門(SNMPGet実行)】

ネットワークエンジニアのプログラミング入門として、PythonでSNMPGetを行い、ネットワーク機器からトラフィック情報を取得します。また、トラフィックグラフもPythonで作成します。

SNMPの基礎については、下記を参照してください。

トラフィックグラフをブラウザ上で表示する方法は、下記を参照してください。

プラグラミング学習サイト・スクール情報

簡単なツール作成であれば、独学でも十分にプログラミングが可能になると思います。短期間で体系的に学習するのであれば、「有料学習サイト」や「オンラインスクール」の利用をおすすめします。

どちらのサイトも無料で学習可能な範囲があります。有料コンテンツに関しては、月額1000円程度です。

目次

目標作成物

Pythonでコーディングして、2つのツールを作成します。

  • SNMPGetツール(snmpget.py)
    • ネットワーク機器に対してSNMPGetを実行しトラフィック情報を取得し、CSVファイルに保存する。

CSVファイルの例

date,time,In,Out
2022/09/17,16:35:00,6870336,4061131
2022/09/17,16:36:00,6871637,4061602
2022/09/17,16:37:00,6872998,4062073
2022/09/17,16:38:00,6874359,4062561
2022/09/17,16:39:00,6875660,4063032
  • トラフィックグラフ作成ツール(trafficgraph.py)
    • トラフィック情報(CSVファイル)をグラフ化する。

トラフィックグラフの例

トラフィックグラフ

PythonによるSNMPGetツール

ネットワーク環境

3台のルーターに対してSNMPGetを実行し、トラフィック情報を取得します。

ネットワーク環境

各ルーターの設定は下記の通りです。

Router1
interface GigabitEthernet0/0
 ip address 192.168.100.1 255.255.255.0

snmp-server community public RO
Router2
interface GigabitEthernet0/0
 ip address 192.168.100.2 255.255.255.0

snmp-server community public RO
Router3
interface GigabitEthernet0/0
 ip address 192.168.100.3 255.255.255.0

snmp-server community public RO

利用するライブラリ

Pythonでは様々な便利な機能が使える「ライブラリ」というものを利用します。

  • pysnmp
    • PythonでSNMPを利用するためのライブラリ
  • schedule
    • 定期的に処理を実行するためのライブラリ
  • datetime
    • 日時(日付や時間・時刻)の情報を処理するためのライブラリ
  • time
    • 時間を扱うためのライブラリ

ディレクトリ構成 ・出力先ファイル作成

ディレクトリ構成は下記の通りです。

  • snmpget.py (Pythonプログラム)
  • pysnmplog (出力先ファイル格納ディレクトリ)
    • Router1_pysnmp.csv
    • Router2_pysnmp.csv
    • Router3_pysnmp.csv

出力先のcsvファイルを作成します。

echo date,time,In,Out > Router1_pysnmp.csv
echo date,time,In,Out > Router2_pysnmp.csv
echo date,time,In,Out > Router3_pysnmp.csv
Terminal[pysnmplog]: echo date,time,In,Out > Router1_pysnmp.csv

Terminal[pysnmplog]: cat Router1_pysnmp.csv
date,time,In,Out

Pythonコード

SNMPGetを実行するプログラムは『snmpget.py』として、下記のコードを記述します。

from pysnmp.hlapi import *
import schedule
import datetime
import time

def job():

    # 日付と時刻をカンマ区切りで取得
    dt_now = datetime.datetime.now().strftime('%Y/%m/%d,%H:%M:%S')
    print(dt_now)

    # 取得対象機器を定義
    node_list = {
        "Router1": "192.168.100.1",
        "Router2": "192.168.100.2",
        "Router3": "192.168.100.3"
    }

    # 対象機器の台数分を繰り返し処理
    for name in node_list.keys():
        f = open('./pysnmplog/' + name + '_pysnmp.csv', 'a')

        iterator = getCmd(
            SnmpEngine(),
            CommunityData('public'),
            UdpTransportTarget((node_list[name], 161)),
            ContextData(),
            ObjectType(ObjectIdentity('IF-MIB', 'ifHCInOctets', 1)),
            ObjectType(ObjectIdentity('IF-MIB', 'ifHCOutOctets', 1))
        )

        errorIndication, errorStatus, errorIndex, varBinds = next(iterator)

        if errorIndication:
            print(errorIndication)

        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))

        else:
            print(name + " " + str(varBinds[0][1]) + "," + str(varBinds[1][1]))
            f.write(dt_now + "," + str(varBinds[0][1]) + "," + str(varBinds[1][1]) + '\n')

        f.close()

# 1分毎に実行
schedule.every().minute.at(":00").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

各ルーターに対して、1分毎にトラフィック量(ifHCInOctets, ifHCOutOctets)を取得するプログラムです。

SNMPGetツールの実行結果

SNMPGetツールを実行すると、下記の通り表示され、出力先ファイルに追記されていきます。

python snmpget.py
snmpget.pyの実行結果
cat ./pysnmplog/Router1_pysnmp.csv
Terminal[python]: cat ./pysnmplog/Router1_pysnmp.csv
date,time,In,Out
2022/09/17,16:35:00,6870336,4061131
2022/09/17,16:36:00,6871637,4061602
2022/09/17,16:37:00,6872998,4062073
2022/09/17,16:38:00,6874359,4062561
2022/09/17,16:39:00,6875660,4063032

Pythonによるトラフィックグラフ作成ツール

利用するライブラリ

  • pandas
    • データを扱うためのライブラリ
  • matplotlib
    • グラフを描画するためのライブラリ

ディレクトリ構成

Pythonプログラムとトラフィック情報ファイルを同一ディレクトリに格納します。

  • trafficgraph.py (Pythonプログラム)
  • Router1_pysnmp.csv (トラフィック情報ファイル)

トラフィック情報ファイルは、1時間分のサンプルデータを利用しています。

Pythonコード

トラフィックグラフを作成するプログラムは『trafficgraph.py』として、下記のコードを記述します。

import pandas as pd
import matplotlib.pyplot as plt

def mbscalc(x):
    x = x / 1024 / 1024 * 8 /60
    return x

datetime = pd.read_csv('Router1_pysnmp.csv', usecols=[0, 1], encoding = 'UTF8')
inout = pd.read_csv('Router1_pysnmp.csv', usecols=[2, 3], encoding = 'UTF8')

inoutdiff = inout.diff()
inoutdiff = inoutdiff.drop([0])

inoutdiff['In'] = inoutdiff['In'].astype(int)
inoutdiff['Out'] = inoutdiff['Out'].astype(int)

data = datetime['date'] + " " + datetime['time'] + "," + inoutdiff['In'].astype(str) + "," + inoutdiff['Out'].astype(str)

data = data.str.split(',', expand=True)
data.columns = ['datetime', 'In', 'Out']
data = data.drop([0])

data['In'] = data['In'].astype(int)
data['Out'] = data['Out'].astype(int)

data['In'] = data['In'].apply(mbscalc)
data['Out'] = data['Out'].apply(mbscalc)

plt.plot(data['datetime'], data['In'], data['Out'])

plt.xticks([0, len(data)-1])
plt.ylim(0,100)
plt.ylabel('Mbps')
plt.legend(['In', 'Out'])

plt.show()

トラフィックグラフ作成ツールの実行結果

トラフィックグラフ作成ツールを実行すると、下記のグラフが表示されます。

python trafficgraph.py
トラフィックグラフ

以上で、ネットワークエンジニアのプログラミング【Python入門(SNMPGet実行)】の説明は完了です!プログラミングができると、仕事の効率化ができますし、何より仕事を楽しむことができます!!

プラグラミング学習サイト・スクール情報

簡単なツール作成であれば、独学でも十分にプログラミングが可能になると思います。短期間で体系的に学習するのであれば、「有料学習サイト」や「オンラインスクール」の利用をおすすめします。

どちらのサイトも無料で学習可能な範囲があります。有料コンテンツに関しては、月額1000円程度です。

  • URLをコピーしました!
  • URLをコピーしました!
目次