Graphite 是一個高度可擴展的即時圖形系統,同時也是企業級監視工具。用於擷取網站即時資訊並進行統計,可擷取多種網站服務運作狀態資訊。
誰應該使用Graphite?
任何想要長期追蹤任何數值的人。如果你有一個可能會隨時間變化的數字,而你可能會想把這個數值隨時間變化的情況用圖表表示出來,那麼Graphite可能可以滿足你的需求。
具體來說,Graphite被設計用來處理數字時間序列資料。例如,Graphite就很適合用來繪製股票價格圖,因為它們是隨時間變化的數字。無論是幾個數據點,還是來自數千務器的幾十個性能指標,那麼Graphite都適合你。作為獎勵,你不一定要事先知道這些東西的名稱(誰想維護如此龐大的配置?);你只需發送一個度量名稱、一個時間戳和一個值,剩下的事情就由Graphite來處理了。
Graphite的可擴展性如何?
從CPU的角度來看,Graphite在前端和後端都是水平擴展的,這意味著你可以簡單地添加更多的機器來獲得更多的吞吐量。它還具有容錯性,即失去一台後端機器會造成極小的資料損失(無論這台機器在記憶體中快取了什麼),如果你有足夠的剩餘容量來處理負載,就不會破壞系統。
從I/O的角度來看,在負載下,Graphite會非常迅速地對許多不同的檔案執行許多微小的I/O操作。這是因為每一個發送到Graphite的不同度量都儲存在自己的資料庫檔案中,類似於許多建立在RRD之上的工具(drraw、Cacti、Centreon等)的工作方式。事實上,Graphite最初確實使用RRD進行存儲,直到出現了基本的限制,需要新的儲存引擎。
高容量(每分鐘更新數千個不同的指標)幾乎需要一個好的RAID陣列和/或SSD。如果磁碟無法跟上大量發生的小型寫入操作(每個資料點只有幾個字節,但大多數標準磁碟每秒的I/O操作不能超過幾千次,即使它們很小),Graphite的後端會快取傳入的資料。當這種情況發生時,Graphite的資料庫引擎whisper允許碳一次寫入多個資料點,從而提高整體吞吐量,只是代價是將多餘的資料緩存在記憶體中,直到可以寫入。
Graphite還支援替代的儲存後端,可以大幅改變這些特性。
圖表的即時性如何?
非常實時。即使在重負載的情況下,當每個時間間隔傳入的指標數量遠遠大於儲存系統執行I/O 操作的速度,並且大量的資料點被緩存在儲存管道中(見前面的問題解釋) ,Graphite 仍然可以繪製即時圖形。訣竅是,當Graphite webapp 收到繪製圖形的請求時,它同時從磁碟上以及預存儲緩存中檢索資料(如果你有多個後端伺服器,快取可能是分散式的),並將兩個資料來源結合起來,創建一個即時圖形。
誰已經在使用Graphite?
Graphite是由Orbitz內部開發的,在這裡,它被用來視覺化各種關鍵營運數據,包括應用指標、資料庫指標、銷售等。在寫這篇文章的時候,Orbitz的生產系統可以每分鐘處理大約160,000個不同的指標,這些指標運行在高速SAN上的兩台niagra-2 Sun伺服器上。
Graphite是用什麼寫的?
Graphite webapp建立在Django web框架上,使用ExtJS javascript GUI工具包。圖形渲染使用Cairo圖形庫完成。後台和資料庫是用純Python編寫的。
誰來寫和維護Graphite?
Graphite最初是由Orbitz的Chris Davis開發的。 Orbitz長期以來一直是開源社群的一部分,並發布了其他一些內部開發的產品。
Graphite 目前由Graphite-Project GitHub 組織下的志工團隊所開發。