使用Azure Application Insignhts监控ASP.NET Core应用程序
Application Insignhts是微软开发的一套监控程序。他可以对线上的应用程序进行全方位的监控,比如监控每秒的请求数,失败的请求,追踪异常,对每个请求进行监控,从http的耗时,到SQL查询的耗时,完完整整的被记录下来。当对程序进行优化跟排错时非常好使。它原来是visualstudio online的一个服务,现在合并进了Azure,作为Azure Monitor的一个组件。虽然合并进了Azure,但是Application Insignhts还是免费的。
什么是Application Insignhts
Application Insights 是 Azure Monitor 的一项功能,是面向开发人员和 DevOps 专业人员的可扩展应用程序性能管理 (APM) 服务。 使用它可以监视实时应用程序。 它将自动检测性能异常,并且包含了强大的分析工具来帮助诊断问题,了解用户在应用中实际执行了哪些操作。 它旨在帮助持续提高性能与可用性。 它适用于本地云、混合云或任何公有云中托管的各种平台(包括 .NET、Node.js、Java 和 Python)上的应用。 它与 DevOps 进程集成,并且具有与不同开发工具的连接点。 可以通过与 Visual Studio App Center 集成来监视和分析移动应用的遥测数据。
摘自微软文档:app-insights-overview
在Azure创建Application Insignhts服务
上一次介绍了如何注册12个月免费订阅账号如何白嫖微软Azure12个月及避坑指南,使用账号登录管理平台后,找到Application Insignhts服务,点击创建。

在创建界面选择资源组,填写实例名称,选择区域,选择个离你近的。

创建一个标记。标记其实就是一组键值对,主要用来统计的时候进行区分跟合并用的。

最后点提交,等待一会就会提示部署完成。

部署成功后回到管理控制台主页,找到所有资源,点击刚才填写的实例名就可以查看详情了。

这个页面默认会显示几个指标,因为截图的时候是我已经接入过了,所以有数据,第一次进去应该是没有数据的。
“检测密钥”比较重要,后面asp.net core程序对接的时候需要用到。
在asp.net core程序接入Application Insignhts服务
在asp.net core程序接入Application Insignhts服务非常简单。简单的配置几行代码就可以运行了,对业务代码完全没有侵入。
找一个asp.net core的程序,在.csproj文件下加入Application Insignhts包的引用。
<Project Sdk="Microsoft.NET.Sdk.Web">
...
...
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.13.1" />
</ItemGroup>
</Project>
在Startup.ConfigureServices下注入Application Insignhts相关的服务。
public void ConfigureServices(IServiceCollection services)
{
//register application insights
services.AddApplicationInsightsTelemetry();
...
...
}
在配置文件appsettings.json下配置检测密钥。
{
"ApplicationInsights": {
"InstrumentationKey": "xxxxxxxxxxxxxx"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
...
...
}
这样asp.net core程序就配置好了。正常流程发布程序后部署它。
查看应用程序监控指标
发布完程序,等程序运行一段时间后就可以去管理界面查看监控指标了。

默认有4个指标:
- 失败的请求数
- 服务器响应时间
- 服务器请求
- 可用性
其中比较有意思的是服务器响应时间跟服务器请求这2个指标,对于我们调优有非常大的意义。服务器响应时间跟服务器请求点进去其实是进了性能指标的界面。

该界面展示了服务器一段时间内接受到的请求数量及响应速度。同时列出一些慢的请求,点击一个请求可以看到更加明细的信息。
点击第一个最慢的看看为什么会这么慢。

可以看到这个请求耗时主要是SQL跟HTTP,其中SQL平均耗时17ms,这个肯定没问题。HTTP平均耗时650ms那么这个接口慢的问题基本被锁定了。
这还没完,继续点击深入钻取...示例按钮,还有更加详细的信息。

点击示例按钮,会列出该接口近期的一些调用示例。选一个耗时比较长的进入点击进去,还有更详细的信息。

通过这图就很清晰了,这个请求包含了多次SQL请求,跟2次HTTP请求。SQL请求耗时都在1ms左右,其中一次HTTP请求1.7s,那么很明显了,就是这个HTTP请求拖慢了整个请求,所有需要对这个HTTP请求进行优化。
这还没完,点击其中的SQL请求,还有更详细的信息,能显示执行了什么SQL语句。

点击HTTP请求,同样会列出详细信息,包括请求的URL等信息。

其他指标
除了默认列出来的指标,其实还有很多指标能够查看。
在右侧边栏点击指标菜单,显示指标筛选界面。在该界面可以添加自己想看的指标。比如CPU,内存等信息。

实时指标
实时指标是个很酷炫的功能,可以在一个界面动态实时显示N个指标。

总结
asp.net core程序使用Application Insignhts非常简单,通过简单的几行代码就集成完成,并且对业务代码零侵入。Application Insignhts的监控功能非常强大,可以对应用程序、服务器各种指标进行监控。特别是性能指标的请求,对我们进行线上程序的排错,调优具有非常强大指导意义。
关注我的公众号一起玩转技术

使用Azure Application Insignhts监控ASP.NET Core应用程序的更多相关文章
- Prerender Application Level Middleware - ASP.NET Core Middleware
In the previous post Use Prerender to improve AngularJS SEO, I have explained different solutions at ...
- Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册
一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...
- ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...
- ASP.NET Core 中文文档 第二章 指南(8) 使用 dotnet watch 开发 ASP.NET Core 应用程序
原文:Developing ASP.NET Core applications using dotnet watch 作者:Victor Hurdugaci 翻译:谢炀(Kiler) 校对:刘怡(Al ...
- 使用 dotnet watch 开发 ASP.NET Core 应用程序
使用 dotnet watch 开发 ASP.NET Core 应用程序 原文:Developing ASP.NET Core applications using dotnet watch作者:Vi ...
- 使用Visual Studio Code创建第一个ASP.NET Core应用程序
全文翻译自:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 这篇文章将向你展示如何在Mac上写出你的第一个A ...
- ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
一.前言 在上一篇文章中,我们讲解了如何在Linux服务器上面部署ASP.NET Core应用程序,并且使用Nginx作为反向代理.我们在Linux服务器上面,是通过ASP.NET Core自宿主的方 ...
- 在Mac下运行ASP.NET Core应用程序
在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的第一个ASP.NET应用. 开发环境搭建 首先 ...
- 使用VS Code开发ASP.NET Core 应用程序
最新教程:http://www.cnblogs.com/linezero/p/VSCodeASPNETCore.html 使用VS Code开发ASP.NET Core 应用程序 准备 1.安装VS ...
随机推荐
- %matplotlib inline的含义
用在Jupyter notebook中具体作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python cons ...
- 恕我直言你可能真的不会java第2篇:Java Stream API?
一.什么是Java Stream API? Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- Flutter学习笔记(35)--通知Notification
如需转载,请注明出处:Flutter学习笔记(35)--通知Notification 通知的NotificationListener和我们之前写的事件的Listener一样,都是功能性的组件,而且也都 ...
- TLS1.2协议设计原理
目录 前言 为什么需要TLS协议 发展历史 协议设计目标 记录协议 握手步骤 握手协议 Hello Request Client Hello Server Hello Certificate Serv ...
- Beta冲刺<1/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺--第一天(05.19) 作业正文 如下 其他参考文献 ... B ...
- 也来聊聊 HTTPS.
前言: 网上聊 HTTPS 的文章已经数都数不过来了吧,厚着脸皮,整理下读书笔记,结合平常项目的实践,也来聊聊 HTTPS. 一.为什么需要 HTTPS? 众所周知,HTTP 协议具有无连接.不可靠. ...
- java常用的格式化
日常工作中,总会遇到一些格式化显示的需求,下面做一些简单的整理 JDK中java.text下提供了格式化常用的工具类,具体结构见下图 时间日期格式化 DateFormat 采用DateFormat.g ...
- Spring Bean各阶段生命周期的介绍
一.xml方式配置bean 二.Aware接口 2.1 BeanNameAware 2.2 BeanFactoryAware 2.3 ApplicationContextAware 2.4 Aware ...
- xeus-clickhouse: Jupyter 的 ClickHouse 内核
在科学计算领域,Jupyter 是一个使用非常广泛的集成开发环境,它支持多种主流的编程语言比如 Python, C++, R 或者 Julia.同时,数据科学最重要的还是数据,而 SQL 是操作数据最 ...