• ASP.NET Core WebAPI中的分析工具MiniProfiler


    安装

    我们可以使用Nuget来下载这个包。

    PM> Install-Package MiniProfiler.AspNetCore.Mvc

    配置Startup.cs

    MiniProfiler配置起来很简单,只需要以下几步

    ConfigureServices方法中添加MiniProfiler服务

    public void ConfigureServices(IServiceCollection services)
    {
       services.AddMiniProfiler(options =>
          options.RouteBasePath = "/profiler"
       );
    }
    • 这里是配置了MiniProfiler的路由基础路径,默认的路径是/mini-profiler-resources
    • 按照当前配置,你可以使用"/profiler/results"来访问分析报告

    激活中间件,启用MiniProfiler服务

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
       app.UseMiniProfiler();
    }

    配置需要监控分析的代码

    public class ValueController : ControllerBase
    {
       [HttpGet]
       public IEnumerable<string> Get()
       {
          string url1 = string.Empty;
          string url2 = string.Empty;
          using (MiniProfiler.Current.Step("Get方法"))
          {
             using (MiniProfiler.Current.Step("准备数据"))
             {
                using (MiniProfiler.Current.CustomTiming("SQL", "SELECT * FROM Config"))
                {
                   // 模拟一个SQL查询
                   Thread.Sleep(500);
                   
                   url1 = "https://www.baidu.com";
                   url2 = "https://www.sina.com.cn/";
                }
             }
             
             
             using (MiniProfiler.Current.Step("使用从数据库中查询的数据,进行Http请求"))
             {
                using (MiniProfiler.Current.CustomTiming("HTTP", "GET " + url1))
                {
                   var client = new WebClient();
                   var reply = client.DownloadString(url1);
                }
    
                using (MiniProfiler.Current.CustomTiming("HTTP", "GET " + url2))
                {
                   var client = new WebClient();
                   var reply = client.DownloadString(url2);
                }
             }
          }
          return new string[] { "value1", "value2" }; 
       }
    }

    代码解释:

    • MiniProfiler.Current.Step方法定义了分析的步骤,这个方法可以接受一个String类型的参数,它会显示在最终的报告中
    • MiniProfiler.Current.CustomTiming方法是更细粒度的对报告内容进行分类,以上代码中定义了2种分类,一种是SQL, 一种是Http
    • 上述程序的功能: 模拟从数据库拉取2个网站的Url, 并使用WebClient来分别请求网站的Url

    查看效果

    下面我们启动项目, 项目默认打开/api/values

    然后我们来访问以下/profiler/results, 就会出现如下页面

    如上图所示,我们可以很清楚的看到代码中每一部分的耗时,由于我们添加了2种分类SQL和Http,所以列表中会对2种分类进行汇总。

    重点: 当前页面只会显示最近的一次请求

    从当前报告中可以得到以下结论

    • 当前请求总响应时间 1723.6ms
    • SQL语句查询耗时517.ms
    • 2次Http请求共耗时868.3ms, 其中访问百度耗时424.6ms, 访问新浪耗时443.7ms

    如何让MiniProfiler与Swagger集成

    这里我们就不再讲如何在ASP.NET Core中整合Swagger。

    MiniProfiler和Swagger是可以集成在一起的,为了完成这个功能,我们需要进行以下几步

    下载Swagger自定义页面

    默认的index.html页面可以从如下链接下载

    https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/index.html

    下载之后将这个文件放置到项目根目录下。

    接下来我们需要在这个文件的头部加入如下脚本代码:

    <script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.0.138+gcc91adf599" 
            data-version="4.0.138+gcc91adf599" data-path="/profiler/" 
            data-current-id="4ec7c742-49d4-4eaf-8281-3c1e0efa748a" data-ids="" data-position="Left" 
            data-authorized="true" data-max-traces="15" data-toggle-shortcut="Alt+P" 
            data-trivial-milliseconds="2.0" data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync">
    </script>

    最后我们需要配置这个index.html文件的Bulid Action为Embedded resource

    安装自定义页面

    Startup.cs文件中,我们需要修改UseSwaggerUI中间件的配置,这里我们需要添加一个InputStream配置。

    app.UseSwaggerUI(c =>
    {
       c.RoutePrefix = "swagger";
       c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
       c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("MiniProfilerSample.index.html");
    });

    注意:这里MiniProfilerSample是项目的命名空间名

    最终效果

    重新启动项目,Swagger文档页面的左上角就出现了一个小的面板,当模拟请求一个连接之后,它就会显示出当前请求的分析数据,看起来是不是很酷炫。

    总结

    本篇博客描述了如何使用MiniProfiler来监控分析你的Api。 MiniProfiler除了提供网页显示报告,还支持将报告结果存储在数据库中,后面我会补充一篇文章来说明如何将报告保存到数据库中。

    本篇源代码: https://github.com/lamondlu/Sample_MiniProfiler

  • 相关阅读:
    【php】 mac php-redis install
    【php】phpstorm 配置远程调试
    【cookie】cookie探讨
    第一篇文章
    SQL经典50查询语句案例_1(查询“001”课程比“002”课程成绩高的所有学生的学号)
    SQL经典50查询语句案例_10(查询没有学全所有课的同学的学号、姓名)
    SQL经典50查询语句案例_9(查询所有课程成绩小于60分的同学的学号、姓名)
    SQL经典50查询语句案例_8(查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名)
    SQL经典50查询语句案例_7(查询学过“叶平”老师所教的所有课的同学的学号、姓名)
    SQL经典50查询语句案例_6(查询学过“001”并且也学过编号“002”课程的同学的学号、姓名)
  • 原文地址:https://www.cnblogs.com/sylone/p/11024386.html
Copyright © 2020-2023  润新知