如果檢視應用效能圖表是一種信仰
Esty 當年釋出 statsd 寫過一篇文章:[Measure Anything, Measure Everything](https://codeascraft.com/2011/02/15/measure-anything-measure-everything/](https://codeascraft.com/2011/02/15/measure-anything-measure-everything/)。 這篇文章對效能監控領域影響很大,系統監控工具如果能夠做到 All in One,那真的可以解決人力和時間成本上的問題。OneAPM 的工程師對這篇經典文章進行了編譯整理,希望能對大家有所啟發:
如果 Etsy 社群也有信仰,那一定是圖表,Ian Malpass 在 Code as Craft 發表的文章中這麼描述: 只要是變化的事件,我們就追蹤它。有時候,為了記錄事件的變化,我們從它不變時就用圖表進行記錄。通常,我們會從三個層面進行測量:網路、裝置以及應用。
應用指標往往是這三者中最難測量卻又最重要的。應用指標與業務息息相關,隨著應用的變化而變化。在此,我們不會早早地規劃要測量的所有指標,將它們放在經典的測量管理系統中,我們只會將工程師可能測量或計時的指標以最簡便的方式做成圖表。(我們可以隨時隨地修改程式碼並部署它,因此,測量“ X 的發生頻率”,“ X 在過去半小時內的發生情況”,只要有需求,就能很快實現。)
StatsD 簡介
StatsD 是一種簡單的監聽 UDP 埠訊息的 NodeJS 守護程式,NodeJS 對於基於事件的系統監控真的很簡單。該程式會分析這些訊息,抽取中其中的測量資料,並定期將資料推送給 Graphite。
我們選擇 Graphite 的原因很多:它使用簡便,圖形化和資料處理能力強大。我們可以結合通過 StatsD 或其他指標收集系統收集到的資料來了解系統執行情況。最重要的是,對於 StatsD 來說,可以根據傳輸給 Graphite 的資料自動建立指標。這意味著,工程師們在追蹤新的指標時無需擔心管理成本,只要告訴 StatsD:“我想要追蹤 grue.dinners
”,該指標就會自動出現在 Graphite 中。此外,向 Graphite 推送資料的頻率為10秒,因此,StatsD 測量的指標資料幾乎可以做到實時。
因此,有了 StatsD,抓取比率、速度等資料值就變得很簡單了,再通過 Graphite 對資料進行處理,對資料的檢視、分析也很容易實現。
為什麼使用 UDP?
前面也說了, Statsd 是通過 UDP 傳輸資料的,那麼有人會問為什麼選 UDP 而不選 TCP 呢? 首先,UDP 速度很快。任何人都不想為了提高應用效能而減慢其速度。此外,UDP 包遵循“傳送後不管(fire-and-forget)”機制。所以要麼 StatsD 接收了這個包,要麼沒有,應用不會在意 StatsD 是執行、當機還是著火了。它單純地相信一切執行正常。即便並非如此,stats 程式出現了問題,應用也不受影響。因為我們也信仰“正常執行時間(uptime)”概念,所以這不成問題。(當然,我們可以通過圖表追蹤 UDP 包接收失敗的情況。)
測量任意事件
以下是我們使用 PHP StatsD 函式庫的實現方式:
StatsD::increment("grue.dinners");
通過這樣一行程式碼,就在程式中建立了一個新的計數器,在每次執行後增加計數。接下來,就可以只關注圖表的展現,而不去考慮其他了。
我們可以使用 Graphite 提供的資料處理工具來處理上面的資料,建立異常偏離標準值的圖表。
(有時,我們會使用 Graphite 中的 rawData=true
選項獲取能自動推送給監控系統的數字流,這一型別的圖表非常容易被監控。)
我們不僅監控諸如“有多少人登陸了這個網站”這類重要的事情,我們也會追蹤一些瑣碎的事件,比如“廚房裡還剩多少咖啡”:
為所有事件計時
除了計數,我們還可以追蹤時間。
$start = microtime(true);
StatsD 可以自動追蹤次數,平均值,最大/小值,以及百分之 90 時間值。在下面的例子中,我們測量了部分搜尋裝置的執行時間。
eat_adventurer();
StatsD::timing("grue.dinners", (microtime(true) - $start) * 1000);
資料取樣
我們很早就發現,如果受追蹤的某些事件發生的頻率非常高,UDP 包就會溢滿 StatsD。為了解決這個問題,我們增加了資料取樣的選項——只在一段時間內傳送資料包。但對於那些異常活躍的事件,即便這麼做還是會帶來過多的資料。
為此,我們只記錄十個事件中的一個事件,可以採取以下方法:
StatsD::increment(“adventurer.heartbeat”, 0.1);
測量所有事件
追蹤所有事件是提高效率的關鍵。有了 StatsD,工程師們可以輕鬆追蹤他們需要關注的事務,而無需費時地修改配置。
Cloud Insight 集監控、管理、計算、協作、視覺化於一身,幫助所有 IT 公司,減少在系統監控上的人力和時間成本投入,讓運維工作更加高效、簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格。
相關文章
- 如果說程式語言是一種宗教,你的信仰是?
- 【口號】學習是一種信仰!
- 檢視DG是否是實時應用
- Oracle 常用效能檢視一覽表(10g)Oracle
- 檢視Oracle DG是否是實時應用Oracle
- MySQL壓縮表的一種應用MySql
- 如果40歲了還在寫程式碼,是一種幸福,還是一種悲哀?
- 如果40歲了還在寫程式碼 是一種幸福 還是一種悲哀?
- win10照片應用看圖片怎麼直接檢視下一張_win10照片應用檢視照片如何下一張翻頁Win10
- 如果程式語言是種武器
- oracle-一些檢視效能相關的檢視Oracle
- 兩種檢視oracle表結構的方法Oracle
- Oracle九大效能檢視 之一Oracle
- 【效能調整】系統檢視(一)
- 圖撲視覺化圖表元件之股票資料分析應用視覺化元件
- oracle效能檢視Oracle
- 大資料技術於應用 視覺化圖表的開發應用大資料視覺化
- Oracle檢視:常用動態效能檢視Oracle
- Flutter 應用效能檢測與優化Flutter優化
- 趣文:如果程式語言是種武器
- Oracle日常效能檢視Oracle
- 動態效能檢視
- 用於金融科技應用開發的高效能圖表控制元件控制元件
- 檢視oracle被鎖的表是誰鎖的Oracle
- oracle一些效能檢視的解釋Oracle
- .net core EF Core 檢視的應用
- ActiveReports 報表應用教程 (7)---交叉報表及資料透檢視實現方案
- 論:開發者信仰之“天下IT是一家“(Java .NET篇)Java
- 移動應用開發者必讀:提升應用效能的13種方式
- 如何在Web應用中新增一個JavaScript Excel檢視器WebJavaScriptExcel
- 【Oracle九大效能檢視】之3.v$session_關於與其它效能檢視表聯合查問題SQLOracleSessionSQL
- ActiveReports 報表應用教程 (3)---圖表報表
- 一表理清如何正確選擇視覺化圖表,掌握後再也不怕用錯圖表視覺化
- 【物化檢視】幾種物化檢視日誌分析
- 檢視 Oracle 是用spfile 啟動還是 pfile 啟動Oracle
- 自定義檢視---圓角柱狀圖(一)
- ASM動態效能檢視ASM
- oracle v$sysstat效能檢視Oracle