在azure WADMetric表中唯一标识linux虚拟机 我们正在开发C++软件,从Azure WADeMealths表中检索Linux网络信息。我们目前正在为此使用Azure rest API
然而,我们的问题是WADMetric表可以包含多个VM的数据,并且我们目前只知道主机值。这映射到来宾中的主机名,可能不是唯一的 表中的deploymentid看起来确实是唯一标识机器的,但似乎没有办法通过RESTAPI来实现这一点 如果主机值跨多台计算机复制,是否有任何方法可以识别虚拟机数据 谢谢,在azure WADMetric表中唯一标识linux虚拟机 我们正在开发C++软件,从Azure WADeMealths表中检索Linux网络信息。我们目前正在为此使用Azure rest API,azure,azure-diagnostics,Azure,Azure Diagnostics,然而,我们的问题是WADMetric表可以包含多个VM的数据,并且我们目前只知道主机值。这映射到来宾中的主机名,可能不是唯一的 表中的deploymentid看起来确实是唯一标识机器的,但似乎没有办法通过RESTAPI来实现这一点 如果主机值跨多台计算机复制,是否有任何方法可以识别虚拟机数据 谢谢, Peter这些表中不存在部署id 所有Azure资源都由其Azure资源管理器(ARM)资源id标识。此值来自Windows Azure诊断(WAD)或Linux诊断扩展(LDE)VM扩展配置中的用
Peter这些表中不存在部署id 所有Azure资源都由其Azure资源管理器(ARM)资源id标识。此值来自Windows Azure诊断(WAD)或Linux诊断扩展(LDE)VM扩展配置中的用户输入。如果对{resourceId}执行GET,则可以看到此值 PartitionKey设置为VM的编码ARM资源id PartitionKey=EscapeKey(ARM资源id)
私有静态字符串转义符(字符)
{
变量序号值=(ushort)字符;
if(序数值<0x100)
{
返回string.Format(CultureInfo.InvariantCulture,“:{0:X2}”,序号值);
}
否则
{
返回string.Format(CultureInfo.InvariantCulture,“:{0:X4}”,序号值);
}
}
公共静态字符串转义键(字符串存储键)
{
StringBuilder escapedStorageKey=新的StringBuilder(storageKey.Length);
foreach(storageKey中的字符c)
{
if(!char.isleterordigit(c))
{
escapedStorageKey.Append(EscapeStorageCharacter(c));
}
否则
{
escapedStorageKey.Append(c);
}
}
返回escapedStorageKey.ToString();
}
Wrt RowKey,每个度量值为两个不同的索引写入两次:
1) [EncodedMetricName]\uuu[UTCTicks\u下降顺序]
2) [UTCTicks\u下降顺序]\uuuu[EncodedMetricName]
其中,UTCTicks\u下降顺序是DateTime.MaxValue.Ticks-DateTime.UtcNow.Ticks填充到19位
如果您试图按时间读回所有度量数据,则应使用索引#2。您能否共享您在PartitionKey/RowKey中看到的示例值?分区键应编码VMS的ARM资源id。这是一个示例分区键
002F订阅:002F:002F资源组:002F:002F提供程序:002F Microsoft:002E计算:002F虚拟机:002F
示例行键2519169143999999\UUUU5Memory:005AvailableMemory
因此分区键中似乎有可能有用的数据。我在这些表中确实看到了deploymentid,我唯一能看到他们的地方就是桌子上。他们似乎不在别的地方。对于PartitionKey值,您知道关于编码是什么的任何文档吗?不幸的是,我不知道有任何关于此的外部文档,但我用代码片段更新了答案。这是一篇非常古老的文章。如果您试图收集来宾度量,我的建议是将它们作为自定义度量发送到Azure Monitor,然后您将能够直接从Azure Monitor metrics REST API查询度量。将度量放入Azure表存储有很多限制,自定义度量对表存储没有任何依赖性
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();
}