標籤:
近些年隨著DevOps概念越來越收到重視,除了傳統的Splunk,Zabbix外在開源領域也有越來越多的軟體可供使用.從資料收集,時序資料庫,圖形展示等主要方面有各類可擴充的軟體用於搭建一個資料監控平台(詳細列表),Logstash+elasticsearch+kibana算是被寫的比較多的,本文將偏重於業務資料及效能的監控而不是傳統的機器參數的監控,所以本文以statsd+graphite+grafana在centos6上的安裝配置為例。
三個組件的說明(https://blog.pkhamre.com/understanding-statsd-and-graphite/):
Statsd:一個nodejs的用戶端,用於向graphite的收集器發送資料,使用各類程式設計語言的用戶端響起發送timer,counter等統計資料後,其通過udp定時向graphite發送資料。c#用戶端
Graphite:分為監聽器carbon+時序資料庫whisper+圖形展示django-webapp。由於安裝是要設定資料庫等建議對django有一定瞭解
Grafana:一個圖形展示器,相對graphite內建的展示功能更加強大靈活。配置grafana時添加新的dashbord時要注意綠色的小條是可以點擊的,點擊後出現配置項設定顯示等。
前兩者在centos上的安裝請參考(安裝),該文章還附帶說明了安裝collectd收集系統效能資料的過程,對於graphana的安裝請參考官方文檔。需要說明的是本人按文章配置後使用django-admin 啟動程式能正常訪問,但是通過apache前端登陸後在graphite的管理介面無法看到Metrics的展示最終使用了docker的方式。docker版本說明請參考github說明。
用戶端主要發送counter和timer兩類資料進行監控和分析,counter主要用於即時展示重點業務的量是否運行正常。timer主要用於展示應用程式的調用效能等方面是否正常。
counter的整合主要是開發人員寫代碼發送計數資訊(異常資訊計數以及正常計數):
Metrics.Configure(new MetricsConfig{ StatsdServerName = "X.X.X.X", Prefix = "MallOrderCmd"}); Metrics.Counter("SyncOrderInfo.Error");
timer的跟蹤可以考慮使用PostSharp或者Fody的外掛程式進行實現
[Serializable]public sealed class GraphiteTimingAttribute : OnMethodBoundaryAspect{ [NonSerialized] private Stopwatch _stopwatch; public override void OnEntry(MethodExecutionArgs args) { _stopwatch = Stopwatch.StartNew(); base.OnEntry(args); } public override void OnExit(MethodExecutionArgs args) { StatsdClient.Metrics.Timer( string.Format("{0}.{1}.{2}.{3}", "ApplicationName", System.Environment.MachineName, args.Method.DeclaringType.Name, args.Method.Name), (int)_stopwatch.Elapsed.TotalMilliseconds ); base.OnExit(args); } public override void OnException(MethodExecutionArgs args) { StatsdClient.Metrics.Counter( string.Format("{0}.{1}.error", args.Method.DeclaringType.Name, args.Method.Name), (int)_stopwatch.Elapsed.TotalMilliseconds); base.OnException(args); }}
使用statsd+graphite+grafana構建業務及效能監控模組