最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET程序性能監(jiān)控系統(tǒng)Elastic?AMP的使用方法

 更新時間:2021年11月24日 14:54:10   作者:chester·chen  
這篇文章介紹了.NET程序性能監(jiān)控系統(tǒng)Elastic?AMP的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

什么是Elastic AMP

Elastic APM 是一個應用程序性能監(jiān)控系統(tǒng)。它可以請求的響應時間、數(shù)據(jù)庫查詢、對緩存的調(diào)用、外部 HTTP 請求等的詳細性能信息,可以實時監(jiān)控軟件服務和應用程序。這可以幫助我們快速查明和修復性能問題。

Elastic APM 還會自動收集未處理的錯誤和異常。因此我們可以在出現(xiàn)新錯誤時識別它們并密切關注特定錯誤發(fā)生的次數(shù)。

服務器指標是另一個重要的信息來源。Elastic APM 代理會自動獲取基本的主機級別指標和特定于代理的指標。

Elastic APM 目前支持 Node.js, Python, Ruby, PHP, Java, Go, RUM (JS), 和.NET.

工作原理

  • Elastic AMP 通過Agent收集應用程序的指標信息
  • Agent將收集的信息上傳至AMP Server
  • AMP Server對數(shù)據(jù)進行聚合后,存儲至Elasticsearch
  • 通過Kibana查看指標信息

環(huán)境安裝

我們通過Docker搭建一個單機的環(huán)境來演示Elastic APM的功能。

1.安裝ElasticSearch

docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2
docker run -d --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.2

2.安裝Kibana

docker pull docker.elastic.co/kibana/kibana:7.15.2
docker run -d --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.15.2

3.安裝ElasticAPM

docker run -d  -p 8200:8200  --name=apm-server --net elastic  --user=apm-server  docker.elastic.co/apm/apm-server:7.15.2  --strict.perms=false -e  -E output.elasticsearch.hosts=["es01-test:9200"]

代碼演示

Elastic AMP支持.NET Framwork4.6.1+和.NET Core2.1+,支持的組件有:

GRPC,HttpClient,EF6,EFCore,ElasticSearch,Mysql,Mongo,Redis,Kafka,RabbitMQ等,具體詳見https://www.elastic.co/guide/en/apm/agent/dotnet/master/supported-technologies.html。我們這次使用.NET Framwork新建一個Web項目來演示

1.新增Web項目

2.新增Nuget包

  <package id="Elastic.Apm" version="1.12.1" targetFramework="net472" />
  <package id="Elastic.Apm.AspNetFullFramework" version="1.12.1" targetFramework="net472" />
  <package id="Elastic.Apm.SqlClient" version="1.12.1" targetFramework="net472" />
  <package id="Elastic.Apm.StackExchange.Redis" version="1.12.1" targetFramework="net472" />
  <package id="StackExchange.Redis" version="2.2.88" targetFramework="net472" />

3.配置HttpModule

web.config中的system.webServer中新增以下節(jié)點

      <modules>
          <add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule, Elastic.Apm.AspNetFullFramework" />
      </modules>

4.配置Agent

我們可以通過環(huán)境變量配置Agent的信息

        protected void Application_Start()
        {
            Environment.SetEnvironmentVariable("ELASTIC_APM_SERVICE_NAME", "TestFromworkSite");  //服務名
            Environment.SetEnvironmentVariable("ELASTIC_APM_ENVIRONMENT", "Dev");    //環(huán)境
            Environment.SetEnvironmentVariable("ELASTIC_APM_SERVER_URL", "http://localhost:8200"); // APM server
            Environment.SetEnvironmentVariable("ELASTIC_APM_FLUSH_INTERVAL", "5s");  //上傳數(shù)據(jù)的周期
            Environment.SetEnvironmentVariable("ELASTIC_APM_LOG_LEVEL", "Trace");
            //..........
        }

5.啟動網(wǎng)站

直接啟動網(wǎng)站即可在Kibana中看到對應的Service:TestFromworkSite

Elastic APM核心模塊

1.Transaction:我們通過Transaction可以看其中Api的調(diào)用信息

2. Dependencies:通過Dependencies看到服務依賴關系

3. Error: 能通過Error看到程序中的錯誤信息

4. Matrics: 可以通過Matrics看到服務氣的內(nèi)存與CPU信息

Elastic監(jiān)控MSSql與Redis等組件

新增MSSqlHelper

public class MSSqlHelper
    {
        public static DataSet SqlExecuteReader(string _sql, SqlParameter[] _parameters, CommandType _type = CommandType.Text, string _constring = @"Data Source=.\SQLEXPRESS;Initial Catalog=dev;Integrated Security=True;")
        {
            DataSet ds = new DataSet();
            try
            {
                using (SqlConnection conn = new SqlConnection(_constring))
                {
                    SqlCommand cmd = new SqlCommand(_sql, conn);
                    if (_parameters != null)
                    {
                        foreach (SqlParameter p in _parameters)
                        { cmd.Parameters.Add(p); }
                    }
                    cmd.CommandType = _type;
                    cmd.CommandTimeout = 10;//超時時間,單位S
                    conn.Open();
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        sda.SelectCommand = cmd;
                        sda.Fill(ds);//填充dataset
                    }
                }
                return ds;
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }

新增RedisHelper

public class RedisHelper
    {
        private static IDatabase database;

        public static void UseApmForRedis()
        {
            var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
            connection.UseElasticApm();
            database = connection.GetDatabase();
        }

        public static void StringSet(string key,string value)
        {
            database.StringSet(key,value);
        }
    }

在Application_Start()中開啟SqlServer與Redis的監(jiān)控

            Agent.Subscribe(new SqlClientDiagnosticSubscriber());
            RedisHelper.UseApmForRedis();

HomeController.Index接口中新增sqlserver與Redis的調(diào)用

public ActionResult Index()
        {
            MSSqlHelper.SqlExecuteReader("select * from S_dev.UserObject", null);

            RedisHelper.StringSet("a", "a");
        }

啟動程序即可看到MSSql與Redis的相關數(shù)據(jù)

Elastic APM Api的深入使用

1.StartTransaction與StartSpan開啟自定義transaction與span

一些定時任務同樣可以使用Elastic APM的Agent.Tracer.StartTransaction和來監(jiān)控,并且我們可以通過StartSpan來新增一個自定義節(jié)點,這種方式需要我們自己處理異常信息。我們新增一個Job

public class TestJob
    {
        public void Run()
        {
            while (true)
            {
                var trans = Agent.Tracer.StartTransaction("TestJob", ApiConstants.TypeRequest);
                try
                {
                    MSSqlHelper.SqlExecuteReader("select * from S_dev.UserObject", null);

                    RedisHelper.StringSet("a", "a");

                    trans.SetLabel("name", "chester");

                    var span = trans.StartSpan("自定義Span", ApiConstants.TypeExternal, ApiConstants.SubtypeHttp, ApiConstants.ActionQuery);
                    try
                    {
                        //Http request
                    }
                    catch (Exception e)
                    {
                        span.CaptureException(e);
                    }
                    finally
                    {
                        span.End();
                    }
                    Thread.Sleep(1000);
                }
                catch (Exception ex)
                {
                    trans.CaptureException(ex);
                    throw;
                }
                finally
                {
                    trans.End();
                }
            }
        }
    }

Application_start中啟動Testjob

Task.Run(() => new TestJob().Run());

啟動程序即可看到對應的TestJob監(jiān)控

2.CaptureTransaction與CaptureSpan開啟自定義transaction與span

CaptureTransaction與CaptureSpan相對于StartTransaction與StartSpan可以幫助我們結束Transaction與Span,也可以自動捕獲異常,新增一個TestJob2

public class TestJob2
    {
        public void Run()
        {
            while (true)
            {
                Agent.Tracer.CaptureTransaction("TestJob2", ApiConstants.TypeRequest, (trans) =>
                {
                    MSSqlHelper.SqlExecuteReader("select * from S_dev.UserObject", null);

                    RedisHelper.StringSet("a", "a");

                    trans.SetLabel("name", "chester");

                    trans.CaptureSpan("自定義Span2", ApiConstants.TypeDb, (s) =>
                    {
                        //execute db query
                    }, ApiConstants.SubtypeMssql, ApiConstants.ActionQuery);

                    Thread.Sleep(1000);
                });
            }
        }
    }

Application_start中啟動Testjob2

 Task.Run(() => new TestJob2().Run());

啟動程序即可看到對應的TestJob2監(jiān)控

3.Agent全局攔截

我們可以通過過濾器攔截Transaction與Span,并為其添加例如label等附加內(nèi)容

Agent.AddFilter((ITransaction t) =>
            {
                //t.SetLabel("foo", "bar");
                return t;
            });
            Agent.AddFilter((ISpan span) =>
            {
                // ..
                return span;
            });

到此這篇介紹.NET程序性能監(jiān)控系統(tǒng)Elastic AMP使用方法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 用Html5與Asp.net MVC上傳多個文件的實現(xiàn)代碼

    用Html5與Asp.net MVC上傳多個文件的實現(xiàn)代碼

    Html 5 的有一些File API,對Form表單增強的特性,讓我們輕松支持多文件上傳,看下面的Html片斷代碼
    2012-08-08
  • asp.net 身份驗證機制實例代碼

    asp.net 身份驗證機制實例代碼

    對于ASP.NET驗證機制在項目開發(fā)中運用,會使項目非常方便快捷的實現(xiàn)頁面的訪問權限問題,而且省去了一些沒必要的安全問題
    2012-06-06
  • Asp.net把圖片存入數(shù)據(jù)庫和讀取圖片的方法

    Asp.net把圖片存入數(shù)據(jù)庫和讀取圖片的方法

    網(wǎng)上關于ASP.NET上傳圖片到數(shù)據(jù)庫的資料非常多,常用的如下:存儲圖片類型數(shù)據(jù)有以下幾種方式
    2013-07-07
  • ASP.NET 頁生命周期概述(小結)

    ASP.NET 頁生命周期概述(小結)

    了解個掌握ASP.NET頁面生命周期是非常必要的,這有助于我們更加靈活的控制頁面,以我們需要的方式編程開發(fā)。本文詳細的介紹了ASP.NET 頁生命周期,感興趣的可以了解一下
    2018-11-11
  • asp.net5中用戶認證與授權(2)

    asp.net5中用戶認證與授權(2)

    ASP.NET5主要提供了兩種應用程序,其一就是ASP.NET5控制臺程序,另外一個是ASP.NET Web 應用程序。本文給大家介紹asp.net5中用戶認證與授權(2),需要的童鞋可以參考下
    2015-10-10
  • 基于ASP.NET+easyUI框架實現(xiàn)圖片上傳功能(表單)

    基于ASP.NET+easyUI框架實現(xiàn)圖片上傳功能(表單)

    這篇文章主要介紹了基于ASP.NET+easyUI框架實現(xiàn)圖片上傳功能的相關資料,需要的朋友可以參考下
    2016-06-06
  • 使用母版頁時內(nèi)容頁如何使用css和javascript

    使用母版頁時內(nèi)容頁如何使用css和javascript

    由于網(wǎng)站的主要頻道頁和列表頁的頭部和底部都是一樣的,如果將每個頁面放在單獨的頁面中,當頭部和底部需要更改時維護量太大。于是想把頭部和底部做成母版頁,頻道頁和列表頁的具體內(nèi)容放到內(nèi)容頁中。這樣當頭和底需要改動時,只要修改一下母版頁就可以了。
    2009-08-08
  • 關于Asp.net頁面Page_Load被執(zhí)行兩次的問題分享

    關于Asp.net頁面Page_Load被執(zhí)行兩次的問題分享

    這篇文章介紹了關于Asp.net頁面Page_Load被執(zhí)行兩次的問題,有需要的朋友可以參考一下
    2013-09-09
  • VB.NET驗證郵件地址的合法性實現(xiàn)代碼

    VB.NET驗證郵件地址的合法性實現(xiàn)代碼

    現(xiàn)在,對于用戶在Web頁面上或電話中給出的Email地址,我們越來越不敢肯定它是否真的有效。在今天這個垃圾郵件泛濫成災的年代,人們完全有理由舍不得輕易透露Email地址。
    2011-04-04
  • .NET Core如何獲取操作系統(tǒng)中的各種信息

    .NET Core如何獲取操作系統(tǒng)中的各種信息

    .net core是最近討論頻率很高的話題,下面這篇文章主要給大家介紹了關于利用.NET Core如何獲取操作系統(tǒng)中各種信息的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-05-05

最新評論

宣化县| 阜宁县| 柞水县| 杭州市| 邯郸市| 额尔古纳市| 延边| 桐城市| 岱山县| 汕头市| 措勤县| 曲松县| 盈江县| 卢龙县| 方正县| 师宗县| 金昌市| 渭源县| 永康市| 洛阳市| 巨鹿县| 韶山市| 桦甸市| 临泉县| 宕昌县| 石林| 镇江市| 大足县| 和林格尔县| 昌乐县| 鲁山县| 石门县| 临沧市| 山丹县| 房山区| 互助| 阳曲县| 沭阳县| 独山县| 嵩明县| 长兴县|