欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

什么是Elastic AMP

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

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

服務(wù)器指標(biāo)是另一個(gè)重要的信息來源。Elastic APM 代理會(huì)自動(dòng)獲取基本的主機(jī)級(jí)別指標(biāo)和特定于代理的指標(biāo)。

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

工作原理

  • Elastic AMP 通過Agent收集應(yīng)用程序的指標(biāo)信息
  • Agent將收集的信息上傳至AMP Server
  • AMP Server對(duì)數(shù)據(jù)進(jìn)行聚合后,存儲(chǔ)至Elasticsearch
  • 通過Kibana查看指標(biāo)信息

環(huán)境安裝

我們通過Docker搭建一個(gè)單機(jī)的環(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新建一個(gè)Web項(xiàng)目來演示

1.新增Web項(xiàng)目

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é)點(diǎn)

      <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");  //服務(wù)名
            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.啟動(dòng)網(wǎng)站

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

Elastic APM核心模塊

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

2. Dependencies:通過Dependencies看到服務(wù)依賴關(guān)系

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

4. Matrics: 可以通過Matrics看到服務(wù)氣的內(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;//超時(shí)時(shí)間,單位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");
        }

啟動(dòng)程序即可看到MSSql與Redis的相關(guān)數(shù)據(jù)

Elastic APM Api的深入使用

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

一些定時(shí)任務(wù)同樣可以使用Elastic APM的Agent.Tracer.StartTransaction和來監(jiān)控,并且我們可以通過StartSpan來新增一個(gè)自定義節(jié)點(diǎn),這種方式需要我們自己處理異常信息。我們新增一個(gè)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中啟動(dòng)Testjob

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

啟動(dòng)程序即可看到對(duì)應(yīng)的TestJob監(jiān)控

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

CaptureTransaction與CaptureSpan相對(duì)于StartTransaction與StartSpan可以幫助我們結(jié)束Transaction與Span,也可以自動(dòng)捕獲異常,新增一個(gè)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中啟動(dòng)Testjob2

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

啟動(dòng)程序即可看到對(duì)應(yīng)的TestJob2監(jiān)控

3.Agent全局?jǐn)r截

我們可以通過過濾器攔截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使用方法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .NET微信公眾號(hào) 用戶分組管理

    .NET微信公眾號(hào) 用戶分組管理

    這篇文章主要介紹了.NET微信公眾號(hào) 用戶分組管理,web頁(yè)面設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 寫一個(gè)含數(shù)字,拼音,漢字的驗(yàn)證碼生成類

    寫一個(gè)含數(shù)字,拼音,漢字的驗(yàn)證碼生成類

    本文和大家分享的是一個(gè)集成1:小寫拼音;2:大寫拼音;3:數(shù)字;4:漢字的驗(yàn)證碼生成類。本章例子也會(huì)有一個(gè)mvc使用驗(yàn)證碼校驗(yàn)的場(chǎng)景。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 獲取asp.net服務(wù)器控件的客戶端ID和Name的實(shí)現(xiàn)方法

    獲取asp.net服務(wù)器控件的客戶端ID和Name的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄@取asp.net服務(wù)器控件的客戶端ID和Name的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • asp.net動(dòng)態(tài)加載自定義控件的方法

    asp.net動(dòng)態(tài)加載自定義控件的方法

    這篇文章主要介紹了asp.net動(dòng)態(tài)加載自定義控件的方法,涉及asp.net動(dòng)態(tài)加載控件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 詳解.NET Core 3.0 里新的JSON API

    詳解.NET Core 3.0 里新的JSON API

    這篇文章主要介紹了詳解.NET Core 3.0 里新的JSON API,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 完美解決在ModalPopupExtender中使用CalendarExtender時(shí)被層遮擋的問題

    完美解決在ModalPopupExtender中使用CalendarExtender時(shí)被層遮擋的問題

    ASP.NET AJAX Control Toolkit是一組非常不錯(cuò)的基于asp.net的ajax控件,它建立在asp.net 3.0的ScriptManager組件之上,提供了很多非常實(shí)用的效果和功能。
    2009-11-11
  • asp.net core應(yīng)用docke部署到centos7的全過程

    asp.net core應(yīng)用docke部署到centos7的全過程

    這篇文章主要給大家介紹了關(guān)于asp.net core應(yīng)用docke部署到centos7的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • PHP session實(shí)現(xiàn)購(gòu)物車功能

    PHP session實(shí)現(xiàn)購(gòu)物車功能

    這篇文章主要為大家詳細(xì)介紹了PHP session實(shí)現(xiàn)購(gòu)物車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • .net indexOf(String.indexOf 方法)

    .net indexOf(String.indexOf 方法)

    字符串的IndexOf()方法搜索在該字符串上是否出現(xiàn)了作為參數(shù)傳遞的字符串,如果找到字符串,則返回字符的起始位置 (0表示第一個(gè)字符,1表示第二個(gè)字符依此類推)如果說沒有找到則返回 -1
    2012-10-10
  • 一個(gè)Asp.Net的顯示分頁(yè)方法 附加實(shí)體轉(zhuǎn)換和存儲(chǔ)過程 帶源碼下載

    一個(gè)Asp.Net的顯示分頁(yè)方法 附加實(shí)體轉(zhuǎn)換和存儲(chǔ)過程 帶源碼下載

    現(xiàn)在自己寫的webform都不用服務(wù)器控件了,所以自己仿照aspnetpager寫了一個(gè)精簡(jiǎn)實(shí)用的返回分頁(yè)顯示的html方法,其他話不說了,直接上代碼
    2012-10-10

最新評(píng)論