Menu
CoddyTech

振り返り:サーバー監視

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 38/51。

challenge icon

チャレンジ

中級

Webサーバーは夜勤中の毎分のデータを記録しました。本当に異常だったのはどの分でしょうか?

  1. 4つのcolumnsをスケーリングします。
  2. Isolation Forest(contamination=0.03、random_state=0)とLOF(n_neighbors=20、contamination=0.03)で異常な分を検出します。
  3. 両方で異常と判定された分を、以下のように時刻順に出力します。
  4. すべての分を散布図にし、横軸にリクエスト数、縦軸にレイテンシをとり、minutesとラベル付けします。両方で異常と判定された分を赤い円で囲み、both detectorsとラベル付けします。凡例を追加して表示します。

別の夜の場合:

Both detectors flag 5 minutes:
  00:25: 1116 requests/s, 186 ms
  01:10: 2106 requests/s, 95 ms
  02:00: 1151 requests/s, 133 ms
  02:40: 835 requests/s, 142 ms
  03:10: 1774 requests/s, 82 ms

サーバーの夜間データ。横軸は1秒あたりのリクエスト数、縦軸はレイテンシ。右上がりの点群の上に遅い分が3つ赤い円で囲まれ、忙しい分が2つ右端に離れている

続いてCoddyがグラフを説明します。

自分で試してみよう

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# Webサーバーの夜間シフト中、1分につき1行
log = pd.read_csv("servers.csv")
columns = ["cpu_pct", "memory_gb", "requests_per_s", "latency_ms"]

# 以下の行は変更しないでください
fig, ax = plt.subplots()
ax.set_title("Server Watch")
ax.set_xlabel("Requests per second")
ax.set_ylabel("Latency (ms)")

# 以下にコードを書いてください

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ