【问题标题】:Uniquely identifying linux vms in azure WADMetric tables在 azure WADMetric 表中唯一标识 linux vm
【发布时间】:2019-10-24 18:26:08
【问题描述】:

我们正在用 c++ 开发软件,以从 azure WADMetrics 表中检索 linux 网络信息。我们目前正在为此使用 Azure rest api。

但是我们遇到的问题是 WADMetric 表可以包含多个虚拟机的数据,而我们目前只知道主机值。这映射到来宾中的主机名,并且它可能不是唯一的。

表中的 deploymentid 看起来确实可以唯一标识机器,但似乎没有办法通过 REST api 获取它。

如果主机值跨机器重复,有什么方法可以识别虚拟机数据?

谢谢, 彼得

【问题讨论】:

  • 您能分享您看到的 PartitionKey / RowKey 的示例值吗?分区键应编码 VM 的 ARM 资源 ID
  • 这是一个示例 PartitionKey。 002Fsubscriptions:002F<subscriptionid>:002FresourceGroups:002F<resourcegroupname>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmname> 一个示例行键 2519106914399999999__:005CMemory: 005CAvailableMemory 所以看起来 PartitionKey 中有可能有用的数据。

标签: azure azure-diagnostics


【解决方案1】:

这些表中不存在部署 ID。

所有 Azure 资源均由其 Azure 资源管理器 (ARM) 资源 ID 标识。此值来自 Windows Azure 诊断 (WAD) 或 Linux 诊断扩展 (LDE) VM 扩展配置中的用户输入。如果您对 https://management.azure.com/{resourceId}

执行 GET,则可以看到此值

PartitionKey 设置为 VM 的编码 ARM 资源 ID。

PartitionKey = EscapeKey (ARM 资源 ID)

private static string EscapeStorageCharacter(char character)
{

    var ordinalValue = (ushort)character;
    if (ordinalValue < 0x100)
    {
        return string.Format(CultureInfo.InvariantCulture, ":{0:X2}", ordinalValue);
    }
    else
    {
        return string.Format(CultureInfo.InvariantCulture, "::{0:X4}", ordinalValue);
    }
}

public static string EscapeKey(string storageKey)
{
    StringBuilder escapedStorageKey = new StringBuilder(storageKey.Length);
    foreach (char c in storageKey)
    {
        if (!char.IsLetterOrDigit(c))
        {
            escapedStorageKey.Append(EscapeStorageCharacter(c));
        }
        else
        {
            escapedStorageKey.Append(c);
        }
    }
 
    return escapedStorageKey.ToString();
}

Wrt RowKey,每个指标值针对两个不同的索引写入两次:

1) [EncodedMetricName]__[UTCTicks_DescendingOrder]

2) [UTCTicks_DescendingOrder]__[EncodedMetricName]

其中 UTCTicks_DescendingOrder 是 DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks 填充为 19 位数字。

如果您尝试按时间回读所有指标数据,则应使用索引 #2。

【讨论】:

  • 我实际上确实在这些表中看到了一个部署ID,而我看到它们的唯一地方只是在表中。他们似乎不在其他任何地方。对于 PartitionKey 值,您知道有关编码是什么的任何文档吗?
  • 不幸的是,我不知道有任何外部文档,但我用 coden-p 更新了答案
  • 这是一篇很老的帖子。如果您尝试收集来宾指标,我的建议是将它们作为自定义指标发送到 Azure Monitor,然后您将能够直接从 Azure Monitor Metrics REST API 查询指标。将指标放入 Azure 表存储有很多限制,自定义指标对表存储没有任何依赖关系docs.microsoft.com/en-us/azure/azure-monitor/platform/…
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多