監控數據有多種形式--有些系統會持續地輸出數據,而其餘系統只會在發生罕見事件時生成數據。有些數據可以直接定位問題,有些數據能幫助調查問題。更寬泛的說,擁有監控數據是觀察系統工做情況的必要條件。數據庫
不管採集什麼形式的監控數據,核心要點都是同樣的:數組
採集數據的開銷很小,可是若是在須要的時候沒有數據,代價可就大了。因此有必要檢測全部內容,而且合理地收集全部有用的數據。緩存
指標是在特定時間捕獲的與系統相關的值 -- 好比當前登錄到Web應用程序的用戶數量。所以,一般以固定時間間隔收集指標,好比每秒採集一次,每分鐘採集一次。服務器
咱們把指標主要分紅兩類:工做指標和資源指標。對於軟件依賴的每一個系統,應該考慮哪些工做指標和資源指標是合理的,而且將其所有收集。網絡
工做指標經過系統的輸出來獲取系統的運行情況。在考慮採集工做指標時,一般能夠將這些指標分紅四類:架構
上面講的指標對於觀察系統的運行情況很是重要。採集到了這些數據能夠快速回答關於系統內部健康和性能最緊迫的問題:系統如今可用嗎?系統如今性能如何?微服務
如下是兩種常見系統的全部四種子類型的工做指標示例。性能
子類型 | 描述 | 值 |
---|---|---|
吞吐量 | 每秒請求數 | 312 |
成功率 | 兩次測量間2xx的響應百分比 | 99.1 |
錯誤率 | 兩次測量間5xx的響應百分比 | 0.1 |
性能 | 百分之90的請求的響應時間(秒) | 0.4 |
子類型 | 描述 | 值 |
---|---|---|
吞吐量 | 每秒查詢次數 | 949 |
成功率 | 兩次測量間成功執行的查詢百分比 | 100 |
失敗率 | 兩次測量間成功執行的查詢百分比 | 0 |
失敗率 | 兩次測量見返回過期數據的查詢百分比 | 4.2 |
性能 | 百分之90的查詢時間(秒) | 0.02 |
軟件基礎架構的大多數組件都成爲其餘系統的資源。有一些資源是底層的,好比CPU,內存,磁盤和網絡接口之類的物理組件。若是另一些組件,好比數據庫或者地理定位微服務也能夠被當作是資源,由於其餘的系統須要這些組件來完成工做。線程
資源指標有助於瞭解系統的詳細狀態,這在調查問題和診斷問題的時候是特別有價值的。資源指標能夠分爲四類:cdn
下面是幾種常見的資源類型的指標示例
資源 | 利用率 | 飽和度 | 錯誤 | 可用性 |
---|---|---|---|---|
磁盤 IO | 設備繁忙時間的百分比 | 等待隊列長度 | 設備錯誤 | 可寫的時間的百分比 |
內存 | 已使用的內存百分比 | swap使用率 | (一般觀測不到) | 一般觀測不到 |
微服務 | 每一個請求服務線程忙的平均時間百分比 | 請求數量 | 服務拋出異常 | 服務可用時間的百分比 |
數據庫 | 每一個鏈接繁忙的平均時間百分比 | 排隊中的查詢 | 內部錯誤,好比複製錯誤 | 服務可訪問的時間百分比 |
還有一些指標,既不是工做指標,也不是資源指標,但這些指標一樣有助於觀察複雜的系統。比較常見的例子是緩存命中數或者數據庫鎖。
除了能夠連續收集的指標外,一些監控系統還能夠捕獲事件,這些事件每每是頻繁的,離散的,但對整個系統的理解是有幫助的。好比:
事件一般帶有足夠的信息,能夠單獨解釋,而不像單個數據點一般只有在上下文中才有意義。
事件會記錄在特定時間點發生的事情,好比
時間 | 時間 | 附加信息 |
---|---|---|
Hotfix f464bfe發佈到生產環境了 | 2015-05-15 04:13:25 UTC | 時間:1.2秒 |
Pull request 1630被合併了 | 2015–05–19 14:22:20 UTC | commit:ea720d6 |
每夜數據彙總失敗 | 2015–05–27 00:03:18 UTC | 失敗任務的連接 |
事件有時候用來生成告警--通知負責人事情的發生,好比上面的第三個例子。不過這些事件更經常使用的用法是調查問題。通常來講,最好像指標同樣考慮這樣的事件--儘量地收集它們。
須要收集的數據應該有四個特徵: