Azure 为用户提供了可以自己配置的性能监控功能:Azure 诊断扩展。但是在具体配置中,经常会遇到各种各样的问题。不了解监控的工作机制常常给排查带来一定难度。这里我们整理了关于 Azure 虚拟机监控的工作原理,以及在出现问题时的大致排查步骤,希望对读者和用户有所帮助。

以下是 Azure 诊断的简易原理图。简单来说,我们通过在门户中启用诊断,将配置信息发送给虚拟机中运行的 VM 代理。VM 代理收到请求后,进行 Azure 诊断扩展的安装和配置。然后,Azure 诊断根据配置文件,收集虚拟机中的性能数据等,并将其上传到存储账户对应的表中。最后,门户通过 Microsoft.insights 这个资源提供程序,从对应的存储账户中获取数据,并展现出来。Azure 警告可以根据这些监控数据进行告警设置,触发后续行动等。这个过程中的每个环节,每个应用和服务,缺一不可,才能保证监控能正常工作。

 

现在大家了解了基本的过程,那么在遇到性能数据无法显示的问题时,大概的思路也就很清楚了。

检查诊断扩展是否安装成功

检查诊断配置文件是否正确

检查存储账号是否有性能数据

检查订阅是否注册了 Microsoft.insights

检查诊断扩展是否安装成功

检查

最简单的检查方法,就是在门户中查看扩展状态。

虚拟机中的 Extensions 边栏里列出了该虚拟机安装的所有扩展。诊断扩展在 Linux 系统中为 LinuxDiagnostic; 在 Windows 系统中为 IaaSDiagnostic。

若状态为Provisioning succeeded,则说明扩展安全成功。若是其他状态如Not Available或者Failed,则说明安装可能有问题。这时就需要排查安装问题。

 

问题排查

由于 Azure 对虚拟机的管理都是通过 VM Agent 来完成的。因此,安装不成功的大多数原因都在于 VM Agent 工作不正常。那么如何检查呢?

Linux

以 root 身份运行下面命令,查看 VM Agent 的版本,系统版本,Python 版本和运行状态。

复制

# waAgent -daemon

2017/07/19 12:19:19.184938 INFO Azure Linux Agent Version:2.2.13

2017/07/19 12:19:19.189233 INFO OS: centos 7.3.1611

2017/07/19 12:19:19.194076 INFO Python: 2.7.5

2017/07/19 12:19:19.198558 INFO Daemon is already running: 808

检查代理版本和状态

默认情况下,系统会自动更新版本到最新版。请参考WALinuxAgent查看是否是最新的版本。在排查问题过程中,建议首先尝试将 VM Agent 升级到最新版本后再继续操作。参考文档进行 VM Agent 的安装和升级。

若当时虚拟机中 VM Agent 服务处于停止状态,以 root 身份执行下面命令进行启动:

# waAgent -start

如果是经典模式虚拟机,您还需要检查虚拟机是否启用了 VM Agent。如果未更新 Azure 虚拟机的配置文件,即使安装成功,Azure 也无法判断您是否安装了 VM Agent,因此也不会使用该 Agent 进行扩展管理。

以下步骤需要在 AzurePowershell 中执行。首先判断 VM 是否已经设置了启用 VM Agent:

复制

$vm = Get-AzureVM -ServiceName $serviceName -Name $vmname

“$vm.VM.ProvisionGuestAgent”

如果$vm.VM.ProvisionGuestAgent为true,说明 VM 已启用 VM Agent。剩余步骤即可跳过。 如果$vm.VM.ProvisionGuestAgent为false,说明尚未启用 VM Agent。执行以下命令启用:

复制

$vm = Get-AzureVM -serviceName $serviceName -Name $vmname $vm.VM.ProvisionGuestAgent = $TRUE

Update-AzureVM -Name $name -VM $vm.VM -ServiceName $svc

在 VM Agent 工作正常的情况下,诊断扩展依旧安装不成功,则需要通过日志来排查问题。/var/log/waAgent.log是 VM Agent 的日志输出,日志中会记录所有的虚拟机通过 VM Agent 与 Azure 平台的交互。

Windows

查看 VM Agent 是否安装。

C:\WindowsAzure\Packages是否有 WaAppAgent 这个应用程序。若没有安装,请参考VM Agent 和扩展程序VM Agent 和扩展程序 - 第 2 部分进行安装和配置。

经典虚拟机需要同时检查 VM Agent 是否在虚拟机中启用,具体参见 Linux 部分问题排查)。

任务管理器中查看 WindowsAzureGuestAgent 是否运行。

若没有截图中的进程,说明 VM Agent 可能没有运行。点击C:\WindowsAzure\Packages中的应用程序WaAppAgent进行启动。

 

同时避免重启后 VM Agent 不会自动启动,在服务管理中查看该服务是否设置为自动启动。

 

若运行不正常,请提供以下日志以供排查:

复制

C:\WindowsAzure\Logs

C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\\*

关于 Windows VM agent 的更多信息,请参考Azure 虚拟机代理概述VM Agent 和扩展程序

检查诊断配置文件是否正确

通过门户配置的诊断扩展,平台会首先验证用户的输入,再给 VM Agent 发送标准的配置,因此扩展配置一般不会有问题。但有些用户可能希望使用 PowerShell 脚本来启用扩展,这样可以自定义一些需要保存的日志文件,或者添加删除某些性能指标;在这种情况下,若配置文件设置不当,很可能造成扩展安装成功,但工作不正常的情况。

通过查看扩展日志来找到原因:

Linux 中日志位于/var/log/azure/Microsoft.OSTCExtensions.LinuxDiagnostic//下面,extension.log 记录了所有的配置变更,以及错误信息。根据错误信息进行配置文件的修正,一般能解决大多数问题:如性能指标写的不对;存储账号密、SAS 配置错误等。

Windows 中日志位于C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\Status中。

如果在更新了 VM agent 版本,重启 Waagent 服务,甚至重启了虚拟机的情况下,安装扩展仍然出现问题,或者扩展仍然无法正常工作,请将下面日志打包提供:

复制

Linux:

/var/log/waagent.log

/var/log/azure/Microsoft.OSTCExtensions.LinuxDiagnostic//*

/var/lib/waagent/*.xml

Windows:

C:\WindowsAzure\Logs

C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\\*

检查存储账号是否有性能数据

若诊断扩展运行正常,则对应的存储账号中将会存在对应的存放性能数据的表。且表中会有虚拟机的性能数据存在。

使用 Microsoft Azure Storage Explorer 连接到存储账户,展开 Tables 检查表。用于存放性能数据的表以 WADMetrics 开头。根据存放的性能数据的时间频度,后跟 PT1M 或者 PT1H,分别代表过去一分钟和过去一小时。该表每 10 天会新建一个,因此,P10D 代表存最最多存放 10 天的数据。最后是表的版本和最新数据的时间段。如 WADMetricsPT1HP10DV2S20170510 代表该表存放的是 2017 年 05 月 10 日之后 10 天内的每小时的统计数据。

表中的数据,一行为某个虚拟机的某个时间点的单个性能指标的统计数据。其中记录了虚拟机名,时间戳,性能指标名称,时间范围内的采样次数,最大值,最小值,平均值,以及总量。

Note

对于不同的性能指标,并不是每一列都会用到。

在排查性能视图不可见的问题时,用户首先要明确的是什么时间段的数据不可见,然后找到对应的表,查看表中是否有虚拟机的对应时刻的性能指标记录。由于表中包含数以万计的实体,您可以使用 Microsoft Azure Storage Explorer 提供的过滤功能筛选结果,但由于单次下载到内存中的数据并不多,不一定能查到所需数据;在这种情况下,建议将表导出到本地 csv 文件中进行筛选。

如果表中确实没有对应的数据,则需要再次检查配置文件确认存储账号设置是否有误,或者数据上传是否有错。如果是上传错误,在 VM agent 的日志,或者扩展日志中将会有对应的记录。

 

检查订阅是否注册了 Microsoft.insights

通过以上步骤的排查,但数据依旧没有显示,则最大的可能性就是负责处理性能数据显示的资源提供程序 Microsoft.insights 没有注册,导致门户无法获取和处理数据。检查方法如下:

门户中搜索 Subscription。打开后点击对应的订阅,在 Resource Providers 边栏中查看 Microsoft.insights 是否是注册的状态。若没有注册,点击注册将其注册到订阅中。再回到虚拟机页面查看性能视图。

 

联系技术支持

如果上述所有操作都尝试过,但还是有问题,请收集下面信息提供给技术支持团队进行个案分析。

复制

Linux:

/var/log/waagent.log

/var/log/azure/Microsoft.OSTCExtensions.LinuxDiagnostic//*

/var/lib/waagent/*.xml

Windows:

C:\WindowsAzure\Logs

C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\\*

立即访问http://market.azure.cn

Azure 虚拟机诊断设置问题排查的更多相关文章

  1. 排查 Azure 虚拟机的远程桌面连接问题

    与基于 Windows 的 Azure 虚拟机 (VM) 的远程桌面协议 (RDP) 连接可能会因各种原因而失败,使用户无法访问 VM. 问题可能出在 VM 上的远程桌面服务.网络连接或主计算机上的远 ...

  2. 运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分

    本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向 ...

  3. Azure 虚拟机安全加固整理

    这篇文档不是原创,只是基于Azure官网上的Doc进行了相关链接的整理,从简单层面的安全设置,到更高层面的安全架构考量,以及Azure安全的白皮书及最佳实践,送给需要的你们,定有一款适合你! 做好数据 ...

  4. Azure Backup (3) 使用Azure备份服务,备份Azure虚拟机

    <Windows Azure Platform 系列文章目录> 本将介绍,如何使用Azure备份服务,备份Azure虚拟机. 我们先预先创建2台Windows VM (命名为LeiVM00 ...

  5. 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率

    一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的 ...

  6. Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机

    <Windows Azure Platform 系列文章目录> 本文介绍的是国外的Azure Global.如果是国内由世纪互联运维的Azure China,请参考这篇文档: Azure ...

  7. Windows Azure Virtual Machine (31) 迁移Azure虚拟机

    <Windows Azure Platform 系列文章目录> 为什么要写这篇Blog? 之前遇到过很多客户提问: (1)我之前创建的虚拟机,没有加入虚拟网络.现在需要重新加入虚拟机网络, ...

  8. Windows Azure Virtual Machine (33) Azure虚拟机删除重建

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的重建Azure虚拟机,必须在同一个订阅内删除重建,必须在同一个订阅内删除重建,必须在同一个订阅内删除重建. ...

  9. Windows Azure 虚拟机备份

    如果我们要在Windows Azure的虚拟机上进行一些“重要且高危”的操作,我们通常会想到使用快照或者备份功能.但是在Windows Azure上是没有虚拟机快照功能的,尽管我们可以对虚拟机的磁盘文 ...

随机推荐

  1. 详解C#委托和事件(二)

    一.当我们使用关键字delegate声明一个自定义委托类型时,实际上是声明了一个该名称的类类型,继承自抽象类System.MulticastDelegate,还包含实例方法Invoke.BeginIn ...

  2. 第三方登录:新浪微博登录(OAuth2.0)

    在<Github第三方登录--通用化的第三方登陆实现>中我们实现了一个通用化的第三方登录框架,其中包括OAUth的基本流程以及最简单的用户注册.但是不同的第三方登录因为其细节不同还是有很多 ...

  3. Linux 中计划任务-at-cron

    概念-计划任务:在某个时段自动执行某个任务  at:只执行一次 语法:at   时间 服务:atd   必须开启 如没有:yum install at -y 查看服务状态是否开启  systemctl ...

  4. xfsdump 备份文件系统

    实战:xfs 文件系统的备份和恢复 一.xfs 简单介绍. XFS  提供了 xfsdump  和  xfsrestore 工具协助备份 XFS 文件系统中的数据.xfsdump 按 inode顺序备 ...

  5. Maven 进阶

    一.Maven 版本管理 Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本> 开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆 ...

  6. 使用netfilter_queue改包笔记

    系统:centos 7 准备:安装libnetfilter_queue模块,可以yum安装,也可以网上下载rpm包安装 简介:使用iptables在NAT表上创建DNAT与SNAT规则,对数据包进行转 ...

  7. java RMI原理详解

    java本身提供了一种RPC框架——RMI(即Remote Method Invoke 远程方法调用),在编写一个接口需要作为远程调用时,都需要继承了Remote,Remote 接口用于标识其方法可以 ...

  8. 关于sublimeText3 设置格式化代码快捷键的问题

    sublime中自建的有格式化按钮: Edit  ->  Line  ->  Reindent 只是sublime并没有给他赋予快捷键,所以只需加上快捷键即可 Preference  -& ...

  9. vue2.0 移动端,下拉刷新,上拉加载更多 插件

    本人正在基于 vue2.0 + webpack + es6 搭建前端架构,整理了部分插件,下面这个是下拉更新 上拉更多的,挺好用的,分享给大家. 直接上代码,不懂的多看几遍,下面我换会告诉大家如何使用 ...

  10. Object.assign简单总结

    定义 Object.assign方法用来将源对象source的所有可枚举属性复制到目标对象target.至少需要两个对象作为参数,第一个参数为源对象,后面的均为目标对象.(以下用source代指源对象 ...