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