Cloud Insight SDK 實踐分享,如何監控業務的響應速度?
一直在說 Cloud Insight 是資料聚合平臺,可以用 SDK 和 API 實現業務監控,如今不拿出點實踐人們恐怕是不能信服。那今天本文就先簡單介紹一下 SDK 可以應用在哪些方面,再舉個真實使用者場景來讓大家看看。
首先說一點,通過 SDK 你可以把你想看的任何資料都接在 Cloud Insight 平臺上,例如運營可以把涉及到的使用者資料放上去,讓開發,運維,boss 隨時都可以看到自己產品的使用者,如果涉及到多個層次的指標資料(日活,增長,轉化,留存。。。)都有相應的簡單操作;開發可以把自己 build 程式碼的次數,提交的次數放上去;銷售也可以把使用者簽單數,簽單額放上去(如果允許的話啊);運維就更不用說了,所有伺服器監控指標都可以放上來。
下面介紹一個業務場景的監控,本例項來自真實使用者場景。
使用者需求
監控可用性和響應速度,運營的需求要求每次介面響應控制在0.1-0.5s內。如果超出這個時間就要找到問題,進行優化。
以前的做法
在後端新增 serverId 和處理時間並放到 http header 中,通過 curl 去獲得後端資訊和處理時間,取樣後生成報表。
後來改成通過 nginx 記錄 upstream 的 response time,取樣生成視覺化資料。但由於 nginx 日誌分佈於不同的機器中,收集資料相對來講還是比較麻煩的。
現在的監控手段
配置
通過 Cloud Insight SDK 採集資料,通過探針傳送這些資料到後端伺服器,後端伺服器對資料進行處理,進行展示。
真正操作起來很簡單,安裝 Ci 探針,安裝 Python SDK,編輯程式碼,呼叫系統命令,獲取 nginx,php 的響應時間,從幾個響應時間中取最大值傳到 Cloud Insight 伺服器,探針預設 30s 抓取一次資料,但我們又想每秒統計三次響應最慢的請求,所以寫一個定時執行這個命令的指令碼。
#!/usr/bin/env python # -*- coding:utf8 -*- import commands import socket from oneapm_ci_sdk import statsd hostname = socket.gethostname() error, result = commands.getstatusoutput(""" tail /opt/dataroot/nginx/access.log |grep "download" | awk -F '" "' '{print $7}' """) if ( error == 0 ): code = result.split("\n") statsd.gauge('php_response_time.download.%s' % hostname, float( max(code) ) ) print 'php_response_time.%s : %04f' % ( hostname, float(max(code)) )
#獲取Nginx Upstream response time
* * * * * for i in $(seq 3); do sleep 15; python /opt/ci_check_php_response_time.py; done
部署好後,可以在自定義資料儀表盤上看到應用資料。把這些自定義資料放在一張儀表盤上,後期可以直接開啟這個自定義儀表盤來檢視 php 的響應情況,即使是多個不同伺服器中的 nginx 訊息也都可以放在一張圖表上,效果如下圖:
這樣儀表盤是配置完了,其實還可以設定報警策略,在一些指標超出範圍時觸發報警。
檢視
依照平時使用習慣,進入監控介面,首先第一眼就是各個平臺概覽,看看是不是都在正常執行,正常情況下圖示都應該是綠色的,如果變成紅色了就點進去看看,上面會有相應報錯。
上述平臺如果沒有問題,就進入儀表盤頁面,首先左面是自定義儀表盤,在這就可以檢視之前配置的 php 的響應情況,右面是平臺儀表盤,一般你係統監控上什麼就會自動出現相應的元件資訊。
點選檢視業務資料的儀表盤,發現了一個 PHP 響應時間達到 5s 的異常紀錄,檢視Ai(Application Insight) 的 web 事務(web 事務預設會抓取響應超過 2s 的事務),果然發現一個異常緩慢的事務,通過分析(程式碼級監控)確認問題,解決問題。
延伸
SDK 是 Cloud Insight 團隊根據 StatsD 進行了修改,方便使用者上傳自定義指標,目前支援的資料格式有 Counters Gauges 2種,支援的語言有 Python Ruby Nodejs 3 種,其他的 Java PHP 還在開發中。目前使用 SDK 的前提條件為需要安裝 Cloud Insight Agent。Agent 的採集週期為 30 s,資料傳送週期為 15 s。
我們還將提供 Cloud Insight API,它擁有更加強大的功能,通過它可以不受任何約束的傳送符合 Cloud Insight 資料格式標準的任意資料,無論本機是否安裝了 Cloud Insight Agent,目前在開發中。
總結
- 監控伺服器,簡單,一鍵安裝
- 監控資料庫等元件,簡單,修改配置檔案,重啟探針
- 監控業務資料,依舊簡單,使用 SDK
簡單列幾個有意思的 SDK 監控應用:
- 監控北京空氣質量 監控不同地區 PM2.5
- 監控閉路電視的硬碟空間 github 上有專案
- 使用 Cloud Insight SDK 實現 Druid 監控 實現大資料監控
參考文件:
使用OneApm CI SDK實現業務響應速度監控
Cloud Insight 集監控、管理、計算、協作、視覺化於一身,幫助所有 IT 公司,減少在系統監控上的人力和時間成本投入,讓運維工作更加高效、簡單。
素材來自塵緣的部落格