Azure 实例元数据服务提供有关可用于管理和配置虚拟机的正在运行的虚拟机实例的信息。 这包括 SKU、网络配置和即将发生的维护事件等信息。 若要详细了解可用信息类型,请参阅元数据类别

Azure 的实例元数据服务是一个 REST 终结点,所有创建的 IaaS VM 可通过 Azure Resource Manager 访问此终结点。 该终结点位于已知不可路由的 IP 地址 (169.254.169.254),该地址只能从 VM 中访问。

Important

此服务在所有 Azure 区域中提供有正式版。 它会定期接收更新,发布有关虚拟机实例的新信息。 此页反映了最新可用的数据类别

服务可用性

此服务在所有 Azure 区域中提供有可用的正式版。 并非所有 API 版本在所有 Azure 区域中可用。

区域 可用性? 支持的版本
全球所有公开上市的 Azure 区域 正式版 2017-04-02, 2017-08-01
Azure 美国政府 正式版 2017-04-02
Azure 中国 正式版 2017-04-02
Azure 德国 正式版 2017-04-02

当有服务更新和/或有可用的新支持版本时,此表将更新

若要试用实例元数据服务,请在上述区域中从 Azure 资源管理器或 Azure 门户创建一个 VM,并按照以下示例操作。

使用情况

版本控制

已对实例元数据服务进行了版本控制。 版本是必需的,全局 Azure 上的当前版本为 2017-08-01。 当前支持的版本为(2017-04-02、2017-08-01)

Note

支持的计划事件的前一预览版 {latest} 发布为 api-version。 此格式不再受支持,并且将在未来弃用。

添加更新的版本时,早期版本仍可供访问以保持兼容性(如果脚本依赖于特定的数据格式)。 但是请注意,在服务正式发布之后,先前的预览版本 (2017-03-01) 可能不再可用。

使用标头

查询实例元数据服务时,必须提供标头 Metadata: true 以确保不会意外重定向请求。

检索元数据

实例元数据可用于运行使用 Azure Resource Manager 创建/管理的 VM。 使用以下请求访问虚拟机实例的所有数据类别:

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-04-02"

Note

所有实例元数据查询都区分大小写。

数据输出

默认情况下,实例元数据服务会返回 JSON 格式的数据 (Content-Type: application/json)。 但是,如果提出请求,不同 API 可以其他格式返回数据。 下表是有关 API 可支持的其他数据格式的参考。

API 默认数据格式 其他格式
/instance json text
/scheduledevents json

若要访问非默认响应格式,在请求中将所请求格式指定为查询字符串参数。 例如:

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-04-02&format=text"

“安全”

此实例元数据服务终结点只能从不可路由的 IP 地址上正在运行的虚拟机实例中访问。 此外,任何包含X-Forwarded-For标头的请求都会被服务拒绝。 还要求请求包含 Metadata: true 标头以确保实际请求是直接计划好的,不属于意外重定向。

错误

如果找不到某个数据元素,或者请求的格式不正确,则实例元数据服务返回标准 HTTP 错误。 例如:

HTTP 状态代码 原因
200 正常  
400 错误的请求 缺少 Metadata: true 标头
404 未找到 请求的元素不存在
不允许 405 方法 仅支持 GET 和 POST 请求
429 请求次数过多 该 API 当前支持每秒最多 5 个查询
500 服务错误 请稍后重试

示例

Note

所有 API 响应都是 JSON 字符串。 以下所有响应示例都以美观的形式输出以提高可读性。

检索网络信息

请求

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance/network?api-version=2017-08-01"

响应

Note

此响应是 JSON 字符串。 以下响应示例以美观的形式输出以提高可读性。

复制
{
"interface": [
{
"ipv4": {
"ipAddress": [
{
"privateIpAddress": "10.1.0.4",
"publicIpAddress": "X.X.X.X"
}
],
"subnet": [
{
"address": "10.1.0.0",
"prefix": "24"
}
]
},
"ipv6": {
"ipAddress": []
},
"macAddress": "000D3AF806EC"
}
]
}

检索公共 IP 地址

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text"

检索实例的所有元数据

请求

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-08-01"

响应

Note

此响应是 JSON 字符串。 以下响应示例以美观的形式输出以提高可读性。

复制
{
"compute": {
"location": "chinanorth",
"name": "avset2",
"offer": "UbuntuServer",
"osType": "Linux",
"placementGroupId": "",
"platformFaultDomain": "1",
"platformUpdateDomain": "1",
"publisher": "Canonical",
"resourceGroupName": "myrg",
"sku": "16.04-LTS",
"subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"tags": "",
"version": "16.04.201708030",
"vmId": "13f56399-bd52-4150-9748-7190aae1ff21",
"vmSize": "Standard_D1"
},
"network": {
"interface": [
{
"ipv4": {
"ipAddress": [
{
"privateIpAddress": "10.1.2.5",
"publicIpAddress": "X.X.X.X"
}
],
"subnet": [
{
"address": "10.1.2.0",
"prefix": "24"
}
]
},
"ipv6": {
"ipAddress": []
},
"macAddress": "000D3A36DDED"
}
]
}
}

在 Windows 虚拟机中检索元数据

请求

可以通过 Powershell 实用工具 curl 在 Windows 中检索实例元数据:

复制
curl -H @{'Metadata'='true'} http://169.254.169.254/metadata/instance?api-version=2017-04-02 | select -ExpandProperty Content

或通过 Invoke-RestMethodcmdlet:

复制
Invoke-RestMethod -Headers @{"Metadata"="true"} -URI http://169.254.169.254/metadata/instance?api-version=2017-04-02 -Method get

响应

Note

此响应是 JSON 字符串。 以下响应示例以美观的形式输出以提高可读性。

复制
{
"compute": {
"location": "chinanorth",
"name": "SQLTest",
"offer": "SQL2016SP1-WS2016",
"osType": "Windows",
"platformFaultDomain": "0",
"platformUpdateDomain": "0",
"publisher": "MicrosoftSQLServer",
"sku": "Enterprise",
"version": "13.0.400110",
"vmId": "453945c8-3923-4366-b2d3-ea4c80e9b70e",
"vmSize": "Standard_DS2"
},
"network": {
"interface": [
{
"ipv4": {
"ipAddress": [
{
"privateIpAddress": "10.0.1.4",
"publicIpAddress": "X.X.X.X"
}
],
"subnet": [
{
"address": "10.0.1.0",
"prefix": "24"
}
]
},
"ipv6": {
"ipAddress": [ ]
},
"macAddress": "002248020E1E"
}
]
}
}

实例元数据数据类别

可通过实例元数据服务获取以下数据类别:

数据 说明 引入的版本
location VM 在其中运行的 Azure 区域 2017-04-02
name VM 的名称 2017-04-02
offer 为 VM 映像提供信息。 此值只适用于 Azure 映像库中部署的图像。 2017-04-02
publisher VM 映像的发布者 2017-04-02
sku VM 映像的特定 SKU 2017-04-02
version VM 映像的版本 2017-04-02
osType Linux 或 Windows 2017-04-02
platformUpdateDomain 正在运行 VM 的更新域 2017-04-02
platformFaultDomain 正在运行 VM 的容错域 2017-04-02
vmId VM 的唯一标识符 2017-04-02
vmSize VM 大小 2017-04-02
subscriptionId 虚拟机的 Azure 订阅 2017-08-01
tags 虚拟机的标记 2017-08-01
resourceGroupName 虚拟机的资源组 2017-08-01
placementGroupId 虚拟机规模集的放置组 2017-08-01
ipv4/privateIpAddress VM 的本地 IPv4 地址 2017-04-02
ipv4/publicIpAddress VM 的公共 IPv4 地址 2017-04-02
subnet/address VM 的子网地址 2017-04-02
subnet/prefix 子网前缀,例如 24 2017-04-02
macAddress VM mac 地址 2017-04-02
scheduledevents 当前在公共预览版中提供。请参阅 scheduledevents 2017-03-01

用法的示例方案

跟踪 Azure 上正在运行的 VM

作为服务提供商,可能需要跟踪运行软件的 VM 数目,或者代理需要跟踪 VM 的唯一性。 为了能够获取 VM 的唯一 ID,请使用实例元数据服务中的 vmId 字段。

请求

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-04-02&format=text"

响应

复制
5c08b38e-4d57-4c23-ac45-aca61037f084

基于容错/更新域放置容器、数据分区

对于某些方案,不同数据副本的放置至关重要。 例如,对于 HDFS 副本放置或者对于通过 orchestrator 放置容器,可能需要知道正在运行 VM 的 platformFaultDomain 和 platformUpdateDomain。 可以直接通过实例元数据服务查询此数据。

请求

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/platformFaultDomain?api-version=2017-04-02&format=text"

响应

复制
0

在支持案例期间获取有关 VM 的详细信息

作为服务提供商,你可能会接到支持电话,了解有关 VM 的详细信息。 请求客户共享计算元数据可以提供基本信息,以支持专业人员了解有关 Azure 上的 VM 类型。

请求

复制
curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute?api-version=2017-04-02"

响应

Note

此响应是 JSON 字符串。 以下响应示例以美观的形式输出以提高可读性。

复制
{
"compute": {
"location": "chinanorth",
"name": "IMDSCanary",
"offer": "RHEL",
"osType": "Linux",
"platformFaultDomain": "0",
"platformUpdateDomain": "0",
"publisher": "RedHat",
"sku": "7.2",
"version": "7.2.20161026",
"vmId": "5c08b38e-4d57-4c23-ac45-aca61037f084",
"vmSize": "Standard_DS2"
}
}

使用 VM 中的不同语言调用元数据服务的示例

语言 示例
Ruby https://github.com/Microsoft/azureimds/blob/master/IMDSSample.rb
Go Lang https://github.com/Microsoft/azureimds/blob/master/imdssample.go
Python https://github.com/Microsoft/azureimds/blob/master/IMDSSample.py
C++ https://github.com/Microsoft/azureimds/blob/master/IMDSSample-windows.cpp
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
JavaScript https://github.com/Microsoft/azureimds/blob/master/IMDSSample.js
PowerShell https://github.com/Microsoft/azureimds/blob/master/IMDSSample.ps1
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh

常见问题

  1. 我收到错误 400 Bad Request, Required metadata header not specified。 这是什么意思呢?

    • 实例元数据服务需要在请求中传递标头 Metadata: true。 将该标头传入 REST 调用将允许访问实例元数据服务。
  2. 为什么我无法获取我的 VM 的计算信息?
    • 当前实例元数据服务仅支持 Azure Resource Manager 创建的实例。 将来可能添加对云服务 VM 的支持。
  3. 我刚才通过 Azure Resource Manager 创建了我的虚拟机。 为什么我无法看到计算元数据信息?
    • 对于 2016 年 9 月之后创建的所有 VM,请添加标记以开始查看计算元数据。 对于早期 VM(在 2016 年 9 月之前创建),请在 VM 中添加/删除扩展或数据磁盘以刷新元数据。
  4. 我看不到为新版本 2017-08-01 填充的任何数据
    • 对于 2016 年 9 月之后创建的所有 VM,请添加标记以开始查看计算元数据。 对于早期 VM(在 2016 年 9 月之前创建),请在 VM 中添加/删除扩展或数据磁盘以刷新元数据。
  5. 我为什么会收到错误 500 Internal Server Error
    • 请根据指数后退系统重试请求。 如果问题持续出现,请联系 Azure 支持部门。
  6. 在何处共享其他问题/评论?
  7. 这是否适用于虚拟机规模集实例?
    • 是的,元数据服务可用于规模集实例。
  8. 如何获取服务支持?

    • 若要获取服务支持,请针对无法在长时间重试后获得元数据响应的 VM,在 Azure 门户中创建支持问题。

后续步骤

  • 详细了解由实例元数据服务提供的公共预览版 scheduledevents API。

    立即访问http://market.azure.cn

Azure 实例元数据服务的更多相关文章

  1. Azure 元数据服务:适用于 Windows VM 的计划事件(预览)

    计划事件是 Azure 元数据服务中的其中一个子服务. 它负责显示有关即将发生的事件(例如,重新启动)的信息,使应用程序可以为其做准备并限制中断. 它可用于所有 Azure 虚拟机类型(包括 PaaS ...

  2. Azure 订阅和服务限制、配额和约束

    最后更新时间:2016年10月24日 概述 本文档指定一些最常见的 Azure 限制.请注意,本文档目前未涵盖所有 Azure 服务.一段时间后,将展开并更新这些限制以包含多个平台. NOTE: 如果 ...

  3. Microsoft Azure 负载平衡服务

     Microsoft Azure 为在其中托管的虚拟机(IaaS) 和云服务(PaaS) 提供负载平衡服务.负载平衡支持应用程序伸缩,并且提供应用程序故障恢复以及其他优势. 可以通过以下方式访问负 ...

  4. SharePoint 元数据服务-PowerShell

    1. 获取元数据服务应用程序标识 Get-SPServiceApplication 2. 获取指定的元数据服务应用程序实例 $metadataApp = Get-SPMetadataServiceAp ...

  5. 【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?

    问题描述 在使用Azure Spring Cloud服务时,如果要收集应用程序的日志.有控制台输出(实时流日志),也可以配置Log Analytics服务. 日志流式处理 可以通过以下命令在 Azur ...

  6. Microsoft Azure 云存储服务概念

    本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...

  7. Windows Azure Virtual Machine (28) 使用Azure实例级别IP,Instance-Level Public IP Address (PIP)

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China 熟悉Azure平台的读者都知道,我们在使用Azure Virtual ...

  8. 为 Azure IoT Edge 设备部署 Azure Stream Analytics 服务

    在前面的两篇文章<Azure IoT Edge on Windows 10 IoT Core>和<Azure IoT Edge on Raspberry Pi 3 with Rasp ...

  9. oracle 数据库、实例、服务名、SID

    参考:http://www.zhetao.com/content240 在实际的开发应用中,关于Oracle数据库,经常听见有人说建立一个数据库,建立一个Instance,启动一个Instance之类 ...

随机推荐

  1. C#中将String类型保存到本地文件的方法

    今天刚刚遇到,要在WinForm中把一个xml保存到本地, 由于之前是学习java的,一时间还真不知道怎么写, 没想到C#居然那么方便,就3句代码就实现了我要的功能: StreamWriter sw ...

  2. 开启linux远程访问权限

    摘要:今天在Linux服务器上安装了msyql数据库,在本地访问的时候可以访问,但是我想通过远程的方式访问的时候就不能访问了,查询资料后发现,Linux下MySQL默认安装完成后只有本地访问的权限,没 ...

  3. WebLogic 12c 修改节点 Managed Server 和 AdminServer 内存方法

    1.进入管理节点: 2.添加JVM参数: -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m JAVA 8 可将-XX:PermSi ...

  4. stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)

    stack堆栈是一个后进先出的线性表,插入和删除元素都在表的一端进行. stack堆栈的使用方法: 采用push()方法将元素入栈: 采用pop()方法将元素出栈: 采用top()方法访问栈顶元素: ...

  5. C字符串

    C字符串 C中的字符串是以空字符('\0')结尾的一个char数组,基本的实现字符串的方法有:字符串常量,字符串数组,char数组,char指针.字符串使用广泛,如与用户交互等处理自然语言的情况.C为 ...

  6. 为什么IIS的应用池回收设置默认为1740分钟-20180720

    [非原创,个人收集,希望大家有感触] 你可曾留心过IIS的应用池回收设置默认值是多少?1740分钟对吗,那么为什么会是这样的数值呢? 在asp.net的某篇博客里提到了这个问题. 有关微软产品的许多决 ...

  7. 深入理解.NET MemoryCache

    摘要 MemoryCache是.Net Framework 4.0开始提供的内存缓存类,使用该类型可以方便的在程序内部缓存数据并对于数据的有效性进行方便的管理,借助该类型可以实现ASP.NET中常用的 ...

  8. 【题解】LFYZNoip前水题赛 T6

    垃圾出题人们在30分钟内完成了讨论,出题,命题,造数据,跑std的所有环节 luv的化学竞赛题 题目背景 luv_letters 在肝化学竞赛题,他的梦想是混个省一,但是遗憾的是他今年的省二莫名消失了 ...

  9. [android] 轮播图-滑动图片标题焦点

    谷歌提供的v4包,ViewPager 在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,这个只是轮播的区域 在布局文件中,布置标题描述部分 ...

  10. 【Tomcat】JVM,Tomcat,Servlet,Tomcat中的应用。彻底弄懂这些概念之间的联系

    tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同. tomcat的角色是“调度员”,而你的应用的角色是“工作者”,tomcat处理一个请求的大致过 ...