😊
OpenAI APIを使ってNW機器のログを解析する Part 1
OpenAI APIを使ってNW機器のログを解析する
はじめに
OpenAI APIを使ってNW機器のログ解析を試してみました。
準備
- 事前にOpenAIののサイトからAPIキーを取得する
- 取得したAPIキーを環境変数に設定する
export OPENAI_API_KEY=your_api_key
- テストなのでPythonコード内で設定でもOKです
- pythonを使用するため、OpenAIのライブラリをインストールする
pip install openai
使用するNW機器のログ
- chatGPTに生成してもらったciscoチックなログを使用します
-
logs.txt
として保存しておきます
Jan 30 10:15:03.123: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to down
Jan 30 10:15:05.456: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to down
Jan 30 10:20:12.789: %OSPF-5-ADJCHG: Process 1, Nbr 10.1.1.2 on GigabitEthernet0/2 from FULL to DOWN, Neighbor Down: Dead timer expired
Jan 30 10:25:18.234: %BGP-5-ADJCHANGE: neighbor 192.168.1.1 Down - Peer closed the session
Jan 30 10:30:25.678: %SYS-5-CONFIG_I: Configured from console by vty0 (192.168.1.100)
Jan 30 10:35:42.111: %SEC-6-IPACCESSLOGP: list 101 denied tcp 10.0.0.1(12345) -> 192.168.1.100(22), 1 packet
Jan 30 10:40:50.987: %LINK-3-UPDOWN: Interface GigabitEthernet0/3, changed state to up
Jan 30 10:45:58.654: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/3, changed state to up
Pythonコード
-
main.py
として保存しました -
OPENAI_API_KEY
に取得したAPIキーを設定します -
filter_logs
関数でログをフィルタリングします -
analyze_logs_with_openai
関数でopenaiにログを解析してもらいます -
analysis_result
に解析結果が格納されます - modelは
gpt-4o-mini
を使用しています
from openai import OpenAI
import os
import re
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
def filter_logs(log_file):
error_patterns = [
r"%SYS-5-CONFIG_I", # 設定変更
r"%LINK-3-UPDOWN", # リンクのアップ/ダウン
r"%LINEPROTO-5-UPDOWN", # インターフェースの状態変化
r"%OSPF-5-ADJCHG", # OSPFのネイバー変化
r"%BGP-5-ADJCHANGE" # BGPネイバーの変化
]
filtered_logs = []
with open(log_file, "r") as f:
for line in f:
if any(re.search(pattern, line) for pattern in error_patterns):
filtered_logs.append(line.strip())
return filtered_logs
log_file_path = "logs.txt"
filtered_logs = filter_logs(log_file_path)
def analyze_logs_with_openai(logs):
client = OpenAI()
prompt = "以下ののエラーログを解析してください。\n\n"
prompt += "\n".join(logs)
prompt += "\n\n 何が起きているのか、原因、対処方法を教えてください。"
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
analysis_result = analyze_logs_with_openai(filtered_logs)
print(analysis_result)
スクリプト実行
-
python main.py
で実行
出力された解析結果
このエラーログを解析すると、いくつかの問題が発生していることが分かります。以下に、各ログメッセージについての解説、可能性のある原因、および対処方法を示します。
1. インターフェースの状態変化
Jan 30 10:15:03.123: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to down
Jan 30 10:15:05.456: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to down
状況
-
GigabitEthernet0/1
インターフェースが「down」状態に変わっています。
考えられる原因
- ケーブルが外れた、または切断された。
- ネットワーク機器の故障。
- インターフェースの設定ミス。
対処方法
- ケーブル接続を確認します。
- 対象のインターフェースおよび対応する機器の動作状態を確認します。
- インターフェースの設定(設定コマンド)を見直します。
2. OSPF隣接関係の変化
Jan 30 10:20:12.789: %OSPF-5-ADJCHG: Process 1, Nbr 10.1.1.2 on GigabitEthernet0/2 from FULL to DOWN, Neighbor Down: Dead timer expired
状況
- OSPFプロトコルにおいて、隣接ルータ(10.1.1.2)との関係が「FULL」から「DOWN」に変わっています。
考えられる原因
- ネットワークの不安定や接続の問題。
- タイムアウトの設定が適切でない。
対処方法
- 対応するインターフェース間の接続を確認します。
- OSPF設定を見直し、デッドタイマの設定を確認します。
- ネットワークの安定性を確認します。
3. BGPセッションの問題
Jan 30 10:25:18.234: %BGP-5-ADJCHANGE: neighbor 192.168.1.1 Down - Peer closed the session
状況
- BGPセッションが「Down」となり、ピアがセッションを閉じました。
考えられる原因
- 対象のルータ間で接続が失われた。
- 認証エラーや設定ミスによりセッションが切断された。
対処方法
- ピアとの接続を確認します(ネットワーク接続や設定)。
- BGP設定(AS番号、フィルター、認証等)を見直します。
4. インターフェースの状態変化
Jan 30 10:40:50.987: %LINK-3-UPDOWN: Interface GigabitEthernet0/3, changed state to up
Jan 30 10:45:58.654: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/3, changed state to up
状況
-
GigabitEthernet0/3
インターフェースが「up」状態に戻りました。
考えられる原因
- 接続の復旧や設定変更によって正常状態に戻った可能性があります。
対処方法
- 状態が正常に戻った理由を確認します(ケーブルの再接続、機器の再起動など)。
- 繰り返し問題が起きないように監視を続けます。
総括
全体として、インターフェースの不具合や接続の問題、プロトコルによる隣接関係の変更が見受けられます。これらの問題に対して適切に診断・対処していくことが重要です。また、ネットワーク監視ツールを活用して問題が頻発しないか監視することをお勧めします。
まとめ
- もうちょっと実際のログを使わないとわからないけどまあまあいい感じでした
- 運用に乗せるならsyslogとかで解析しないとなのでやってみたいですね
Discussion