Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在azure WADMetric表中唯一标识linux虚拟机 我们正在开发C++软件,从Azure WADeMealths表中检索Linux网络信息。我们目前正在为此使用Azure rest API_Azure_Azure Diagnostics - Fatal编程技术网

在azure WADMetric表中唯一标识linux虚拟机 我们正在开发C++软件,从Azure WADeMealths表中检索Linux网络信息。我们目前正在为此使用Azure rest API

在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扩展配置中的用

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

表中的deploymentid看起来确实是唯一标识机器的,但似乎没有办法通过RESTAPI来实现这一点

如果主机值跨多台计算机复制,是否有任何方法可以识别虚拟机数据

谢谢,
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();
}