在現今複雜的系統架構下,有效的日誌管理和監控至關重要。選擇合適的日誌策略,無論是自行搭建還是使用第三方服務,都需仔細考量成本、維護和安全性等因素。同時,設計易於理解和使用的監控儀錶板,能有效提升團隊的反應速度和決策效率。本文將會探討如何選擇合適的日誌管理策略,並分享設計高效監控儀錶板的實務經驗。
維運盲點(Operational Blindness)與日誌彙總系統的重要性
在技術維運的領域中,選擇適當的日誌管理策略對於系統的穩定性和團隊的工作效率至關重要。雖然自行搭建日誌彙總系統具有一定的吸引力,但使用第三方日誌服務(SAAS 提供者)往往是更為明智的選擇。
為何選擇第三方日誌服務?
首先,依賴第三方服務可以減少團隊的維運負擔。許多團隊在日常維運中已經面臨諸多挑戰,如保持伺服器更新、漏洞管理和容量規劃等。自行搭建日誌彙總系統無疑會增加額外的維運壓力。
其次,內部系統的中斷可能會對多個團隊成員的工作流程造成嚴重影響。相較之下,第三方服務提供者通常具備更高的冗餘度和還原能力,能夠有效降低資料丟失的風險。
自行搭建日誌彙總系統的注意事項
如果你決定自行搭建日誌彙總系統,以下幾點是必須考慮的:
日誌量的不可預測性:應用程式伺服器在 DEBUG 模式下可能會產生大量日誌。確保你的基礎設施具備處理這種突發情況的能力,例如透過速率限制、丟棄特定訊息型別或彈性擴充套件。
索引操作的成本:根據日誌欄位的不同,索引操作可能會非常昂貴。瞭解你的日誌彙總系統的關鍵效能指標,並密切監控以確保索引不會延遲。
熱資料與冷資料的儲存設計:大多數被查詢的日誌都集中在一到兩週內。設計一個將近期日誌存放在最快磁碟上,而將較舊的日誌遷移到較慢、成本更低的磁碟上的系統,可以有效節省成本。
程式碼範例:彈性擴充套件日誌處理系統
import logging
from elasticsearch import Elasticsearch
# 設定 Elasticsearch 連線
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
def process_log(log_data):
try:
# 將日誌資料寫入 Elasticsearch
es.index(index='logs', body=log_data)
except Exception as e:
logging.error(f"Error processing log: {e}")
# 假設 log_data 是從某個來源取得的日誌資料
log_data = {"message": "Example log message", "level": "INFO"}
process_log(log_data)
內容解密:
Elasticsearch 連線設定:此程式碼首先匯入必要的函式庫,並建立到本地 Elasticsearch 例項的連線。這是為了將日誌資料寫入 Elasticsearch 以便後續的檢索和分析。
process_log函式:該函式負責處理單條日誌資料。它嘗試將日誌資料寫入指定的 Elasticsearch 索引。如果在此過程中發生錯誤,將會記錄錯誤訊息。錯誤處理:透過使用
try-except區塊,程式碼能夠捕捉並記錄任何在寫入日誌過程中可能發生的異常,確保程式的穩定性。
使用第三方日誌服務的潛在問題
雖然使用第三方日誌服務可以簡化許多工作,但也有其需要注意的地方:
超額費用:瞭解服務提供商如何收取超出限制的日誌傳輸費用。某些提供商可能會限制你存取資料,即使新的日誌仍能被接收。
敏感資訊保護:在將日誌傳輸給第三方之前,必須實施適當的控制措施以清除敏感資訊。
成本對日誌策略的影響:避免讓日誌彙總的成本影響你的日誌記錄策略。適當的日誌記錄對於故障排除和系統監控至關重要。
資料與資訊的區別
有時候,你可能會面對大量的資料,卻不知道哪些是有用的。這種情況下,人們往往從「我有什麼資料?」的角度出發,而不是「我想知道什麼?」。這會導致兩個問題:一是沒有挑戰自己找出答案的方法,二是傾向於把現有的資料當作最終答案。
資料只是原始、無組織的事實,但當你給予這些資料上下文和結構時,它就變成了資訊。在檢視儀錶板時,你可以很快分辨出哪些是提供資料,哪些是提供資訊。
本章涵蓋了以下主題:
- 為特定目的劃定儀錶板的範圍
- 有效地組織儀錶板
- 為使用者提供上下文提示
有效組織儀錶板的關鍵
明確儀錶板的目的:每個儀錶板都應該有明確的目的,避免資訊過載。
組織結構:根據使用者的需求和工作流程組織儀錶板的佈局和內容。
提供上下文:透過適當的標籤、註解和說明,為使用者提供必要的上下文,以便他們理解資料背後的意義。
儀錶板結構
此圖示展示了建立有效儀錶板的步驟,從理解使用者需求到提供適當的上下文,每一步都至關重要。
內容解密:
使用者需求:瞭解目標使用者需要從儀錶板中獲得什麼資訊,是設計儀錶板的基礎。
儀錶板目的:根據使用者需求定義儀錶板的目的,確保其具有明確的方向。
組織結構與上下文提供:合理的組織結構和適當的上下文提示,能夠幫助使用者快速理解和利用儀錶板中的資訊。
以使用者為出發點,而非資料
大多數人認為只要擁有系統狀態的指標就足夠了,但如何將系統狀態呈現給使用者卻與取得這些指標一樣重要。糟糕的視覺化指標是無用的,它們只會變成一堆積數字,讓重要的訊號在雜訊中喪失。
沒有人會直接將一大堆積指標資料以Excel表格的形式呈現給使用者,即使真的這樣做,使用者第一步也會把這些數字轉換成某種視覺化的圖表。影像的力量不可低估,人類主要透過視覺來吸收知識,指標資料也是如此。
然而,僅僅知道需要使用影像並不等於知道如何最佳地組織它們。資料視覺化和使用者經驗(UX)設計是一個龐大的領域,需要大量的專業知識。不過,你不需要成為專家就可以開始為團隊和其他利益相關者設計有用的儀錶板。
本章將為你提供實用的技巧,讓你的儀錶板更具目的性,並更容易被觀眾接受。我將提供一些設計儀錶板的指導原則,教你如何組織它們,並突出關鍵資訊。但這一切都始於瞭解儀錶板的目標受眾是誰。
辨別目標受眾
許多人在設計儀錶板時會犯的一個錯誤是,從選擇一個系統或伺服器開始,然後檢視有哪些指標可用,以此來構建所謂的「終極儀錶板」。這種方法是一個陷阱,最終很可能會導致建立出一個對你或他人都不是非常有用的儀錶板。
你的第一步應該是確定你的儀錶板的目標受眾。這將幫助你確定要顯示哪些指標、哪些指標需要重點突出,以及資料的粒度應該是多少。不同的受眾有不同的需求,根據特定的目的來構建儀錶板將導致兩個截然不同的儀錶板。
讓我們考慮一個資料函式庫系統的例子。資料函式庫有時被視為應用程式的神經中樞,所有應用程式的長期資料都儲存在其中。它還驅動著決策標準。報告團隊會查詢資料函式庫以取得各種業務指標。
在這個虛擬公司中,資料函式庫團隊決定為主要資料函式庫建立一個只讀副本。只讀副本是資料函式庫的另一個副本,使用者只能從中讀取資料(不能寫入)。資料函式庫透過複製機制從主要資料函式庫更新。當主要資料函式庫進行更新時,資料函式庫系統會將相同的更改複製到只讀副本,以保持同步。報告團隊查詢只讀副本,以避免對主要資料函式庫造成不必要的擁塞,從而影回應用程式的正常使用者。
為誰設計儀錶板?
如果你正在為只讀副本構建一個儀錶板,你應該決定你正在為哪個受眾構建它——是資料函式倉管理員還是報告團隊?報告團隊在執行報告時可能關心以下幾個關鍵事項:
- 目前有多少報告正在執行?
- 只讀副本上次從主要資料函式庫更新是什麼時候?
- 資料函式庫整體上有多忙?
這些問題與資料函式倉管理員可能關心的問題相似,但重點和所需的詳細程度可能會大不相同。以「資料函式庫有多忙?」這個問題為例。資料函式倉管理員可能希望將資料分解為CPU利用率、磁碟輸入/輸出(I/O)、記憶體利用率、資料函式庫緩衝區快取命中率等。管理員需要這些詳細資訊,因為他們的目的不僅是瞭解系統的效能,還要了解影響效能的因素。報告團隊只是想能夠設定他們的報告執行時間預期。在這種情況下,他們只需要一個紅/黃/綠的狀態指示器來表示資料函式庫效能。他們只需要知道系統是否會比平常執行得更慢,或者與典型效能相當。
這就是為什麼從使用者出發是設計儀錶板的最佳實踐。瞭解使用者將要做什麼的動機。一個用於故障排除的儀錶板和一個用於狀態監控的儀錶板可能看起來非常不同,因為它們的預期使用案例是如此不同。在開發新的儀錶板時,問問自己這些問題:
- 誰將會檢視這個儀錶板?
- 這個儀錶板的預期目的是什麼?
- 根據這個預期目的,儀錶板需要快速傳達哪三到五個最重要的資訊?
有了這些資訊,你就可以開始構建你的新儀錶板。
小工具:儀錶板的構建塊
在你決定了你的新儀錶板應該顯示什麼之後,你必須決定如何顯示它。每個被顯示的指標都是在小工具的上下文中完成的。小工具是一個小的圖形單元,用於顯示特定指標的視覺化。一個小工具可以有多種不同的顯示型別。儀錶板由許多小工具組成。
定義
小工具是用於顯示指標的圖形元件。儀錶板是小工具的集合。小工具可以使用不同的顯示型別來表達底層資料。
線圖
在技術指標領域,很難出錯的一種基本圖表型別是線圖。線圖為你提供了當前值以及歷史趨勢,讓你能夠看到隨著時間的變化和指標的可變性。當你猶豫不決時,使用線圖是一個不錯的選擇。
內容解密:
線圖是一種簡單卻非常有效的視覺化工具。它能夠清晰地展示某個指標隨著時間變化的趨勢。透過觀察線圖,我們可以輕易地看出該指標的波動情況,以及是否存在某種規律或異常。這對於技術指標的監控和分析來說,是非常有價值的。線圖之所以被廣泛使用,是因為它能夠簡潔直觀地傳達複雜的資料資訊,使得使用者能夠快速地理解和做出反應。
資料儀錶板的核心元件:Widgets
觀察圖4.1,我們可以看到所測量的指標——當前活躍使用者數——在夜間降至極低,但隨著工作日的開始逐漸攀升。在某些情況下,我們可能需要在同一張圖表上繪製多個值。
有多種常見的場景需要這樣做。第一種情況是,我們有多個程式或伺服器需要在同一張圖表上顯示。以一個網頁伺服器為例,我們希望看到每個伺服器的CPU利用率或請求計數,以瞭解流量是否在網頁叢集中平均分配。在這種情況下,將多條線繪製在同一張圖表上非常有意義。
在圖4.2中,我們可以看到一個Widget具有多條線,每條線代表不同的伺服器。這些線的緊密程度表明每個節點的工作量大致相同。
多重指標的呈現
在第二種情況中,我們可能希望能夠看到某個指標的所有值的總和,但仍然能夠隔離特定的方面。以我們之前的訊息系統為例,我們可能希望知道在我們的訊息平台上有多少消費者存在。但我們也想知道這些消費者來自哪裡,或者更準確地說,哪個伺服器具有最多的連線。在這種情況下,我們可能需要考慮使用區域圖(有時也被稱為堆積疊線圖)。這些圖表的作用類別似於個別的線圖,但它們不是從零開始,而是堆積疊在彼此之上,從前一條線的高點開始。兩條堆積疊線之間的區域以對比色填充,以突出兩個工作負載之間的差異。
圖表示例與分析
由於這些專案是堆積疊在彼此之上的,我們也可以快速地看到總數。圖4.3顯示了一個堆積疊線圖,它正在顯示訊息匯流排上的消費者總數。
此圖示展示了多個伺服器如何將指標匯總並顯示總計。
內容解密:
- 圖表展示了三個伺服器(伺服器1、伺服器2、伺服器3)將各自的指標匯總到一個總計中。
- 每個伺服器的指標都被匯總並顯示在最終的圖表中。
- 這種結構清晰地表達了資料的流動和匯總過程。
柱狀圖的應用
當資料非常不頻繁或存在資料缺失時,柱狀圖是一個很好的選擇。使用線圖時,很多工具會在缺失的資料點之間繪製出令人尷尬的線,這些線乍一看似乎是一系列上升或下降的值。但事實上,這些資料點只是較不頻繁。缺乏頻率會導致線圖看起來不準確。柱狀圖透過不需要在兩個點之間繪製連線線來解決這個問題。空值根本不會被顯示。
許多繪圖工具允許您將空值解釋為零並相應地繪製它們。在某些情況下這可能是可以的,但根據您的指標,缺失的值可能與零值截然不同。一個例子是當您測量來自伺服器的指標時,伺服器負責將指標傳送到指標收集引擎(推播),而不是引擎連線到伺服器並請求資訊(提取)。
資料推播與提取的區別
推播資料發生在個別代理或伺服器負責將資料傳送到集中式收集服務時。提取資料發生在收集服務連線到各個節點以請求資料時。瞭解資料是如何收集的以及資料收集的方向,在排除收集問題時非常有幫助。
如果您的指標資料是從伺服器推播到指標收集服務,那麼零值(伺服器已傳送資料並報告值為零)與缺失資料(伺服器從未傳送值,也許是因為它已關閉)是非常不同的。根據您的環境,您可能希望瞭解兩者之間的差異並相應地繪製它們。柱狀圖允許您突出這些差異。
圖表示例與分析
圖4.4顯示了一個具有缺失資料的柱狀圖。該圖正在顯示某個流程的作業執行時間。
此圖示展示了作業執行時間如何被記錄並顯示在柱狀圖中,而無執行的情況則因無資料而不被顯示。
內容解密:
- 作業執行時,其執行時間被記錄並顯示在柱狀圖中。
- 若作業未執行,則因無資料而不被顯示,避免了將缺失資料誤解為零值的情況。
- 這種區分對於正確理解作業執行情況至關重要。
圖表與資料的脈絡化呈現
在建立儀錶板時,單純的資料顯示往往不足以讓使用者理解其背後的意義。為了讓資料變得有意義,我們需要為其提供脈絡(context),讓使用者能夠快速判斷資料的狀態是良好還是糟糕。本章將探討如何透過不同的方式為資料提供脈絡,包括顏色標示、門檻線以及時間比較等方法。
透過顏色提供脈絡
顏色是一種直觀且強大的工具,能夠幫助我們快速傳達資訊的意義。大多數人對於某些顏色已經有既定的聯想,例如綠色通常代表「正常」或「安全」,而紅色則代表「危險」或「錯誤」。利用這種既定的色彩聯想,我們可以為資料新增顏色標示,讓使用者能夠一目瞭然地理解資料的狀態。
大多數的儀錶板工具都允許使用者根據資料的值來改變其顏色,或是在特定範圍內新增符號註解。透過這種功能,我們可以動態地為資料新增顏色標示,從而幫助使用者快速判斷資料是否處於正常狀態。
程式碼範例:使用顏色標示資料狀態
def color_code_value(value):
if value < 30:
return "green"
elif value < 60:
return "yellow"
else:
return "red"
# 假設我們有一個資料值
data_value = 75
color = color_code_value(data_value)
print(f"The color for the value {data_value} is {color}")
內容解密:
- 我們定義了一個函式
color_code_value,它接受一個數值value作為輸入。 - 在函式內部,我們根據
value的大小傳回不同的顏色字串。如果value小於 30,則傳回"green";如果value小於 60,則傳回"yellow";否則傳回"red"。 - 我們使用這個函式來為一個假設的資料值
data_value進行顏色標示,並列印出結果。
透過門檻線提供脈絡
門檻線(threshold lines)是另一種為資料提供脈絡的有效方法,尤其是在圖表中使用。門檻線是一條靜態的線,代表某個特定的門檻值或限制。無論使用者檢檢視表時選擇的時間範圍如何,門檻線都能提供一個參照點,幫助使用者判斷資料是否處於可接受的範圍內。
使用門檻線的圖表
此圖示展示了使用門檻線的流程,從資料收集到最終的圖表顯示。
時間比較
除了顏色和門檻線之外,時間比較也是為資料提供脈絡的一種重要方法。透過比較不同時間點的資料,我們可以觀察到資料的變化趨勢,從而更好地理解其背後的意義。
資料視覺化儀錶板設計:超越資訊的資料呈現
在設計監控儀錶板時,資料視覺化扮演著至關重要的角色。適當的視覺化不僅能幫助快速理解系統狀態,還能突出關鍵效能指標。本章將探討如何有效地組織和呈現監控資料。
透過顏色賦予指標意義
顏色的選擇對於資料視覺化至關重要。不同的顏色會給觀者帶來不同的感受和聯想。例如,使用紅色虛線來表示閾值,可能會讓人覺得該指標需要低於某個門檻才被視為健康狀態。如果使用綠色,則可能傳達出相反的含義,讓人認為指標需要高於某個門檻才是健康的。這說明瞭顏色的力量在於能夠迅速傳達特定的資訊。
此外,虛線的設計也能幫助將閾值與其他指標資料區分開來,避免混淆。如果其他指標資料也是使用虛線表示,那麼可以考慮將閾值改為實線,以確保視覺上的區隔。
內容解密:
此圖示展示了不同顏色和線條樣式對觀者理解的影響。紅色和綠色代表不同的健康狀態判斷標準,而虛線和實線的選擇則影響著閾值與其他資料的可辨識度。
透過時間比較提供背景資訊
在許多工作負載中,指標模式可能會根據一天中的不同時間而變化。這種變化可能源於使用者線上時間、後台處理時間或是負載的普遍增加。為了理解當前指標資料是否異常或是符合以往的模式,可以使用時間比較疊加圖。
透過將前24小時的指標資料疊加在當前圖表上,可以清楚地看出歷史表現與當前表現之間的關係。如圖4.6所示,資料函式庫讀取延遲在24小時內的變化情況一目瞭然。
此圖示中,實線區域代表當前指標值,而虛線則代表24小時前的相同指標。這種對比方式能夠提供歷史表現與當前表現之間的直接比較。
內容解密:
此圖示說明瞭時間比較疊加圖的工作原理。透過將當前資料與歷史資料進行比較,可以更準確地判斷當前系統狀態是否正常。
組織儀錶板以提供快速存取
設計儀錶板時,組織結構應以使用者需求為核心。通常,將最重要的資訊放在最顯眼的位置,如第一行。這樣,使用者在登入儀錶板時,可以快速取得最關鍵的資訊。
儀錶板的組織結構並非一成不變。隨著時間的推移,使用者可能會發現某些指標的重要性發生了變化,或者系統出現了新的問題。在這種情況下,調整儀錶板的組織結構,以突出最重要的指標,是非常必要的。
內容解密:
儀錶板的設計應根據使用者需求和使用場景進行調整。保持靈活性,以確保使用者能夠快速存取所需的資訊。
使用儀錶板列來組織小工具
儀錶板中的小工具按照列進行排列。從左到右、從上到下的順序應該反映出資訊的重要程度。通常,具有相關性的指標會被分組在一起,如磁碟效能指標、CPU指標和業務關鍵效能指標。然而,第一列是一個例外,它應該保留給最重要的指標。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 日誌管理策略與儀錶板設計最佳實踐
package "資料視覺化流程" {
package "資料準備" {
component [資料載入] as load
component [資料清洗] as clean
component [資料轉換] as transform
}
package "圖表類型" {
component [折線圖 Line] as line
component [長條圖 Bar] as bar
component [散佈圖 Scatter] as scatter
component [熱力圖 Heatmap] as heatmap
}
package "美化輸出" {
component [樣式設定] as style
component [標籤註解] as label
component [匯出儲存] as export
}
}
load --> clean --> transform
transform --> line
transform --> bar
transform --> scatter
transform --> heatmap
line --> style --> export
bar --> label --> export
note right of scatter
探索變數關係
發現異常值
end note
@enduml內容解密:
此圖示展示了儀錶板中小工具的組織方式。最重要的指標被放在第一列,而相關指標則被分組顯示,以提高可讀性。