我们正在用c ++开发软件,以从天蓝色的WADMetrics表中检索linux网络信息。我们目前正在使用Azure rest apis。
但是我们遇到的问题是WADMetric表可以包含多个vms的数据,我们目前只知道Host值。这将映射到guest虚拟机中的主机名,并且它可能不是唯一的。
表中的deploymentid看起来确实是唯一标识机器的,但似乎没有办法通过REST api获取它。
如果Host值跨机器重复,有没有办法识别虚拟机数据?
谢谢, 彼得
答案 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。