在azure WADMetric表中唯一识别linux vms

时间:2017-04-07 21:52:31

标签: azure azure-diagnostics

我们正在用c ++开发软件,以从天蓝色的WADMetrics表中检索linux网络信息。我们目前正在使用Azure rest apis。

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

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

如果Host值跨机器重复,有没有办法识别虚拟机数据?

谢谢, 彼得

1 个答案:

答案 0 :(得分:0)

这些表中不存在部署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。