0

我扩展了 azure github repo 中给出的示例,以获取在 MS Azure 上运行的虚拟机的示例。如果我不提供任何过滤参数,它会返回 CPU 百分比的度量值。现在,如果我为过滤提供任何值,它不会考虑它,并且仍然只返回 CPU 百分比的样本。我正在关注这个以获得结果。这是我正在使用的红宝石代码。请检查一次

#!/usr/bin/env ruby
require 'open-uri'
require 'pp'
require 'typhoeus'
require 'azure_mgmt_resources'

def print_item(group)
  puts "\tName: #{group.name}"
  puts "\tId: #{group.id}"
  puts "\tLocation: #{group.location}"
  puts "\tTags: #{group.tags}"
  puts "\tType: #{group.type}" if group.respond_to? :type
  print_properties(group.properties)
end

def print_properties(props)
  puts "\tProperties:"
  props.instance_variables.sort.each do |ivar|
    str = ivar.to_s.gsub /^@/, ''
    if props.respond_to? str.to_sym
      puts "\t\t#{str}: #{props.send(str.to_sym)}"
    end
  end
  puts "\n\n"
end

subscription_id = "SUB_ID"
provider = MsRestAzure::ApplicationTokenProvider.new(
  'TENANT_ID'
  'CLIENT_ID',
  'CLIENT_SECRET')
credentials = MsRest::TokenCredentials.new(provider)
client = Azure::ARM::Resources::ResourceManagementClient.new(credentials)
client.subscription_id = subscription_id

headers = {'Content-Type'=> 'application/json', 'Authorization'=> provider.get_authentication_header }
resp = Typhoeus::Request.get('https://management.azure.com/subscriptions?api-version=2015-01-01', headers: headers)

metric_definitions_api = "https://management.azure.com__RESOURCE__/providers/microsoft.insights/metricDefinitions?api-version=2016-03-01"
metrics_samples_api = "https://management.azure.com__RESOURCE__/providers/microsoft.insights/metrics?api-version=2016-09-01"
JSON.parse(resp.body)["value"].each do |subscriptions|
  puts "Subscription id : #{subscriptions["subscriptionId"]}"
  client.subscription_id = subscriptions["subscriptionId"]
  puts 'List Resource Groups'

  client.resource_groups.list.each do
    |group| print_item(group)
    puts 'List all of the resources within the group'
    client.resource_groups.list_resources(group.name).each do |resource|
      if resource.type == 'Microsoft.Compute/virtualMachines'
        print_item(resource)

        metric_definitions_api = metric_definitions_api.sub('__RESOURCE__', resource.id)
        resp = Typhoeus::Request.get(metric_definitions_api, headers: headers)
        puts "Definitions :"
        pp JSON.parse(resp.body)

        metrics_samples_api = metrics_samples_api.sub('__RESOURCE__', resource.id)

        JSON.parse(resp.body)['value'].each do |val|
          filter = "&(name.value eq '#{val["name"]["value"]}')"
          resp = Typhoeus::Request.get( URI::encode(metrics_samples_api + filter), headers: headers)
          puts "Samples : #{metrics_samples_api + filter}"
          pp JSON.parse(resp.body)["value"][0]["data"][0..4] # Return first 5 samples
          puts "\n"
        end

      end
    end
  end
end
4

2 回答 2

0

这似乎是一个简单的 GET 请求,尝试设置filter如下

filter = "&name=#{val['name']['value']}"

或者

filter = "&name.value=#{val['name']['value']}"
于 2017-06-13T14:36:02.273 回答
0

您使用的指标 API 版本用于访问来自 Azure Monitor 管道的指标——您可以在此处查看完整列表:https ://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/监控支持的指标

对于其他 VM 指标,您需要安装代理并使用表存储 API 来访问数据:https ://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/azure-diagnostics

于 2017-07-12T19:27:12.000 回答