上一篇我们介绍了获取Azure的监控指标和监控数据:

http://www.cnblogs.com/teld/p/5113376.html

本篇我们继续:监控虚拟机的自定义性能计数器。

随着我们应用规模的扩张,几十上百的虚拟机运行在Azure上面,实时监控应用的运行情况是我们智能化运维的需要。因此,我们在应用的核心组件上添加了性能计数器,实时将运行数据记录到性能计数器上。

监控实时抓取虚拟机中性能计数器的数据。

在Google中搜一下Azure Monitor extension,找到几个有用的Link:

https://azure.microsoft.com/en-us/documentation/articles/vs-azure-tools-diagnostics-for-cloud-services-and-virtual-machines/

https://azure.microsoft.com/en-us/documentation/articles/cloud-services-dotnet-diagnostics/

第一个链接中图文并茂的说明了如何启用虚拟机监控的扩展以及监控性能技术器的数据:

微软的Blog资源果然牛逼,说的非常详细。

启动VS连接Azure,竟然找不到图中Azure的管理UI,细想一下也对,不是所有的VS使用者都需要操作Azure,这个Azure的管理UI应该是VS的一个Plugin。

咨询了搞大数据的朱哥,发给我一个在线安装程序:选择安装Microsoft Azure SDK for .net(VS 2015)-2.8.1

安装完成后,Azure的管理菜单出来了,然后选择要监控的虚拟机,添加Microsoft Monitoring Agent Diagnostics,Configure,监控自定义性能计数器,然后保存:

重新刷新后,扩展启用报错了:

错误信息:Microsoft.Azure.Diagnostics.IaaSDiagnostics, version 1.4.2.1) with exception Command C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.4.2.1\DiagnosticsPluginLauncher.exe of Microsoft.Azure.Diagnostics.IaaSDiagnostics has exited with code -3

在虚拟机中的C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.4.2.1\Logs中,找下了更多的错误信息:

DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] Checking VM Type
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] File HandlerEnvironment.json found. Extension set to IAAS
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] RcfFileName: C:\WindowsAzure\Config\ac5e6303019644418a08571783b4a103.ac5e6303019644418a08571783b4a103.teldptapp.16.xml
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] RoleInstanceId: teldptapp; DeploymentId: ac5e6303019644418a08571783b4a103; RoleName: teldptapp
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] Config file found: C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.4.2.1\RuntimeSettings\13.settings
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] Loading config file: C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.4.2.1\RuntimeSettings\13.settings
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:41] Reading JSON configuration file
DiagnosticsPluginLauncher.exe Error: 0 : [2016/1/7 7:35:41] System.ArgumentNullException: 值不能为 null。
参数名: s
   在 System.Convert.FromBase64String(String s)
   在 Microsoft.Azure.Plugins.Diagnostics.dll.PublicSettings.get_XmlCfg()
   在 Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.LoadWadJSONConfig(String fullConfig)
   在 Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.LoadWad2Config()
   在 Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.Initialize()
DiagnosticsPluginLauncher.exe Error: 0 : [2016/1/7 7:35:41] Failed to read configuration.
DiagnosticsPluginLauncher.exe Information: 0 : [2016/1/7 7:35:49] DiagnosticPlugin exited with code -3

这个错误,搜索、调试了半天,未找到解决方案,同时咨询了微软的工程师,也未回复。

此时,重新读了第二个链接中的文章内容,通过Powershell启用监控扩展。尝试一下:

启动Powshell ISE,连接Azure之前,导入.publishsettings文件,这样才可以用你的订阅连接Azure。

安装第二个链接的内容,一步一步,执行PowerShell以下命令:

$storage_name = "monitorstorage"
$key = "nd7QMydWNFNuROfe********ADsasdasdfafs8*****=="
$config_path="C:\Users\Administrator\Documents\Visual Studio 2015\Projects\WadExampleVM\WadExampleVM\WadExample.xml"
$service_name="AzureAVS01"
$vm_name="AzureAVS02"
$storageContext = New-AzureStorageContext -StorageAccountName $storage_name -StorageAccountKey $key
$VM1 = Get-AzureVM -ServiceName $service_name -Name $vm_name
$VM2 = Set-AzureVMDiagnosticsExtension -DiagnosticsConfigurationPath $config_path -Version "1.*" -VM $VM1 -StorageContext $storageContext
$VM3 = Update-AzureVM -ServiceName $service_name -Name $vm_name -VM $VM2.VM

竟然ok了,牛逼。

性能计数器的数据写到了Storage-Table-WADPerformanceCountersTable

VS中不能启用监控扩展,PowerShell可以,说不通,我们还是相信微软的产品质量的。

继续研读第二个链接的内容:在Troubleshooting章节,仔细读了Exit -3 和 -106的说明;

https://azure.microsoft.com/en-us/documentation/articles/cloud-services-dotnet-diagnostics/

然后到虚拟机上找到了 %SystemDrive%\WindowsAzure\Config 配置文件:e8e74c36fae542b5bdcc88e20dd0a4c6.e8e74c36fae542b5bdcc88e20dd0a4c6.AzureAVS01.1.xml

找到了xmlCfg节的内容,

PFdhZENmZz48RGlhZ25vc3RpY01vbml0b3JDb25maWd1cmF0aW9uIG92ZXJhbGxRdW90YUluTUI9IjI1MDAwIj4NCiAgICAgIDxQZXJmb3JtYW5jZUNvdW50ZXJzIHNjaGVkdWxlZFRyYW5zZmVyUGVyaW9kPSJQVDFNIj4NCiAgICAgICAgPFBlcmZvcm1hbmNlQ291bnRlckNvbmZpZ3VyYXRpb24gY291bnRlclNwZWNpZmllcj0iXFByb2Nlc3NvcihfVG90YWwpXCUgUHJvY2Vzc29yIFRpbWUiIHNhbXBsZVJhdGU9IlBUMU0iIHVuaXQ9InBlcmNlbnQiIC8+DQogICAgICAgIDxQZXJmb3JtYW5jZUNvdW50ZXJDb25maWd1cmF0aW9uIGNvdW50ZXJTcGVjaWZpZXI9IlxNZW1vcnlcQ29tbWl0dGVkIEJ5dGVzIiBzYW1wbGVSYXRlPSJQVDFNIiB1bml0PSJieXRlcyIgLz4NCiAgICAgIDwvUGVyZm9ybWFuY2VDb3VudGVycz4NCiAgICAgIDxFdHdQcm92aWRlcnM+DQogICAgICAgIDxFdHdFdmVudFNvdXJjZVByb3ZpZGVyQ29uZmlndXJhdGlvbiBwcm92aWRlcj0iU2FtcGxlRXZlbnRTb3VyY2VXcml0ZXIiIHNjaGVkdWxlZFRyYW5zZmVyUGVyaW9kPSJQVDVNIj4NCiAgICAgICAgICA8RXZlbnQgaWQ9IjEiIGV2ZW50RGVzdGluYXRpb249IkVudW1zVGFibGUiIC8+DQogICAgICAgICAgPEV2ZW50IGlkPSIyIiBldmVudERlc3RpbmF0aW9uPSJNZXNzYWdlVGFibGUiIC8+DQogICAgICAgICAgPEV2ZW50IGlkPSIzIiBldmVudERlc3RpbmF0aW9uPSJTZXRPdGhlclRhYmxlIiAvPg0KICAgICAgICAgIDxFdmVudCBpZD0iNCIgZXZlbnREZXN0aW5hdGlvbj0iSGlnaEZyZXFUYWJsZSIgLz4NCiAgICAgICAgICA8RGVmYXVsdEV2ZW50cyBldmVudERlc3RpbmF0aW9uPSJEZWZhdWx0VGFibGUiIC8+DQogICAgICAgIDwvRXR3RXZlbnRTb3VyY2VQcm92aWRlckNvbmZpZ3VyYXRpb24+DQogICAgICA8L0V0d1Byb3ZpZGVycz4NCiAgICA8L0RpYWdub3N0aWNNb25pdG9yQ29uZmlndXJhdGlvbj48RGlhZ25vc3RpY01vbml0b3JDb25maWd1cmF0aW9uIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NlcnZpY2VIb3N0aW5nLzIwMTAvMTAvRGlhZ25vc3RpY3NDb25maWd1cmF0aW9uIj48UGVyZm9ybWFuY2VDb3VudGVycz48UGVyZm9ybWFuY2VDb3VudGVyQ29uZmlndXJhdGlvbiBjb3VudGVyU3BlY2lmaWVyPSJcUHJvY2Vzc29yKF9Ub3RhbClcJSBQcm9jZXNzb3IgVGltZSIgc2FtcGxlUmF0ZT0iUFQwUyIgLz48UGVyZm9ybWFuY2VDb3VudGVyQ29uZmlndXJhdGlvbiBjb3VudGVyU3BlY2lmaWVyPSJcTWVtb3J5XEF2YWlsYWJsZSBNQnl0ZXMiIHNhbXBsZVJhdGU9IlBUMFMiIC8+PFBlcmZvcm1hbmNlQ291bnRlckNvbmZpZ3VyYXRpb24gY291bnRlclNwZWNpZmllcj0iXE1lbW9yeVxDb21taXR0ZWQgQnl0ZXMiIHNhbXBsZVJhdGU9IlBUMFMiIC8+PC9QZXJmb3JtYW5jZUNvdW50ZXJzPjwvRGlhZ25vc3RpY01vbml0b3JDb25maWd1cmF0aW9uPjwvV2FkQ2ZnPg==

base64转码后是

<WadCfg><DiagnosticMonitorConfiguration overallQuotaInMB="25000">
      <PerformanceCounters scheduledTransferPeriod="PT1M">
        <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT1M" unit="percent" />
        <PerformanceCounterConfiguration counterSpecifier="\Memory\Committed Bytes" sampleRate="PT1M" unit="bytes" />
      </PerformanceCounters>
      <EtwProviders>
        <EtwEventSourceProviderConfiguration provider="SampleEventSourceWriter" scheduledTransferPeriod="PT5M">
          <Event id="1" eventDestination="EnumsTable" />
          <Event id="2" eventDestination="MessageTable" />
          <Event id="3" eventDestination="SetOtherTable" />
          <Event id="4" eventDestination="HighFreqTable" />
          <DefaultEvents eventDestination="DefaultTable" />
        </EtwEventSourceProviderConfiguration>
      </EtwProviders>
    </DiagnosticMonitorConfiguration><DiagnosticMonitorConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration"><PerformanceCounters><PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT0S" /><PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT0S" /><PerformanceCounterConfiguration counterSpecifier="\Memory\Committed Bytes" sampleRate="PT0S" /></PerformanceCounters></DiagnosticMonitorConfiguration></WadCfg>

这个不是在Powershell指定的XML文件的内容吗!

然后对比了通过VS启用扩展的虚拟机之监控扩展的配置文件:

{"WadCfg":{"DiagnosticMonitorConfiguration":{"PerformanceCounters":{"PerformanceCounterConfiguration":[{"annotation":[],"counterSpecifier":"\\Memory\\Available MBytes","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\Web Service(_Total)\\ISAPI Extension Requests/sec","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\Web Service(_Total)\\Bytes Total/Sec","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\ASP.NET Applications(__Total__)\\Requests/Sec","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\ASP.NET Applications(__Total__)\\Errors Total/Sec","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\ASP.NET\\Requests Queued","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\ASP.NET\\Requests Rejected","sampleRate":"PT3M"},{"annotation":[],"counterSpecifier":"\\Processor(_Total)\\% Processor Time","sampleRate":"PT3M"}],"scheduledTransferPeriod":"PT1M"},"overallQuotaInMB":4096}}

靠,这个竟然是JSON。

大致想通了:

Powershell中指定XML文件是ok的,VS中Azure管理插件启用监控扩展失败。

不同的客户端发的请求不同,应该是Azure管理工具的问题,记得安装的版本是2.8.1,最新的。

朱哥机器上看了以下是2.7,最新版本的Azure Tool是面向最新的Azure的,中国区的应该滞后一点。

因此,将本机2.8版本全部卸载,安装2.7版本:

https://www.microsoft.com/en-us/download/details.aspx?id=48178

基于2.7这个版本的Azure管理工具启用虚拟机监控扩展,OK。

本文希望能帮忙在中国搞Azure的小伙伴,也是对Azure的技术支持。

下一篇我们继续AutoScale的话题。

探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据的更多相关文章

  1. [博客迁移]探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据

    上一篇我们介绍了获取Azure的监控指标和监控数据: http://www.cnblogs.com/teld/p/5113376.html 本篇我们继续:监控虚拟机的自定义性能计数器. 随着我们应用规 ...

  2. 探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure

    最近准备基于Microsoft Azure Management Libraries 实现虚拟机的监控.主要的需求就是获取虚拟机内置的性能计数器数据,基于性能计数器实现后续的监控和自动伸缩. 作为这一 ...

  3. [博客迁移]探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure

    最近准备基于Microsoft Azure Management Libraries 实现虚拟机的监控.主要的需求就是获取虚拟机内置的性能计数器数据,基于性能计数器实现后续的监控和自动伸缩. 作为这一 ...

  4. 探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据

    上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...

  5. [博客迁移]探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据

    上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...

  6. 探索 Windows Azure 网站中的自动伸缩功能

     去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...

  7. Windows Azure 自动伸缩已内置

     WindowsAzure平台提供的主要优点之一是能够在有需要时快速缩放云中的应用程序以响应波动.去年7月以前,您必须编写自定义脚本或使用其他工具(如Wasabi或MetricsHub)来启用自动 ...

  8. Kubernetes自动伸缩pod-HPA

    在运维中,虽然能预先知道负载何时会飙升,或者如果负载的变化是较长时间内逐渐发生的,手动扩容也是可以接受的,但指望靠人工干预来处理突发而不可预测的流量增长,仍然不够理想. 幸运的是,Kubernetes ...

  9. 基于Prometheus,Alermanager实现Kubernetes自动伸缩

    到目前为止Kubernetes对基于cpu使用率的水平pod自动伸缩支持比较良好,但根据自定义metrics的HPA支持并不完善,并且使用起来也不方便. 下面介绍一个基于Prometheus和Aler ...

随机推荐

  1. 怎样在Linux下通过ldapsearch查询活动文件夹的内容

    从Win2000開始.微软抛弃NT域而採用活动文件夹来管理Windows域.而活动文件夹就是微软基于遵守LDAP协议的文件夹服务.假设用扫描器扫描的话能够发现活动文件夹的389port是打开的.并且微 ...

  2. 前后端分离Web项目中,RBAC实现的研究

    在前后端分离Web项目中,RBAC实现的研究   最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...

  3. 优秀Java程序员必须了解的GC工作原理(转)

    一个优秀的Java程序员必须了解GC(Garbage Collection 垃圾收集)的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系 ...

  4. Android的PackageManager的使用

    Android系统提供了很多服务管理的类,包括ActivityManager.PowerManager(电源管理).AudioManager(音频管理)以及PackageManager管理类.Pack ...

  5. Oracle表空间详解

    Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...

  6. Javascrpt 页面工具

    /**  *  笔者:DL  *  时间:2014-3-19   * PagingTool模块提供最基本的.网页工具栏.和页面数据 回电话 可扩展性 分页工具栏介绍,和页面呈现的数据   *   主意 ...

  7. 不用Root权限获取已经安装的Apk安装包

    在安卓设备上安装的apk都会被保留一份在/data/app目录下,但是该目录对于普通用户来说只有可执行权限,是无法访问的. 但是其子文件具有可读权限. 意思也就说我们直接去查看/data/app这个目 ...

  8. Storm具体解释一、Storm 概述

    一.Storm概述      Storm是一个分布式的.可靠的.零失误的流式数据处理系统. 它的工作就是委派各种组件分别独立的处理一些简单任务.在Storm集群中处理输入流的是Spout组件,而Spo ...

  9. New Hire Training Experience

    Game Description: 1. In a closed door, there will be a circle, and 30 numbers in the circle. 2. Each ...

  10. Learning To Rank之LambdaMART前世今生

    1.       前言 我们知道排序在非常多应用场景中属于一个非常核心的模块.最直接的应用就是搜索引擎.当用户提交一个query.搜索引擎会召回非常多文档,然后依据文档与query以及用户的相关程度对 ...