1 回答

TA貢獻1829條經驗 獲得超9個贊
嗯,這是一個復雜的話題,因此不可能有一個明確的答案。
實際上,您所接近的在生產設置中被稱為“指標收集”或“遙測”。
在大多數情況下,指標的收集使用采樣方法:即收集感興趣的系統狀態的快照并將其發送到某處?!澳程帯蓖ǔJ且恍┫到y,它允許將指標的值保存在某處,并且通常還提供各種分析它們的方法。
在最簡單的情況下,分析是通過在某種 UI 中查看從收集的數據中繪制的圖表來完成的。更復雜的情況包括當某些指標的值高于(或低于)某個閾值時發出警報。
單個指標是特定類型的一些命名值。
指標可以從不同的數據源產生。用 Go 編寫的程序運行的相當常見的設置的典型來源包括:
Go 運行時本身。
這包括諸如 goroutine 的數量和垃圾收集統計數據之類的東西——由于顯而易見的原因,這些測量結果不可能在運行的 Go 程序之外獲得。
操作系統提供的有關執行程序的運行進程的測量值。
這包括在內核的用戶和系統上下文中花費的 CPU 時間、操作系統所看到的內存消耗、打開的文件(和套接字)描述符的數量、CPU 上下文切換的數量、磁盤 I/O 統計信息等等。
由運行包含程序的容器的容器化軟件提供的測量結果。
在 Linux 上,這通常由子系統提供
cgroup
,該子系統主要負責控制對進程層次結構施加的資源限制。
如何準確地從這些數據源轉換數據是一個懸而未決的問題(這就是為什么它不適合 SO 格式)。
例如,要收集 Go 運行時統計信息,您可以使用expvar
@Adrian 建議的機制,并定期輪詢其提供的 HTTP 端點以獲取數據。
或者,您可以在程序中運行一個內部 goroutine,它定期從運行時獲取這些數據并將其推送到某個地方。
同樣,操作系統級進程相關數據的采樣可以通過不同的方式完成。比如說,您可以使用類似的方法從您的程序中收集它們,github.com/shirou/gopsutil/process
并將它們與從運行時統計數據收集的指標一起推送,或者您可以使用一種或多種工具從外部收集這些數據。
(據我所知,收集操作系統級性能數據的技術含量最低但最容易訪問的方法是使用pidstat
、iotop
、等工具)。atop
cpustat
保留和分析收集到的數據的問題再次是開放的。
首先,它可能很簡單,只需將所有內容轉儲到結構化文件中(每條記錄上可能帶有時間戳),然后使用您喜歡的任何內容進行處理(例如,RRD 工具或 R 或......等等)pyplot
。
或者,您可以從一開始就拿起一把大槍,將您的指標發送到 Graphite、Graphana、Zabbix、icinga 或當前位于其臀部曲線頂部的任何內容。
- 1 回答
- 0 關注
- 167 瀏覽
添加回答
舉報