一,引言

  Azure Monitor 是 Azure 中的一项完整堆栈监视服务,是一种收集和分析遥测数据的服务。它提供了一组完整的功能来监视 Azure 资源以及其他云中和本地的资源。Azure Monitor  该服务有助于实现云应用程序以及本地资源和应用程序的最大性能和可用性。 它显示了应用程序的执行方式,并可识别应用程序存在的任何问题。

Azure Monitor 会收集两种基本类型的数据 - 指标和日志。 指标表明资源的执行方式,以及使用的其他资源。 日志包含显示资源创建/修改时间的记录。

Azure Monitor 从一系列组件中自动收集数据。 例如:

  1,应用程序数据:与自定义应用程序代码相关的数据。
  2,操作系统数据:来自托管应用程序的 Windows 或 Linux 虚拟机的数据。
  3,Azure 资源数据:与 Azure 资源(如 Web 应用或负载均衡器)的操作相关的数据。
  4,Azure 订阅数据:与订阅相关的数据。 它包括有关 Azure 运行状况和可用性的数据。
  5,Azure 租户数据:有关 Azure 组织级别服务的数据,例如 Azure Active Directory。
由于 Azure Monitor 是自动系统,因此在创建 Azure 资源(如虚拟机和 Web 应用)后,它会立即从这些源中收集数据。 可通过以下方式扩展 Azure Monitor 收集的数据:
  1,启用诊断:对于某些资源(如 Azure SQL 数据库),仅在启用诊断日志记录后才会收到有关资源的完整信息。 可使用 Azure 门户、Azure CLI 或 PowerShell 来启用诊断。
  2,添加代理:对于虚拟机,可安装 Log Analytics 代理,并将其配置为将数据发送到 Log Analytics 工作区。 此代理会增加发送到 Azure Monitor 的信息量。
开发人员可能还想要从自定义代码(例如 Web 应用、Azure 函数或移动应用)将数据发送到 Azure Monitor。 他们通过调用数据收集器 API 来发送数据。 你可通过 HTTP 与此 REST 接口通信。 此接口与各种开发框架(如 .NET Framework、Node.js 和 Python)兼容。 开发人员可选择自己最喜欢的语言和框架在 Azure Monitor 中记录数据。

日志

日志包含对资源所做更改的相关时间戳信息。 记录的信息类型因日志源而异。 日志数据会整理成记录,每种记录类型具有不同的属性集。 日志可以包含数字值(如 Azure Monitor 指标),但大多数日志包含文本数据,而不是数字值。
最常见的日志项目类型会记录事件。 事件可能偶尔发生,而不是按固定的间隔或根据某种计划发生。 事件由应用程序和服务创建,这些应用程序和服务为事件提供上下文。 可将指标数据存储在日志中,以便将其与其他监视数据合并起来用于分析。
在 Log Analytics 工作区中记录来自 Azure Monitor 的数据。 Azure 提供分析引擎和丰富的查询语言。 日志显示了上下文的任何问题,有助于确定根本原因。

指标

指标是数字值,用于描述系统某些方面在某个时间点的情况。 Azure Monitor 可以近乎实时地捕获指标。 这些指标按固定时间间隔收集,在因其频繁采样而发出警报时很有用。 可使用多种算法,将指标与其他指标进行比较,并观察随时间变化的趋势。
指标存储在时序数据库中。 分析时间戳数据时,使用此数据存储最为有效。 指标适用于警报和快速检测问题。 可通过指标了解有关系统性能的信息。 如果需要,可以将它们与日志进行合并,确定问题的根本原因。

  Azure Monitor 现在包括 Log Analytics 和 Application Insights,其提供的高级工具适用于收集和分析遥测数据,以便最大程度地提高云和本地的资源和应用程序的性能和可用性。 它可以帮助你了解应用程序的性能,并主动识别影响应用程序及其所依赖资源的问题。那么今天就先了解 Application Insights,通过它可以监控网站的可用性、性能和使用情况。快速诊断确定并诊断应用程序中的错误,而无需等待用户报告这些错误以及提供用户数据的分析,用户,会话,事件等,

二,正文

1,什么是 Application Insights?

  Application Insights 是 Azure Monitor 的一项功能。 使用它可以监视实时应用程序。 它将自动检测性能异常,并且包含了强大的分析工具来帮助诊断问题,了解用户在应用中实际执行了哪些操作。 它旨在帮助持续提高性能与可用性。 它适用于本地云、混合云或任何公有云中托管的各种平台(包括 .NET、Node.js、Java 和 Python)上的应用。 它与 DevOps 进程集成,并且具有与不同开发工具的连接点。 可以通过与 Visual Studio App Center 集成来监视和分析移动应用的遥测数据。

2,为NET.Core Web项目添加Application Insights

新增 NET Core Web 项目

 管理 NuGet 包=》Microsoft.ApplicationInsights.AspNetCore

注册Application Insights 遥测收集服务

services.AddApplicationInsightsTelemetry();

azure portal 新建 Applaction Insights 服务

点击 “Create” 按钮

选择已有的资源组/创建新的资源组,填写 Application Insights 的服务名称 “Azure.Monitor.Application_Insights” (我这里是之前已经创建服务名称为 “Azure.Monitor.Application_Insights” ,这里忽略图中名称后面没有 s)

复制图中圈起来的检测密钥:Instrumentation Key

配置 appsetting 配置文件中的 InstrumentationKey 的值

{
"ApplicationInsights": {
"InstrumentationKey": "putinstrumentationkeyhere"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
}
}

3,运行 Web 应用程序,查看遥测数据

选择 Monitoring=》Logs

消息实时上报差不多需要3-5分钟,差不多3分钟后,我们再次点击 “Run”,我们只看到 “Warning”,“Error”,“Critical”,我们没有得到 “Information” 和 “Debug” (后面会讲到)

同时,如下图所示,我们还可以写一些查询语句,比如根据时间戳降序排列

我们还可以编写where 条件,例如 查询 message=="Warning 1"的警告信息

Monitoring Logs的这个功能还是很强大的,它可以浏览我们的日志信息,同时展开当前日志,可以展示更多的信息,比如 “operation_ParentId”,可以用来关联来自同一个Http请求的所有的消息的ID

圈起来的两组数据,是我相隔2分钟后的请求日志结果,我们可以看到它们对ID都有相同的操作。因为是对于我们在一分钟内看到的是同一个Http请求。

查看手动抛的异常 Exception

我们可以看出异常的时间,异常信息,异常发生的位置,异常的类型,操作等等

记录的异常行号为37行,可以对比一下手动抛出异常的行数

同时,application insights还提供了一个可视化的地方,Investigate=》Failures,从这里可以看到

  1,正常,异常的请求。

  2,请求对应的响应码。

  3,各个接口/页面的异常情况。

  4,异常类型的分布。

  5,依赖性信息

其实,我们可以从代码中可以看到,我们自己手动抛了一个异常,异常虽然用try catch 进行包裹,但是对于应用程序来说,这个异常还没有进行正确的处理掉,比如返回信息,返回状态码等等。

切换到 Exceptions,可以看到这个异常的信息了

同时,我们可以得到一些额外的堆栈信息,甚至可以看到异常的代码行,控制器方法,类等信息

回到上一个话题,Application Insights 默认情况下只监控 “Warnning”,“Error”,“Critical” 类型的信息,我们可以通过appsetting 配置文件设置Application Insights的监视级别

"ApplicationInsights": {
"LogLevel": {
"Default": "Debug",
"Miccrosoft": "Error"
}
},

全部代码 牵扯隐私的部分,这里使用 “0”进行替代

{
"Logging": {
"ApplicationInsights": {
"LogLevel": {
"Default": "Debug",
"Miccrosoft": "Error"
}
},
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ApplicationInsights": {
"InstrumentationKey": "000000-0000-0000-0000-00000000000000"
}
}

继续在Application Insights的logs查看监测数据

bingo,修改监测默认配置成功!

三,总结

  Application Insights 可以用来监控网站的可用性、性能和使用情况。快速诊断确定并诊断应用程序中的错误,而无需等待用户报告这些错误。提供用户数据的分析,用户,会话,事件等Application Insights 提供服务器端监视和客户端/浏览器监视功能,它默认数据保留90天,同时还有支持实时流数据上报(延时低至1秒,不保留数据),增加自定义埋点(自定义的指标)等

  Application Insights 服务处理数据并将数据聚合到一个表单中,方便查询和可视化。

--------------我是分割线-----------------

作者:Allen

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure Monitor(一)Application Insights的更多相关文章

  1. 【应用程序见解 Application Insights】使用Azure Monitor Application Insights Agent获取Azure VM中监控数据及IIS请求指标等信息

    问题情形 为了使用Application Insights也可以监控Azure VM中的相关性能数据,如CPU, Memory,IIS Reuqest等信息,可以在VM中开始一个一个扩展插件: Azu ...

  2. 【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集

    问题描述 近日好消息,如果是一个Java Spring Cloud的项目,想使用Azure Applicaiton Insights来收集日志及一些应用程序见解.但是有不愿意集成SDK来修改代码或者配 ...

  3. Azure Application Insights REST API使用教程

    本文是Azure Application Insights REST API的简单介绍,并会包含一个通过Python消费API的示例/小工具. 新加入的team中的一项工作是制作日常的运维报表,制作方 ...

  4. 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中

    问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ...

  5. 【Azure 应用程序见解】 Application Insights 对App Service的支持问题

    问题描述 Web App 发布后, Application Insights 收集不到数据了 问题分析 在应用服务(App Service)中收集应用的监控数据(如Request,Exception, ...

  6. Azure Monitor(二)Log Analytics

    一,引言( 前情回顾) Azure Monitor 包括 Log Analytics 和 Application Insights,其提供的高级工具适用于收集和分析遥测数据,以便最大程度地提高云和本地 ...

  7. 使用Application Insights 做分析

    Application Insights on Windows Desktop apps, services and worker roles : https://azure.microsoft.co ...

  8. 关于Application Insights遥测功能使用【遇到问题】

    简介:Application Insights是微软发布的一个在线服务,可以监测自己的网站应用,进行性能管理以及使用分析. Application Insights功能一开始是出现在Visualstu ...

  9. [Windows Azure] Configuring and Deploying the Windows Azure Email Service application - 2 of 5

    Configuring and Deploying the Windows Azure Email Service application - 2 of 5 This is the second tu ...

随机推荐

  1. [JavaWeb基础] 011.Struts2 配置拦截器

    在网页开发中有一个很重要的东西就是拦截器,就是在请求接收到的时候先到拦截器中进行一些逻辑处理,例如会话是否过期的验证等.在Struts2中我们可以编写一个拦截器的类,然后在struts.xml中简单配 ...

  2. pandas读写csv,并增加一列

    为读取csv,并DataFrame增加一列,再自由组合列并保存到csv文件: import pandas as pd sourceFile='d:\person.csv' #person.csv包括i ...

  3. 容器技术之Dockerfile (一)

    在前边的随笔中我们聊到了docker的基本命令,镜像,网络,存储卷以及基于现有容器制做docker镜像,相关随笔可参考https://www.cnblogs.com/qiuhom-1874/categ ...

  4. PHP AES加解密(兼容php5,php7)

    最近在工作中负责对接API,对方要求对业务数据进行AES 算法(256,ECB,补码方式:PKCS5Padding)加密. 加密算法要求如下: 算法AES/ECB/PKCS5Padding 密钥长度2 ...

  5. Vuex原理实现

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 思考问题 Vuex 只在更实例引入了,那么 ...

  6. Java实现 LeetCode 面试题13. 机器人的运动范围(DFS)

    面试题13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动 ...

  7. (Java实现) 车站

    题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...

  8. Java实现 LeetCode 468 验证IP地址

    468. 验证IP地址 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址. IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(&qu ...

  9. Java实现 LeetCode 11 盛最多水的容器

    11. 盛最多水的容器 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) ...

  10. java实现逻辑推断

    A.B.C.D.E.F.G.H.I.J 共10名学生有可能参加本次计算机竞赛,也可能不参加.因为某种原因,他们是否参赛受到下列条件的约束: 如果A参加,B也参加: 如果C不参加,D也不参加: A和C中 ...