西安监控安装_天津监控安装_广州监控安装

西安监控安装_天津监控安装_广州监控安装

在应用程序的实际操作和维护过程中,我们需要更多日志和监视,以使我们能够全面了解应用程序的运行状态。但是,对于大多数开发人员而言,通常要注意的是如何以更高的成本实现业务,或者如何使应用程序的响应速度更快,以及其他与编码相关的技术。对于应用程序监视,它可能仍然停留在日志文件的级别,并且在尝试通过日志查找问题之前,大多数是在车祸中发现的。

本文打算引入的Elastic APM是一组用于监视应用程序的指标,例如系统响应时间,异常,EF执行的SQL记录等,并且可以将这些记录组织到一个可跟踪的链接中,方便查询问题。此外,Elastic APM还可以使用Kibana进行特别漂亮的视觉显示,这对于我们查找和发现问题很方便。

别胡说八道,开始战斗吧〜

弹性APM简介

弹性APM由以下四个组成部分组成西安监控安装,如下所示:

APM代理

APM代理是.NET Core程序中安装的Nuget程序包。它收集各种数据(例如性能和错误),并将收集的数据批量缓存到APM Server。当然,除了.NET Core使用的Nuget程序包之外,它还可以支持许多其他语言,例如Java,Node.Js,Python等。

请参阅此处以获取受支持的语言列表:

APM服务器

APM Server是部署在服务器上的应用程序,用于接收代理发送的数据包,并基于此数据包手动创建文档,然后将数据转储到Elastic Server。

弹性搜索

我相信您对此太熟悉了。它是基于Lucene的高性能,分布式全文搜索引擎西安监控安装,可快速,实时地存储,搜索和分析大量数据。在这里,他提供了数据存储和搜索功能!

基巴纳语

如果您熟悉Elastic Search,那么您将在某种程度上了解Kibana。 Kibana是一个开源分析和可视化平台。它可以与Elastic Search很好地配合使用,以帮助您快速可视化存储在Elastic Search中的数据。并制作各种精美的报告,图形等。

环境规划

在此实际战斗过程中,我们需要满足以下条件:

弹性搜索的安装:

安装Kibana:

我的环境是Centos 7,因此我根据此官方网站教程进行了安装,整个过程非常简单:

server.host: 0.0.0.0
server.name: 主机IP
server.port: 一个你喜欢的端口号
elasticsearch.hosts: ["已安装好的ES地址,多个之间用逗号隔开"]
logging.dest: /var/log/kibana.log //需要提前把这个文件创建好,然后把权限给够

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service

在这里您必须注意Elastic Search的版本,并且Kibana必须匹配,否则将报告错误。 (我的ES是在一段时间前安装的,因此会出现此问题。如果一次性安装所有ES,应该不会有问题)

如果不幸遇到问题,可以通过配置文件中logging.dest中配置的路径查看日志。

安装APM服务器

APM Server的安装类似于Kibana的安装,过程如下:

output.elasticsearch:
    hosts: ["已安装好的ES地址,多个之间用逗号隔开"]

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable apm-server.service
sudo systemctl start apm-server.service

执行上述操作后,尝试在浏览器中打开服务器Ip:8200,最后,如果安装了APM服务器而没有问题,浏览器将复制类似于以下内容:

{
  "build_date": "2019-06-20T14:39:23Z",
  "build_sha": "9a099b63c53eac8c55707df96193143ec66337e9",
  "version": "7.2.0"
}

这时,我们在浏览器中打开Kibana,然后单击“添加APM”

西安监控安装

然后向下滚动到新打开的页面,然后单击“检查APM服务器状态”按钮。如果您已经正确设置了APM服务器,则表明安装完成〜

西安监控安装

到目前为止,我们的安装工作已经完成。接下来,让我们尝试将.NET Core与Elastic APM集成在一起,让我们一起继续〜

.NET Core应用程序集成

我们创建了一个演示项目来测试APM的各种功能。

请参考GitHub获取该项目的地址:

西安监控安装_广州监控安装_天津监控安装

依赖引用的软件包

我们需要引用Nuget的相关SDK以与我们的应用程序集成。实际上,我们引用了开始时提到的APM代理部分。在Nuget中,我们引用了软件包Elastic.Apm.NetCoreAll。

尽管依赖此程序包等同于手动依赖以下三个程序包,但是根据需要,您也可以仅依赖其中的一些程序包。

在这里,为了简单起见,我们将直接打印软件包Elastic.Apm.NetCoreAll

将代理添加到.NET Core

找到.NET Core的启动文件,并在上述Configure方法中添加以下代码:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseAllElasticApm(Configuration);
}

然后在application.json中添加以下内容:

{
  "ElasticApm": {
    "LogLevel": "Error", // Log级别,根据自己的需要来定"ServerUrls": "http://localhost:8200", //设置前面安装好的APM Server URL,默认端口号是8200
    "ServiceName" : "MyApp", //应用的名字,跟着实际情况起就行,allowed characters: a-z, A-Z, 0-9, -, _, and space. Default is the entry assembly of the application
  }
}

这时,我们启动项目,刷新几次,然后返回到Kibana,在页面上向下滚动,选择.NET,然后单击“检查代理状态”按钮。如果一切顺利,它将显示““从一个或多个代理成功接收到的数据””,如果不幸的是没有显示此句子,则可以通过VS的诊断工具中的“事件”对其进行跟踪,以查看是否没有配置权限。

西安监控安装

西安监控安装

查看监控数据

在Kibana的“添加APM”页面的底部,找到“加载Kibana对象”以创建索引西安监控安装,然后单击“ APM仪表板”按钮进入APM数据查看页面。

西安监控安装

单击“ APM仪表板”按钮后,显示的页面如下:

西安监控安装

此页面上的功能分为两个主要功能模块,服务和跟踪。首先,让我们简要了解这两个标签页中的相应功能。

服务

尽管下面列表中显示的XianDotnetCommunity是您在配置文件中配置的ServiceName,但是单击此名称以输入,您将看到以下报告,该报告具有三个选项卡页:“事务”,“错误”和“度量”。

西安监控安装

西安监控安装

西安监控安装

其中

事务:显示当前应用程序请求的概述,包括请求响应时间,请求调用数等。

错误:程序中的异常列表

指标:应用程序所在计算机的CPU /内存使用情况

PS:实际上,我觉得我确实需要当前应用程序占用的视频内存和CPU值,但是实际上,.NET Core版本的代理程序未实现此功能,请耐心等待更新

踪迹

有一个用于链接跟踪的视图。主页包含所有交易的名称列表和响应时间等。

西安监控安装

单击特定交易进入,您可以查看交易通过的链接列表以及一些更详细的响应信息,这些信息可以帮助您分析整个链接的困境。我们将在下面讨论更多细节。

西安监控安装

探索更多

弹性APM还具有许多其他功能,例如链接跟踪,数据库调用执行,让我们一起探索〜

Monitor API调用链接跟踪

如果您了解微服务架构,那么您必须了解链接跟踪的概念。那么哪些是链接跟踪?给一个栗子:

有一个服务A,它将依赖于服务B和C,服务B将依赖于服务D和E,服务C将依赖于F和G(省去了无数依赖),然后持续三天,服务A似乎很慢,那么如何找到速度较慢的服务呢?至此西安监控安装_天津监控安装_广州监控安装,链接终于派上用场了!

让我们简单地模拟这些嵌套调用:

在一个WebAPI项目Demo1中,有一个带API A的ConsumerController,它在另一个WEB API项目Demo2中调用套接字B / C / D / E。代码大致如下:

项目B:

[Route("api/consumer")]
[ApiController]
public class ConsumerController : ControllerBase
{
    private readonly IHttpClientFactory _httpClientFactory;
    public ConsumerController(IHttpClientFactory httpClientFactory)
    {
        //使用HttpClientFactory时需要先在StartUp中调用services.AddHttpClient();
        _httpClientFactory = httpClientFactory;
    }
    private const string baseUri = "http://localhost:54597";
    [HttpGet("a")]
    public async Task A()
    {
        //HttpClient client = new HttpClient();
        var client = _httpClientFactory.CreateClient();
        Thread.Sleep(new Random().Next(1, 1500));
        var b = await client.GetStringAsync($"{baseUri}/api/data-source/b");
        var c = await client.GetStringAsync($"{baseUri}/api/data-source/c");
        var d = await client.GetStringAsync($"{baseUri}/api/data-source/d");
        var e = await client.GetStringAsync($"{baseUri}/api/data-source/e");
        return $"b={b} & c={c} & d={d} & e={e}";
    }
}

项目A:

[Route("api/data-source")]
[ApiController]
public class DataSourceController : ControllerBase
{
    [HttpGet("b")]
    public async Task B()
    {
        Thread.Sleep(new Random().Next(1, 1500));
        return "B";
    }
    [HttpGet("c")]
    public async Task C()
    {
        Thread.Sleep(new Random().Next(1, 1500));
        return "C";
    }
    [HttpGet("d")]
    public async Task D()
    {
        Thread.Sleep(new Random().Next(1, 1500));
        return "D";
    }
    [HttpGet("e")]
    public async Task E()
    {
        Thread.Sleep(new Random().Next(1, 1500));
        return "E";
    }
}

这时,我们在Demo1中请求API A(xxx / api / consumer / a),然后在Kibana的APM中打开Traces,并找到记录“ GET Consumer / A”(似乎默认值是,然后单击以查看详细信息。

西安监控安装

在详细信息的底部,找到时间线,我们可以看到下图所示的图形:

西安监控安装

我们可以看到请求API A所花费的时间花在了调用4个API上,并且还看到了调用第三个API所花费的时间更长。单击红色条以查看请求的详细信息。

这里不好的是,默认显示的名称是GET localhost。实际上,我们希望将其显示为api uri,对吗?我向他们提到了一个公关,每个人都可以关注它:

监控EF执行记录

这不需要过多解释。它用于监视EF何时执行数据库操作,以检测性能和其他问题。我的代码大致如下:

[HttpGet("person")]
public void TestEfCore()
{
    using (var db = new ApmDbContext())
    {
        var jax = new Person
        {
            Name = "西安.NET社区",
            Age = 26,
            Remark = "做最好的技术社区~"
        };
        db.Persons.Add(jax);
        db.SaveChanges();
        db.Persons.FirstOrDefault(x => x.Id == jax.Id );
        db.Persons.FirstOrDefault(x => x.Name == "西安.NET社区");
        jax.Name = ".NET西安社区";
        db.SaveChanges();
        db.Persons.Remove(jax);
        db.SaveChanges();
    }
}

当我们使用Kibana查看此请求时,时间线显示如下:

西安监控安装

我们可以清楚直观地看到在此请求中执行了哪些SQL语句以及每个语句持续了多长时间,这对于我们的请求分析非常有用。单击特定的绿色条以查看更多详细的数据,但是不幸的是,数据中未记录SQL Params,这对于我们完全重现此请求而言还不够友好〜

西安监控安装

广州监控安装_天津监控安装_西安监控安装

自己购买要点

相对而言,当前的弹性APM生态系统还不够好,组件的支持比空中行走稍差。如果要使用Elastic APM,将不可避免地自己或为第三方做一些性能数据的埋入记录。当组件和类库提供支持时,还必须完成一些数据埋入点。接下来,我们将保留一些其他信息,我们希望将其记录在请求中。示例代码如下:

[HttpGet]
public void RecordMyApmData()
{
    
    var transaction = Agent.Tracer.CurrentTransaction;
    var span1 = transaction.StartSpan("Stage 1", "Customize");
    Thread.Sleep(300);
    span1.End();
    Thread.Sleep(200);
    var span2 = transaction.StartSpan("Stage 2", "Customize");
    Thread.Sleep(100);
    span2.End();            
    Thread.Sleep(100);
    var span3 = transaction.StartSpan("Stage 3", "Customize");
    Thread.Sleep(500);
    span3.End();            
}

最终记录的功效如下:

西安监控安装

该演示实际上非常简单,但是我相信您已经知道如何使用Elastic Apm Agent类来自定义您需要捕获的一些监视数据〜

异常监视

当我们的程序中发生异常时,Elastic APM可以帮助您记录它。此功能与日志类似,但可能会略胜于日志。让我们一起看看吧!

示例代码如下:

[HttpGet]
public void TestException()
{
    try
    {
        throw new Exception("捕获的异常");
    }
    catch (Exception)
    {
    }
    throw new Exception("未捕获的异常");
}

执行代码后,我们可以单击“服务名称”,然后在“错误”选项卡页面中查看异常

西安监控安装

单击详细信息,我们可以查看详细的堆栈调用信息:

西安监控安装

此外,我们可以在“事务”选项卡中找到对异常的请求,然后单击以查看详细信息。在细节中,我们还可以看到异常的发生:

西安监控安装

摘要

本文介绍了如何使用Elastic APM来收集.NET Core应用程序中的性能和异常数据,以及如何使用Kibana进行可视化分析。总体而言,Elastic APM仍然非常强大,可用于性能监视,链接跟踪和异常监视。

目前,Elastic APM支持的组件仍然相对有限。例如,它仅支持EF Core进行数据库查询,不支持更多组件。链接跟踪也仅支持HTTP请求跟踪,而无需支持其他请求。形式。此外,我个人觉得Elastic APM将监视报告(Watcher)放在X-Pack费用包中感到非常难过。尽管异常监视报告仍然非常重要。

欢迎尝试Elastic APM,并一起说明问题〜

评论

首页 电话报修 联系我们