隨著IT基礎設施日益複雜,傳統維運方式已難以應付。人工智慧的匯入,特別是 AIOps 的應用,能有效提升維運效率。AIOps 將資料來源、資料收集、資料分析、機器學習與智慧決策整合,使機器能自主處理例行任務,讓工程師專注於更複雜的問題。Splunk 等資料分析平台結合機器學習演算法,能有效分析海量資料,例如預測網路頻寬或偵測異常。此外,自動修復技術,如 RPA,能根據機器學習的分析結果自動執行修復動作,進一步提升維運效率。

人工智慧在維運中的應用 - 第四章:AI在IT維運中的角色

在過往,故障排除或甚至佈署工作通常侷限於特定的基礎設施裝置。然而,在現實世界中,我們面對的是多供應商的裝置,以及數量從數百到數千的裝置增長。對於工程師來說,在這種場景下識別和解決問題極其耗時。隨著我們新增更複雜的組態和技術,工程師在處理龐大的裝置集以及不同的技術領域時,擴充套件能力變得幾乎不可能。

解決這個問題的一個可行方案是透過機器來處理任務。當機器開始從其他機器學習時,它變得更加聰明,能夠處理複雜的任務,並確保只有高階別(或非常複雜)的任務需要升級給工程師。所有低掛果實(可重複和低風險的任務)通常由機器本身處理。這個檢測、分析、補救/緩解和驗證的框架被統稱為AIOps。

AIOps的關鍵支柱

當我們透過AIOps來處理任何特定的問題時,我們需要將任何給定的問題分成不同的方面,以獲得有意義的結果。這些方面或關鍵支柱有助於識別、分析和補救特定的問題。

資料來源

顧名思義,這是觸發器發生的真實資料。可以是從源生成的任何資料(例如裝置日誌),也可以是從終端使用者報告的資料(例如票證或甚至電子郵件)。確保我們有足夠的資料來執行某個操作是一個關鍵方面。

例如,要識別特定網路裝置上CPU利用率的根本原因,我們需要具有Syslogs、地址解析協定(ARP)表、鏈路利用率,如果可能的話,還需要組態。如果我們只有Syslog作為資料,我們可能會看到潛在的問題,但可能無法透過機器智慧地識別根本原因。

資料也被分為兩種主要的資料型別:結構化資料和非結構化資料。

  • 結構化資料具有預定義的資料模型,通常以人類可讀的文字格式存在,易於搜尋和清晰索引。日期、信用卡號碼、交易記錄和電話號碼都是結構化資料的例子。
  • 非結構化資料則相反,沒有預定義的資料模型,資料通常以人類不可讀的格式存在,難以搜尋。語音、影片、影像和通用日誌都是非結構化資料的例子。

資料收集器

一旦我們有了資料,下一步就是決定從哪裡收集資料。資料收集器是儲存資料的特定平台。一個關鍵特性是能夠在收集資料時快速索引,確保我們有正確的資料集來進行分析和提供有意義的洞察。此外,資料收集器需要可擴充套件性和100%的可用性,以確保不會遺漏任何資料收集。

市場上有一些可用的、可擴充套件且強大的資料收集器,例如:

  • Hadoop
  • Splunk
  • Elasticsearch
  • collectD
  • StatsD
  • Carbon

另一個關鍵要求是將資料匯入資料收集器的難易程度。例如,Splunk的資料攝入可以直接從檔案或資料夾中進行,也可以透過組態的TCP或UDP埠監聽,甚至透過根據URL的POST呼叫進行。

資料分析

隨著我們向前邁進,下一步是分析索引資料。這是一項需要掌握的專門技能,以便獲得準確的結果。在收集了可能達到幾千兆位元組的資料之後,取得確切的症狀或問題有時需要非常複雜的查詢或對可用資料的解析。

幸運的是,許多作為資料收集器的工具也具有對查詢和分析的廣泛內建支援。資料分析通常從編寫一個好的SQL查詢開始,以識別可操作的資料,然後使用平台特定的查詢(如Splunk中的搜尋處理語言(SPL))執行複雜的操作。

機器學習與智慧決策

透過機器學習,我們可以根據歷史資料預測特定的問題。這也是在進行任何根本原因分析(RCA)時執行的一個關鍵任務。

Splunk中的資料分析範例

考慮以下查詢:

sourcetype=cisco_syslog | stats count(type) by type

輸出如下所示: 在這種情況下,在過去24小時內,我們獲得了五個系統型別事件的計數和一個線路協定事件的計數。這可以幫助我們識別特定型別的任何潛在問題。

內容解密:

此查詢用於統計來自Cisco裝置的日誌中,不同事件型別的出現次數。透過使用stats count(type) by type,我們可以清楚地看到每種型別的事件發生了多少次。這對於識別特定型別的問題非常有幫助。

同樣,如果我們想取得每個裝置上看到鏈路波動(介面快速上下波動)的次數,我們使用以下查詢:

sourcetype=cisco_syslog "down" | stats count(host) by _time,host

輸出的結果如下所示: 在這裡,我們可以看到鏈路波動在給定的時間戳內發生了三次,涉及路由器(192.168.20.1)。

內容解密:

此查詢專門用於查詢包含“down”關鍵字的日誌,這通常與介面關閉相關。透過統計這些事件按時間和主機劃分的次數,我們可以清晰地看到哪些裝置在何時經歷了鏈路波動。這對於診斷網路連線問題非常有用。

使用人工智慧於維運 Chapter 4

在前面的章節中,我們討論瞭如何使用 Splunk 進行趨勢分析。現在,讓我們探討機器學習(Machine Learning, ML)在維運中的應用。

Splunk 趨勢分析範例

首先,我們可以使用 Splunk 的查詢語言來分析 Cisco syslog 資料。例如,以下查詢可以幫助我們瞭解介面關閉相關的日誌趨勢:

sourcetype=cisco_syslog "down" | timechart count(host) by host

執行上述查詢後,我們可以得到一個時間圖表,顯示不同主機上介面關閉事件的發生次數。透過這個圖表,我們可以識別出特定時間範圍內發生問題的節點。

資料分析工具

在維運中,資料分析是至關重要的。以下是一些常用的資料分析工具:

  • Splunk
  • Prometheus
  • Grafana
  • Graphite
  • Elasticsearch
  • Dropwizard
  • Sysdig
  • 機器學習(Machine Learning)

機器學習簡介

機器學習是一種讓機器能夠在沒有明確程式設計的情況下進行學習的能力。它是電腦科學的一個分支,專注於設計和建立能夠自我學習的演算法。

機器學習的定義

機器學習是一種透過資料輸入、複雜數學計算和演算法來提供預測、任務或預測模式的結果的技術。

機器學習與人工智慧的關係

人工智慧(Artificial Intelligence, AI)是機器學習的更高層次框架,旨在模擬人類智慧或甚至超越人類智慧。機器學習是實作人工智慧的一種手段,它使機器能夠透過資料輸入和物件進行演化。

深度學習

深度學習是機器學習的一個子集,主要處理大量資料透過演算法進行學習。它被稱為神經網路(Neural Network, NN),類別似於人腦,可以互連多個資料集以進行有意義的學習。

機器學習的學習方法

機器學習有三種主要的學習方法:

  1. 監督式學習(Supervised Learning):系統會根據標籤案例(訓練集)建立通用模型,以預測和識別模式。
  2. 非監督式學習(Unsupervised Learning):系統會根據未標籤的案例找出模式,用於識別隱藏的模式。
  3. 強化學習(Reinforcement Learning):系統會根據反饋採取行動,學習在特定情況下執行最佳行動。

線性迴歸範例

讓我們使用 Python 的 scikit-learn 函式庫來實作線性迴歸,以分析薪資資料。

首先,我們需要匯入必要的函式庫並讀取薪資資料(Salary_Data.csv):

import numpy as np
import pandas as pd

# 匯入資料集
dataset = pd.read_csv('Salary_Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

#### 列印資料列表
print("Years of Experience in CSV...")
print(X)
print("Salary based upon of Experience in CSV...")
print(y)

接下來,我們將資料集分成訓練集和測試集,並使用線性迴歸模型進行訓練:

# 將資料集分成訓練集和測試集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=0)

# 將簡單線性迴歸模型擬合到訓練集
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

內容解密:

  1. import numpy as npimport pandas as pd:匯入 NumPy 和 Pandas 函式庫,用於數值計算和資料處理。
  2. dataset = pd.read_csv('Salary_Data.csv'):讀取薪資資料 CSV 檔案。
  3. X = dataset.iloc[:, :-1].valuesy = dataset.iloc[:, 1].values:提取特徵(工作經驗)和目標變數(薪資)。
  4. train_test_split(X, y, test_size=1/3, random_state=0):將資料集分成訓練集和測試集,其中測試集佔 1/3。
  5. LinearRegression():建立線性迴歸模型。
  6. regressor.fit(X_train, y_train):將線性迴歸模型擬合到訓練集。

透過這個範例,我們可以看到如何使用機器學習技術來分析和預測薪資資料。未來,我們可以將這種技術應用於更廣泛的維運領域,例如日誌分析、效能預測等。

簡單線性迴歸模型實作:根據工作經驗的薪資預測

在前面的程式碼中,我們進行了多個步驟的處理。讓我們探討每個步驟的細節。

1. 匯入必要的函式庫與資料處理

首先,我們匯入了必要的函式庫,包括 numpypandas,以便進行資料處理和後續的機器學習演算法操作。同時,我們也匯入了資料集(.csv 檔案),並將其中的資料分配給變數 Xy

import numpy as np
import pandas as pd

# 匯入資料集
dataset = pd.read_csv('Salary_Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

#### 輸出資料列表
print("工作經驗年數...")
print(X)
print("根據經驗的薪資...")
print(y)

內容解密:

  • numpypandas 是 Python 中用於數值計算和資料處理的重要函式庫。
  • dataset = pd.read_csv('Salary_Data.csv') 用於讀取名為 Salary_Data.csv 的資料檔案。
  • Xy 分別代表輸入特徵(工作經驗年數)和目標變數(薪資)。
  • print 陳述式用於驗證 Xy 的內容。

2. 資料分割:訓練集與測試集

接下來,我們將資料分割為訓練集和測試集。這是機器學習模型訓練中的關鍵步驟,訓練集用於模型的學習,而測試集則用於評估模型的預測能力。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)

內容解密:

  • test_size=1/3 表示將資料集的三分之一用作測試集,其餘三分之二用作訓練集。
  • random_state=42 確保每次執行程式碼時,資料分割的結果保持一致。

3. 簡單線性迴歸模型的建立與訓練

我們選擇使用簡單線性迴歸演算法來建立模型,並將訓練資料擬合到模型中。

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

內容解密:

  • LinearRegression() 用於初始化一個線性迴歸模型。
  • regressor.fit(X_train, y_train) 將訓練資料擬合到模型中,使模型能夠學習輸入特徵與目標變數之間的關係。

4. 資料視覺化:訓練集與測試集結果

為了更直觀地瞭解模型的預測效果,我們使用 matplotlib 將訓練集和測試集的結果視覺化。

import matplotlib.pyplot as plt

# 視覺化訓練集結果
plt.scatter(X_train, y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.title('薪資 vs 工作經驗 (訓練集)')
plt.xlabel('工作經驗年數')
plt.ylabel('薪資')
plt.show()

# 視覺化測試集結果
plt.scatter(X_test, y_test, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.title('薪資 vs 工作經驗 (測試集)')
plt.xlabel('工作經驗年數')
plt.ylabel('薪資')
plt.show()

內容解密:

  • plt.scatter() 用於繪製散點圖,表示實際的資料點。
  • plt.plot() 用於繪製迴歸線,表示模型的預測結果。

5. 薪資預測

最後,我們使用訓練好的模型對特定的工作經驗年數進行薪資預測。

y_pred = regressor.predict(np.array([[15]]))
print("\n\n預測15年工作經驗的薪資:")
print(y_pred)

y_pred = regressor.predict(np.array([[25]]))
print("\n\n預測25年工作經驗的薪資:")
print(y_pred)

y_pred = regressor.predict(np.array([[13]]))
print("\n\n預測13年工作經驗的薪資:")
print(y_pred)

內容解密:

  • regressor.predict() 用於根據輸入的工作經驗年數預測對應的薪資。

完整程式碼參考

# 簡單線性迴歸
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 匯入資料集
dataset = pd.read_csv('Salary_Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

#### 輸出資料列表
print("工作經驗年數...")
print(X)
print("根據經驗的薪資...")
print(y)

# 分割資料集為訓練集和測試集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)

# 建立簡單線性迴歸模型並訓練
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

# 薪資預測
y_pred = regressor.predict(np.array([[15]]))
print("\n\n預測15年工作經驗的薪資:")
print(y_pred)

y_pred = regressor.predict(np.array([[25]]))
print("\n\n預測25年工作經驗的薪資:")
print(y_pred)

y_pred = regressor.predict(np.array([[13]]))
print("\n\n預測13年工作經驗的薪資:")
print(y_pred)

# 視覺化訓練集結果
plt.scatter(X_train, y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.title('薪資 vs 工作經驗 (訓練集)')
plt.xlabel('工作經驗年數')
plt.ylabel('薪資')
plt.show()

# 視覺化測試集結果
plt.scatter(X_test, y_test, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.title('薪資 vs 工作經驗 (測試集)')
plt.xlabel('工作經驗年數')
plt.ylabel('薪資')
plt.show()

人工智慧在維運中的應用 - 第四章

在前面的章節中,我們探討了機器學習(Machine Learning, ML)的基本概念及其在維運中的初步應用。現在,我們將深入討論如何利用人工智慧(Artificial Intelligence, AI)來增強維運效率,特別是在資料分析和自動修復(Auto-Remediation)方面。

視覺化測試集結果

在進行機器學習模型的評估時,視覺化是一個非常重要的步驟。以下是一個使用Python的matplotlib函式庫來視覺化測試集結果的例子:

import matplotlib.pyplot as plt

# 假設X_test是測試集的特徵,y_test是對應的標籤
plt.scatter(X_test, y_test, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.title('薪水 vs 經驗(測試集)')
plt.xlabel('工作年限')
plt.ylabel('薪水')
plt.show()

內容解密:

  1. plt.scatter(X_test, y_test, color='red'):這行程式碼用於繪製測試集資料的散點圖,其中X_test代表工作年限,y_test代表對應的薪水。
  2. plt.plot(X_train, regressor.predict(X_train), color='blue'):這行程式碼繪製了根據訓練資料擬合的迴歸線,用於預測薪水。
  3. plt.title()plt.xlabel()plt.ylabel():這些函式用於設定圖表的標題、X軸標籤和Y軸標籤。
  4. plt.show():最終顯示繪製好的圖表。

Splunk中的機器學習工具包(MLTK)

Splunk提供了機器學習工具包(Machine Learning Toolkit, MLTK),可以對匯入Splunk的資料集進行分析。以下是一個使用卡爾曼濾波(Kalman Filter)演算法進行網際網路頻寬預測的示例截圖:

根據資料集的不同,我們需要選擇正確的演算法來進行預測和警示,或者進行自動修復。

自動修復

根據機器學習演算法的結果,我們可以觸發特定的動作來修復或解決問題。這種技術通常被稱為機器人流程自動化(Robotic Process Automation, RPA)。

RPA利用軟體或程式,藉助機器學習的能力,來處理那些需要大量手動操作的重複性任務。這些任務可能包括查詢、交易,或者根據機器學習決策結果的修復動作。

示例:

假設我們使用Splunk收集Syslog,並且當檢測到特定的Syslog事件時,觸發傳送電子郵件的動作。

首先,我們手動關閉路由器192.168.20.1上的Loopback45介面,以模擬一個錯誤或意外的介面關閉。這將向Splunk傳送一條Syslog訊息。

  1. 建立Splunk查詢:我們需要建立一個查詢來檢測特定的Syslog事件,例如:“Interface Loopback45, changed state to administratively down”。
"Interface Loopback45, changed state to administratively down" | stats count(host) as total by host

內容解密:

  1. 查詢陳述式用於檢索包含特定訊息的Syslog事件。

  2. stats count(host) as total by host:這部分用於統計每個主機觸發該事件的次數。

  3. 儲存查詢為警示:我們將這個查詢儲存為一個警示,並設定每5分鐘執行一次。同時,我們組態當警示觸發時,傳送電子郵件到指定的Gmail地址。

一旦組態完成,當Syslog事件在最近15分鐘內被接收到時,警示就會被觸發,並傳送電子郵件通知。

應用場景

AI在維運中的應用非常廣泛,從識別特定任務到自動修復任務,都可以利用AI技術來最佳化。

一些AI在維運中幫助最佳化的領域包括:

  • 識別正確的警示集:透過AI對資料進行相關性分析,可以從眾多警示中識別出實際的問題所在,從而減少工程師的工作量並提高故障排除的效率。
  • 將任務從被動轉變為主動:利用AI和機器學習,可以根據歷史資料和即時監控資訊,預測可能的故障並提前進行修復,從而減少停機時間並提高服務品質。

透過這些技術和方法的應用,AI正在維運領域展現出巨大的潛力,為企業帶來更高的效率和更低的營運成本。