首先說明,這里所說的 Druid 并不是阿里巴巴的數(shù)據(jù)庫連接池項目,而是 Eric Tschetter 創(chuàng)立的一個開源的分布式實時處理系統(tǒng),希望為燒錢的大數(shù)據(jù)處理,提供一種更廉價的選擇。為了解決查詢延遲問題,使用 Hadoop 來實現(xiàn)交互式查詢分析很難滿足實時分析的需要。而 Druid 提供了以交互方式訪問數(shù)據(jù)的能力,并權衡了查詢的靈活性而采取了特殊的存儲格式。
作為一個用于大數(shù)據(jù)實時查詢和分析的高容錯、高性能開源分布式系統(tǒng),Druid 能夠快速處理大規(guī)模的數(shù)據(jù),并實現(xiàn)快速查詢和分析。即使發(fā)生代碼部署、機器故障以及其他產品系統(tǒng)遇到宕機等情況時,Druid 仍能夠保持 100% 正常運行。
目前 Druid 應用最多場景是廣告分析,包括互聯(lián)網廣告系統(tǒng)監(jiān)控、度量和網絡監(jiān)控。并且 eBay 也已經計劃將 Druid 用于生產環(huán)境中。
而時刻關注新技術的 OneAPM 也試圖對 Druid 的指標進行展示。
Cloud Insight 根據(jù) StatsD 進行了修改,形成了 Cloud Insight SDK,可以方便用戶上傳自定義指標至 Cloud Insight,目前支持的數(shù)據(jù)類型有,Counters 和 Gauges, 語言僅支持 Python。
使用 SDK 前先確保自己安裝了 Cloud Insight Agent,并且 Agent 處于運行的狀態(tài)。
由于被監(jiān)控的機器處于內網環(huán)境下,并不能與外網通訊。所以為了使用 Cloud Insight,需要部署一臺主節(jié)點來接收其他機器的數(shù)據(jù),并將數(shù)據(jù)發(fā)送至 Cloud Insight 后端。簡要的配置方法如下:
好了,搞定這一切之后,就只需要使用pip來安裝 SDK 了。
pip install -i http://pypi.oneapm.com/simple --upgrade oneapm-ci-sdk
Cloud Insight SDK 共有 Counters 和 Gauges 兩種數(shù)據(jù)類型,下面結合 Druid 腳本來對數(shù)據(jù)類型做一些說明。
由于用戶的代碼跟使用的服務比較相關,在此就不提供代碼了,可以看下面示例簡單了解一下。Druid 監(jiān)控示例腳本如下:
# coding: utf8 from oneapm_ci_sdk import statsd # 發(fā)送標準數(shù)據(jù),即數(shù)值是float, int類型的數(shù)據(jù) # statsd.gauge(metric, value, tags=None, sample_rate=1) statsd.gauge('yaiba.test_gauge', 130.4, tags='yaiba_gauge') # 增加數(shù)據(jù)的值 # statsd.increment(metric, value=1, tags=None, sample_rate=1) statsd.increment('yaiba.test_inc') # +1 statsd.increment('yaiba.test_inc', 100, 'whatever', 0.7) # 增加100,采樣比例是 70% # 減少數(shù)據(jù)的值 # statsd.decrement(metric, value=1, tags=None, sample_rate=1) # ------------- # 以上數(shù)據(jù)都是立刻發(fā)送給探針 # 批量發(fā)送 # statsd.open_buffer(max_buffer_size=50) # statsd.close_buffer() statsd.open_buffer() statsd.gauge('yaiba.test_gauge', 13.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 10.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 130.4, tags='yaiba_gauge') statsd.close_buffer() # Or with statsd as batch: statsd.gauge('yaiba.test_gauge', 13.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 10.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 130.4, tags='yaiba_gauge')
Counters 是 StatsD 和 Cloud Insight SDK 最基本的一種數(shù)據(jù)類型。當調用increment和decrement時,對參數(shù)進行自增或自減。如:
statsd.increment('yaiba.test_inc')
是將yaiba.test_inc這個指標的數(shù)值自增1。increment方法可以包含 4 個參數(shù):metric_name、stepping、metric_tags、sample_rate。如:
statsd.increment('yaiba.test_inc', 100, 'whatever', 0.7)
是將yaiba.test_inc這個指標的數(shù)值自增100,并且標簽信息為whatever,而采樣率為 0.7.
Cloud Insight SDK 通過sample_rate參數(shù)來設置采樣率。假設sample_rate=0.1:
在采集周期 30 s 內,只采集 10% 的數(shù)據(jù)。也就是說,調用了 10 次 increment,只自增了一次 Metric。
在數(shù)據(jù)量較大的情況下,可以確保采樣的高效。
statsd.increment('page.views', sample_rate=0.1)
采樣率會傳遞至 Agent,所以最終發(fā)送的數(shù)值,為計算采樣率后的真實數(shù)值。 同樣,decrement 和 increment 一樣,使用相同的參數(shù)。
statsd.decrement('some.other.event')# Decrease the counter by 5, 15% sample.statsd.decrement('some.third.event', 5, rate=0.15)
Gauges 是連續(xù)型的數(shù)據(jù)類型,也就是說,當我們第一次賦值后,該 Metric 表現(xiàn)在圖表上,會是一條于 X 軸平行的直線;直到再次為該 Metric 賦了一個不同的值。
Gauges 可以用來度量一些已經計算過的數(shù)值,如 WebSockets 的有效鏈接數(shù);而系統(tǒng)目前登錄的用戶數(shù),則在每次用戶登錄時,調用 Counters 中的 increment 比較適合。
Gauges 支持 4 個參數(shù),分別是metric_name、metric_value、metric_tags和sample_rate,如:
statsd.gauge('yaiba.test_gauge', 13.4, tags='yaiba_gauge')
是將13.4賦值給yaiba.test_gauge這個指標,并添加了yaiba_gauge這個標簽信息。
最后上兩張 Druid 的監(jiān)控效果截圖。首先在平臺頁面,您可以直接查詢自定義的一些指標,和它的數(shù)值。
然后,使用自定義儀表盤,根據(jù)自己的業(yè)務來自建展現(xiàn)形式。
總體來說,Cloud Insight Agent 的可配置項目很多。所以就算是在內網環(huán)境下使用,也沒有問題。而 Cloud Insight SDK 也存在大量的注釋,使用起來也不會有什么麻煩。數(shù)據(jù)類型也比較簡單。
Cloud Insight 集監(jiān)控、管理、計算、協(xié)作、可視化于一身,幫助所有 IT 公司,減少在系統(tǒng)監(jiān)控上的人力和時間成本投入,讓運維工作更加高效、簡單。本文由 OneAPM 工程師翻譯整理,想閱讀更多技術文章,請訪問 OneAPM 官方技術博客。