各位好,今天继续来讨论关于Azure平台的技术问题,这次我们来讨论关于监控的话题,各个云平台都会为用户预留获取监控数据的接口,Azure也不例外,拿最基础用法来说,用户可以从Azure Portal中获取所需要的监控信息,比如Azure虚拟机的磁盘IO,CPU百分比,内存等,除此之外,还可以通过定义各种action,针对监控到的数据进行一系列的操作,比如发送email,调用
首先来简单介绍Azure中用来做监控的功能叫做Azure monitor, Monitor的功能非常非常强大,不光可以收集各种log,同时还可以将log对接到包括powerbi, eventhub等多个平台,之后利用平台的功能,对log进行一些展示和分析的工作。
总体来说,可以通过这张架构图来了解Azure monitor的整体架构
可以看到,monitor支持以下几种source,涵盖到包括应用程序、应用程序依赖的任何操作系统和服务,直到平台本身
· 应用程序监视数据:有关编写的代码的性能和功能的数据,不管平台是什么。
· 来宾 OS 监视数据:有关运行应用程序的操作系统的数据。 此应用程序可以在 Azure 中运行,也可以在其他云中或本地运行。
· Azure 资源监视数据:有关 Azure 资源的操作的数据。
· Azure 订阅监视数据:有关 Azure 订阅操作和管理的数据,以及有关 Azure 本身运行状况和操作的数据。
· Azure 租户监视数据:有关租户级 Azure 服务(例如 Azure Active Directory)操作的数据。
而Azure Monitor收集的数据主要可以分为两种类型,Metric以及Log,Metric主要指的是各种指标数据,类似于磁盘IO,CPU,network等,Log则包含各种事务日志,包括.NET, SQL,IIS等多种不同类型。
信息收集完毕后,根据对接平台的不同,则可以实现不同的功能,举例来说,如果将monitor对接到Azure Dashboard,则可以在Portal中根据需求定制不同的图表来对monitor得来的数据进行展现
如果对接到Power BI,则可以有更丰富的图表展现方式,可以更灵活地根据需要展示分析结果
这里就不详细说明了,下边首先来举例说明,如何查看VM的监控数据,查看VM监控数据非常简单,选择好VM后,可以看到右下角会出现一些图表,Azure默认就会监控一些基本的数据,比如network,CPU等,需要注意的是,这些数据属于是host level的,也就是通过宿主机获取到的监控数据,和在VM内部获取的数据实际上并不是完全一致的,比如network数据,在host和在VM内部得到的监控数据,很有可能就不一致,这是因为Azure对于host level以及VM Level network的监控数据计算方式是不一样的,具体可以后续再谈
Host level监控有一个很大的弊端就是,如果我们想看内存数据,host level的监控是看不到的,需要我们手动开启guest level 监控,开启方法很简单,首先点击VM,然年选择diagnostics settings,可以看到如果没有开启guest level monitoring的话,这里会看到enable guest level monitoring的选项,直接点击即可开启
开启之后如果想要查看内存数据,首先点击metrics,然后metric namespace这里选择virtualmachines
然后在metric里选择Commit byte in use,即可看到内存数据
在此基础上,如果想实现监控报警功能,则可以点击左侧alerts(classic),之后选择add metric alert
输入基本信息后,可以选择想要针对哪个metric设置报警,比如可以针对CPU的使用情况进行报警,可以选择processor time
之后再设置报警的条件,比如可以设置5分钟内,CPU使用率超过80%,则发邮件通过用户abc@abc.com,设置完成后alert即会生效
这是标准创建alert的流程,但是在东二和北二区,目前Portal的这个功能还未支持,通过portal创建alert会收到以下提示
但是这并不代表这个功能无法使用,我们可以通过powershell创建alert,比如内存5分钟内超过80%即报警,并发送邮件给abc@abc.com,则可以通过以下命令实现
$actionEmail = New-AzureRmAlertRuleEmail -CustomEmail "abc@abc.com"
Add-AzureRmMetricAlertRule -Name MemoryAlert -Location "ChinaNorth" -ResourceGroup "abc" -TargetResourceId "/subscriptions/5d666915-fc5f-4ee8-b26a-d98jkjkl22134/resourceGroups/mmm/providers/Microsoft.Compute/virtualMachines/vm01" -MetricName "\Memory\% Committed Bytes In Use" -Operator GreaterThan -Threshold 80 -WindowSize 00:05:00 -TimeAggregationOperator Average -Action $actionEmail
需要注意的是,我的VM是在北二区,但是这个powershell里的location写的却是北一,这并不是一个typo,而是之前提到的东二北二无法创建alert的workaround,所以这里的location是不能被修复的
创建完成后,当条件被触发时即可收到类似的报警