RRDtool入門詳解

来源:http://www.cnblogs.com/yaoyao-start/archive/2016/01/11/5122289.html
-Advertisement-
Play Games

---------------原創內容,轉載請註明出處。------------一、概述RRDtool(round-robin database tool),即輪詢式資料庫工具(註:並不等同於電腦中的輪詢調度演算法),採用固定大小的空間來存儲數據,設定一個指針,隨數據的讀寫移動,指向最後更新的數據的...


---------------原創內容,轉載請註明出處。<[email protected]>------------

 

一、概述

RRDtool(round-robin database tool),即輪詢式資料庫工具(註:並不等同於電腦中的輪詢調度演算法),採用固定大小的空間來存儲數據,設定一個指針,隨數據的讀寫移動,指向最後更新的數據的位置。

很多資料中都將存儲數據的資料庫空間看做一個圓,這個圓沒有起點也沒有終點,因此只需一個固定大小的空間即可實現數據的持續讀寫。這個空間就是使用 "rrdtool create"命令後創建出的以“.rrd”尾碼結尾的文件。

RRDtool很有特色的一方面在於它不僅可以扮演後臺的角色來存儲數據,同時又給我們提供了豐富的工具來創建出精美的統計圖表,兼任前端的角色。

安裝:

linux一般可以直接使用yum或者apt-get來直接安裝。

$ sudo yum install rrdtool (centos)  

$ sudo apt-get install rrdtool (ubuntu)

也可以到官方下載各操作系統(包括windows)的安裝包,或者下載源碼自己編譯。

http://oss.oetiker.ch/rrdtool/download.en.html

 

二、數據對象

RRDtool針對處理的是時序型數據(time-series data),比如網路帶寬,溫度,CPU負載等等這些和時間相關聯的數據或者說指標。很多優秀的監控系統都採用RRDtool作為DBMS或者作為繪圖工具,比如 Ganglia、MRTG、Xymon、Zenoss、open-falcon等等。可見RRDtool在處理監控指標方面得天獨厚的優勢。

 

三、RRDtool存儲與歸檔原理

RRDtool存儲數據的方式和常見的關係型資料庫有很大的不同:

  • RRDtool的每個rrd文件大小,一經創建便固定,而傳統的關係型資料庫的文件大小則是隨著數據的寫入而逐漸增大的
  • RRDtool在接收到數據的同時會進行計算合併,並存儲計算後結果
  • RRDtool要求定時更新數據,同時資料庫中對出現“異常”的值使用UNKNOWN代替。

為了實現定時更新,RRDtool規定一個時間間隙(interval),經過interval就會進行資料庫更新,比如上面的圖中的interval就是1min。這個interval在RRDtool中被命名為step,在使用create命令創建rrd文件時,作為一個必須使用的選項來規定rrd資料庫所採用的interval,而且這個值之後不允許再改變。如:

         

.....(註:此處只是作為演示,並不是一個合法的完整的create命令)

 

上面的命令第一行比較容易理解(註:實際命令並沒有換行,這裡便於演示使用“\”來分隔),下麵來解釋一下第二行各個參數的含義,

(建議對照man page或者官方文檔http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html,查看完整的命令幫助):

DS(Data Source):定義數據來源,換句話說就是我們要檢測的指標,這裡使用cpu_load(檢測cpu負載)來作為DS的名字。GAUGE是數據源的類型(DST:Data Source Type)

常見的數據源類型:

                    1、COUNTER         數據必須是遞增的,保存的是相對於前面的一個值                     2、GUAGE              保存原值                     3、DERIVE              可增可減                     4、ABSOLUTE        相對於初始值的數值(也就是參考點唯一)                     5、COMPUTE         對於COMPUTE數據源來說格式是DS:ds-name:COMPUTE:rpn-expression

為了便於理解,可以認為它就是我們創建MySQL時定義的一列(當然這非常不准確):

先跳過heartbeat這個參數,來看後兩個參數。min max、顧名思義就是用來規定數據值的合理存儲範圍,對於cpu負載,我將其設置為0~100.對於不確定界限的值,可以使用U來代替。也就是說,如果接收到的數據在這個範圍內,就會被認為是good value,被資料庫接收並插入。否則就會被認為是壞值,作為unknown插入。

最後看heartbeat,對應上面示例命令的120。這個其實是RRDtool收集數據的一種策略,前面提到過RRDtool每經過step長的時間間隙,就會進行一次資料庫更新,並將刷新的值插入到資料庫中,我們稱這個值為(PDP: Primary Data Point).但是這樣的話就會產生問題----如果我在指定的間隙沒有收集到數據,資料庫就會收集不到值,怎麼處理呢?RRDtool中將這一類“壞值”統一作為unknown插入資料庫中,稍微想一下就會知道作為unknown,在統計的時候會更加精確,因為可以直接將這些unknown剔除,而不是不分青紅皂白的將所有的“0”全部剔除(針對於某些將數據壞值處理為0的資料庫)。

unknown的處理就萬無一失了嗎?答案很顯然是否定的,在實際收集數據時,我們很難保證在準確的時間點收集到數據。因此RRDtool提出了heartbeat這樣一個概念,表示一個時間跨度,也就是說,只要在這個時間跨度內,資料庫更新收集到了數據,那麼就可以插入這個值,否則將值作為unknown插入。也就是說在上面的示例命令中,只要在兩分鐘內收集到了數據,就會作為PDP更新到資料庫中。如果超過了heartbeat給定的時間,那麼就作為unknown插入資料庫。

 

現在在shell中輸入上面這個不完整的命令,來看看shell會給我們返回什麼樣的錯誤信息。

錯誤提示,你必須至少定義一個RRA(Round Robin Archive)。那麼什麼是RRA呢?前面介紹過RRD特殊的存儲方式,我在學習的時候就在想:持續讀寫數據,是如何保證數據的完整性?數據輪詢了一次後,必然會導致新數據對舊數據的覆蓋,那麼又如何來查詢之前收集到但是已經被後來覆蓋的數據呢?----很顯然,RRA就是提供這樣一種功能的歸檔策略,是RRD的核心,可以把它當做關係型資料庫中的視圖來理解。也就是說,我們怎樣來查看數據以及如何將收集到的數據繪成圖表,都是通過對這個RRA("視圖")來定義的。但是從另一方面來講,這應該也算是RRDtool的一種缺陷吧,上面的錯誤消息告訴我們,在創建的時候就必須要至少定義一個RRA,也就是要求我們在創建RRD資料庫的時候就必須事先規定好將來要如何來查詢處理這些數據。

 

完整的RRDtool create命令:

此時查看當前文件夾,就會看到一個rrd文件,即rrd_intro.rrd:

 

下麵來介紹RRA部分的命令:

 

         

RRA官方文檔定義:An archive consists of a number of data values or statistics for each of the defined data-sources (DS).

也就是說,創建RRA後,RRA就是被DS所共用的,不需要指定DS。同時,這個歸檔文件中包含一系列的數據和統計信息,那麼這些信息是如何得到的呢?

---通過CF(Consolidation Function)整合方法,將數據按照一定的規則歸檔。

 

   合併方法分以下幾種:                     1、AVERAGE      平均值                     2、MAX                最大值                     3、MIN                 最小值                     4、LAST               當前值                      CF參數項有三個,先介紹steps和rows,對應上面命令的最後兩個參數。

前面已經講過PDP的含義,在符合heartbeat策略下收集到的一個值或者unknown,插入到資料庫中,作為PDP。

steps,顧名思義就是定義幾個step,比如上面這條命令的三個RRA分別定義了1、5、15個step,也分別對應了1、 5、 15個PDP,換算成時間就是1、 5、 15分鐘。這是CF的參數,說明這些值是拿來作為CF合併方法的參數的,即這個三個RRA分別使用1 、 5 、15個PDP來求平均值。將此結果作為官方文檔中提到的data value / statistic存入RRA文件,作為我們最終訪問和繪圖的數據。RRDtool定義這個數據即為CDP(Consolidated data point)即整合後的數據。

rows,按照我之前講的,應該比較好理解。我將DS作為關係型數據表中的列,PDP作為DS中的數據,CDP為歸檔後的數據在RRA“視圖中”展示給查詢者。因此最後的視圖中每一行就代表了一個CDP。對照上面的命令,分別統計了60 、 288 、 672 個CDP。換算成時間(60s * steps * rows,/3600 h, /(3600*24) day,)分別為 1小時,1天, 1周。

 

我這樣設計RRA代表什麼含義呢?這裡再提前介紹一個概念resolution(繪圖直接相關,後面介紹graph的時候會用到):

對應上面的命令:

1 h –  1min resolution

1 day – 5min resolution

1 week – 15min resolution

也就是說,我每分鐘統計一次cpu的平均負載,在視圖中給我展現出1小時內的總的統計情況。其他兩個類比即可。

我這裡也是對應一個linux的常用命令uptime。可能最後的resolution並沒有實際的參考價值,但是至少應該理解瞭如何來設置歸檔策略。一般採用逆向思維,也就是先確定總共需要統計的時間,再根據step和steps確定rows。

 

最後說一下這個xff,這個值是一個比率,如果CF歸檔時採用的PDP中unknown值占總數的比例超過了這個值,就說明這次統計中的壞值過多,RRDtool將這個合併後CDP作為unknown,歸檔到RRA中。一般採用0.5即可。

貼一個圖來表示PDP、CDP、RRA的關係


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2016.1.11今天學了改變PS1的顏色,怎麼增加PS1變數找到文件(.bash_profile),或者bashrc export PS1="\[\e[32;1m\]Test $PWD> \[\e[0m\]" #顯示綠色,其中Test是額外增加要顯示的內容 export PS1="\[\e[35;...
  • 一、簡介 游戲目標:在地下城的最底層取得炎多的護符項鏈(Amulet of Yendor),並返回最上層,在聖祭壇上供奉給神靈。完成整個游戲的獎賞是,玩家會成為不朽的半神。 二、安裝 1)下載源碼 http://www.nethack.org/v360/downloads.html 2)編譯安裝 c...
  • Linux安裝tomcat。
  • 安裝svn需要依賴apr和apr-util這兩個軟體,所以先安裝這兩個軟體下載安裝APRwget http://apache.fayea.com//apr/apr-1.5.2.tar.gztar -zxvf apr-1.5.2.tar.gzcd apr-1.5.2./configure --pref...
  • Linux視頻教程集:序列之一:Linux基本操作和系統管理序列之二:Linux_C編程(IO+多線程+進程管理+進程通信+網路)序列之三:C++精講精煉(語法+STL+IO編程)序列之四:Qt編程式列之五:ARM嵌入式Linux開發(ARM硬體體系+指令集彙編+Linux開發) 鏈接序列1鏈接: ...
  • 概述 SQLite提供了一系列介面供用戶訪問資料庫,主要包括連接資料庫,處理SQL,迭代查詢結果等。本文會針對我們使用SQLite的主要場景,列出核心的API,詳細介紹API的用法並給出代碼用例。1.打開關閉資料庫sqlite3_open_v2原型:int sqlite3_open_v2(cons....
  • 本文轉至:http://database.51cto.com/art/201503/469510_all.htm(只作轉載, 不代表本站和博主同意文中觀點或證實文中信息)Olery成立於2010年,總部位於阿姆斯特丹。該初創公司為酒店行業提供聲譽管理與媒體監控工具,幫助酒店將網路評論和社交媒體反饋轉...
  • 本文轉載自:http://www.innomysql.net/article/23959.html(只作轉載, 不代表本站和博主同意文中觀點或證實文中信息)工作10餘年,沒有一個版本能像MySQL 5.7那樣令我激動與期盼,10月MySQL 5.7 GA版本的發佈,意味著MySQL資料庫終於有能力在...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...