使用statsd+graphite+grafana構建業務及性能監控模塊


    近些年隨着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);
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM