聊聊 Statsd 和 Collectd 那點事!

StatsD 是由 Etsy 開發併發布的彙總和總結應用指標的一個簡單的守護進程,近些年來發展迅速,已經變成了一個用於收集應用性能指標的統一的協議。html

關於 Statsd 的使用已經有不少文章介紹過,因此本文也再也不贅述,本文主要來聊一聊它的來源原理以及和它相似的一個工具 Collectd 。前端

Etsy 使用 Statsd 監控系統應用

Etsy 工程師曾寫 blog 介紹本身怎樣使用 statsd 以及爲何使用它,有時間能夠看一看這篇文章 Measure Anything, Measure Everythingpython

Statsd 最初是由 Etsy 的 Erik Kastner 編寫配合 Graphite/Carbon 使用的前端進程,最初是爲了彙總和總結應用指標。開始使用的語言是 Node,後來其餘語言也開發了此功能。它收集數據時基於2大功能:Counting & Timing。應用程序的指標經過特定語言的客戶端庫進行檢測,而後這些庫用很簡單的協議和 Statsd 後臺守護進程進行通訊,後臺進程聚集指標並把他們傳遞到繪圖軟件或監控後臺。git

Statsd 如和工做github

首先,你能夠經過 Statsd 收集任何你想要的數據,例如 Gauges , Counters , TimingSets ,Statsd 客戶端庫經過發送 UDP 數據包來調用每一個 Statsd 服務器,使用 UPD 發送數據到 Stated 服務器的緣由很明顯,快,UDP是斷開鏈接的協議,數據包不須要確認就發送到收件人,不會像經過 TCP 或提交數據時因爲 HTTP 協議而阻斷。在調用時,Statsd 客戶端庫沒有任何緩衝的數據,這樣二者之間調用就很簡單,若是有大數據量的操做時,能夠選擇在數據發送到 Statsd 時加入樣本數據,即發送必定比例的數據。後端

Statsd 後臺守護進程會監聽全部應用庫的 UDP 流量,經過時間流收集數據並在後臺所需時間間隔內更新數據。例如聚合功能調用計時器能夠每10秒收集一次數據,分析出這些數據的最大值,最小值,平均值,中間值,90值和95值,Statsd 後臺守護進程和後端將根據所用的後端改變協議。監控後端把收集到的指標轉化成圖表,例如最經常使用的 Graphite,這個數據處理工具處理收集到的指標,做出突出偏離常態的曲線圖,下圖爲 Graphite 處理先後的圖表。服務器

聊聊 Statsd 和  Collectd 那點事! 聊聊 Statsd 和  Collectd 那點事! Etsy 已開源 Statsd ,如下是基於基本線路協議發送的指標格式:併發

<metricname>:<value>|<type>

若是你在本地運行 StatsD 和默認的 UDP 服務器,可在命令行發送最簡單的指標格式:運維

echo "foo:1|c" | nc -u -w0 127.0.0.1 8125

如今 Statsd 已經發展的很壯大,總結有如下幾個緣由:工具

  • 簡單:很是容易獲取應用程序,StatsD 協議是基於文本的,能夠直接寫入和讀取

  • 低耦合性:基於後臺程序運行的應用程序,採起 UDP 這種發送後完了的協議,收集指標和應用程序自己之間沒有依賴

  • 佔用空間小:StatsD 客戶端很是輕便的,不帶任何狀態,不須要的線程,且添加能夠忽略不計

  • 廣泛及支持多種語言: 有基於 Ruby,Python,Java,erlang,Node,Scala,Go,haskell 等幾乎全部語言的客戶端

  • 開源且商用

Collectd

Collectd 實際上是 C 語言開發的一個守護(daemon)進程,像 Statsd 同樣它也作週期性收集統計數據,此外它還管數據存儲,給各類存儲方式提供不一樣的存儲機制,具體能夠參考 Collectd 的官網

Collectd 不只僅是收集性能數據,還根據這些數據會週期性統計系統的相關信息,以這些統計信息爲依準,檢查當前服務器性能(如做爲性能分析 performance analysis)和預測系統將來的 load(如能力部署 capacity planning),不過它自己並不能生成圖形,雖然它能寫 RRD 文件,可是它不能從這些文件生成圖形,因此通常須要結合一個數據繪圖工具 Graphite/Cacti 。像 VPSee 就是選用 Collectd 收集機器的各個性能參數。

相較於其餘收集系統相關指標的工具,Collectd 有必定的優勢,好比嵌入式系統,C 語言開發(高效)、無需系統 cron 支持(獨立)、簡單易用,此外他還包含有超過70多種插件以及文檔支持。

Collectd 除了解析 configfile 其餘一切都是在插件下完成,這意味着主守護進程沒有任何外部依賴,如今已知的能夠應用在 Linux,Solaris,Mac OS X上,AIX,FreeBSD,NetBSD 和 OpenBSD 等系統中。

Collectd 配置簡單:除了那些須要加載的模塊,你不須要配置其餘任何東西。

Collectd 不是腳本,而是運行在內存裏面的進程,不須要每次記錄都啓動繁重的解釋器,有 nice 級別的 10 秒鐘的默認解析。

Collectd 可以處理任意數量的主機,從一個到幾千個,並且能夠經過利用該資源儘量高效。

Collectd 支持 SNMP,該 SNMP 插件提供了一個通用接口 SNM 協議,能夠用它來查詢值,並基於 Collectd 機制處理他們,例如發送他們作其餘地方的服務器實例。

Collectd 支持各類自定義擴展,C-plugins,Perl-plugins,Java-plugins,Python-plugins,UNIX 域套接字,Java 的 MBean 的支持等。

接下來簡單介紹一下安裝方法,安裝配置 Colloectd,首先要建立一個 collectd.d 目錄便於存放稍後會遇到的插件配置文件 graphite.conf,並在 collectd.conf 包含這個目錄 ;

$ sudo apt-get install collectd

$ sudo mkdir /etc/collectd/collectd.d
$ sudo vi /etc/collectd/collectd.conf
...
Include      "/etc/collectd/collectd.d"

安裝 git 並下載 collectd-carbon 插件:

$ sudo apt-get install git

$ sudo git clone https://github.com/indygreg/collectd-carbon.git /opt/collectd-plugins

修改插件的配置文件的 ModulePath 部分,指向 carbon_writer.py 文件所在目錄,而且修改 LineReceiverHost 部分:

$ sudo vi /etc/collectd/collectd.d/graphite.conf
<LoadPlugin "python">
    Globals true
</LoadPlugin>

<Plugin "python">
    # carbon_writer.py is at path /opt/collectd-plugins/carbon_writer.py
    ModulePath "/opt/collectd-plugins/"

    Import "carbon_writer"

    <Module "carbon_writer">
        LineReceiverHost "monitor.vpsee.com"
        LineReceiverPort 2003
        DifferentiateCountersOverTime true
        LowercaseMetricNames true
        TypesDB "/usr/share/collectd/types.db"
    </Module>
</Plugin>

修改好配置文件後重啓服務:

$ sudo /etc/init.d/collectd restart

好了,被監控的服務器已經安裝好了 Collectd ,要想真正使用此外還須要安裝繪圖工具,具體怎麼安裝我也不詳細介紹了,畢竟重點不是那個,如下是 Graphite 的相關連接:GraphiteGraphite Project,但願對你有所幫助。

Cloud Insight 集監控、管理、計算、協做、可視化於一身,幫助全部 IT 公司,減小在系統監控上的人力和時間成本投入,讓運維工做更加高效、簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客

本文轉自 OneAPM 官方技術博客

相關文章
相關標籤/搜索