本文档介绍了如何查看和读取托管式实例组 (MIG) 中虚拟机的运行状况变化日志条目,并提供了特定的用例来帮助您监控托管式实例组中的虚拟机。
如果您为 MIG 配置了基于应用的健康检查,则只要代管式实例的健康状况发生更改,Compute Engine 就会写入日志条目 - 例如,当实例从 HEALTHY
变为 UNHEALTHY
状态时。这些日志条目可帮助您监控和调试每个代管式实例的运行状况以及 MIG 的整体运行状况。
准备工作
- 参阅设置健康检查和自动修复。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
价格
Compute Engine 使用 Cloud Logging 为代管式实例运行状况更改生成日志条目。Cloud Logging 每月为您提供一定的免费配额,之后日志条目按数据量计费。如需了解详情,请参阅 Cloud Logging 价格摘要。
为避免记录费用,您可以停用运行状况更改日志。
查看运行状况更改日志
如果运行状况更改日志保持启用状态,则每当代管式实例的运行状况更改时,Compute Engine 都会将日志条目写入平台日志。您可以查看项目、特定 MIG 或特定代管式实例的这些日志。
查看项目或 MIG 的日志
如需查看项目或特定 MIG 的日志条目,请使用Google Cloud 控制台、gcloud CLI 或 REST。
前往 Google Cloud 控制台中的 Logs Explorer。
设置以下查询参数:
- 资源 - GCE 实例组管理器
- 日志名称 -
instance_group_manager_events
或者,您可以在查询构建器中复制以下查询。
resource.type="gce_instance_group_manager" AND logName="projects/
PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:*您可以使用以下查询将搜索范围缩小到特定托管式实例组。
resource.type="gce_instance_group_manager" AND logName="projects/
PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME "点击运行查询。查询结果将显示日志。
使用 gcloud logging read
命令查看和读取日志条目。
如需查看项目中的所有运行状况更改日志,请使用以下命令:
gcloud logging read 'resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:*'\ --limit 10
如需查看特定托管式实例组的所有运行状况更改日志,请使用以下命令:
gcloud logging read 'resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME "' \ --limit 10
请替换以下内容:
PROJECT_ID
:您的项目 ID。MIG_NAME
:您要查看其健康状况更改日志的 MIG。
如需查看运行状况更改日志,请向 entries.list
方法发出 POST
请求。
如需查看项目中的所有运行状况更改日志,请使用以下命令:
curl -H "Content-Type: application/json" -H "Authorization: BearerOAUTH2_TOKEN " -X POST -d \ '{"filter": "resource.type=gce_instance_group_manager AND logName=projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events AND jsonPayload.instanceHealthStateChange:*", "orderBy": "timestamp desc", "pageSize": 10, "resourceNames": ["projects/PROJECT_ID "] }' https://logging.googleapis.com/v2/entries:list?alt=json
如需查看特定托管式实例组的运行状况更改日志,请使用以下命令:
curl -H "Content-Type: application/json" -H "Authorization: BearerOAUTH2_TOKEN " -X POST -d \ '{"filter": "resource.type=gce_instance_group_manager AND logName=projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name=MIG_NAME ", "orderBy": "timestamp desc", "pageSize": 10, "resourceNames": ["projects/PROJECT_ID "] }' https://logging.googleapis.com/v2/entries:list?alt=json
请替换以下内容:
OAUTH2_TOKEN
:您的应用的访问令牌。对于本地测试,您可以使用gcloud auth print-access-token
命令生成令牌。PROJECT_ID
:您的项目 ID。MIG_NAME
:您要查看其健康状况更改日志的 MIG。
如需详细了解每个日志条目,请参阅日志条目的格式。
您可以将日志导出到 Cloud Storage、BigQuery 或 Pub/Sub 等目标位置,具体取决于您是要将日志归档、使用日志进行分析、将日志流式传输到其他应用,还是触发 Cloud Functions 函数。如需详细了解如何导出日志,请参阅日志导出概览。
查看特定虚拟机的健康状况更改日志
如需查看特定代管式实例的日志条目,请使用Google Cloud 控制台、gcloud CLI 或 REST。
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中复制以下查询。
resource.type="gce_instance_group_manager" AND logName="projects/
PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME "点击运行查询。
使用 gcloud logging read
命令查看和读取日志条目。
如需查看代管式实例的运行状况更改日志,请使用以下命令:
gcloud logging read 'resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME "' \ --limit 10
请替换以下内容:
PROJECT_ID
:您的项目 ID。INSTANCE_NAME
:要查看其运行状况更改日志的代管式实例。
如需查看代管式实例的运行状况更改日志,请向 entries.list
方法发出 POST
请求。
curl -H "Content-Type: application/json" -H "Authorization: BearerOAUTH2_TOKEN " -X POST -d \ '{"filter": "resource.type=gce_instance_group_manager AND logName=projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events AND jsonPayload.instanceHealthStateChange:* AND labels.\"compute.googleapis.com/instance_name\"=\"INSTANCE_NAME \"", "orderBy": "timestamp desc", "pageSize": 10, "resourceNames": ["projects/PROJECT_ID "] }' https://logging.googleapis.com/v2/entries:list?alt=json
请替换以下内容:
OAUTH2_TOKEN
:您的应用的访问令牌。对于本地测试,您可以使用gcloud auth print-access-token
命令生成令牌。PROJECT_ID
:您的项目 ID。INSTANCE_NAME
:要查看其运行状况更改日志的代管式实例。
日志条目的格式
实例运行状况更改日志条目包含对监控和调试托管式实例状态有用的信息。
这些日志写入日志名称为 instance_group_manager_events
的平台日志。平台日志可帮助您调试和排查问题。
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events"
运行状况更改日志条目包含以下类型的信息:
- 大多数日志中显示的常规信息,例如严重性、项目 ID、MIG 名称和 ID、项目编号、时间戳等。
- 特定于实例运行状况的字段。
在每个运行状况更改日志条目中,jsonPayload.instanceHealthStateChange
字段包含以下信息:
字段 | 说明 |
---|---|
instance |
实例的网址,具体取决于字符串项目 ID 和实例名称。 |
instanceWithId |
实例的网址,具体取决于其数字项目 ID 和实例 ID。 |
ipAddress |
实例的 IP 地址,由健康检查探测。 |
network |
此实例的网络资源的网址,具体取决于字符串项目 ID 和网络名称。 |
networkWithId |
此实例的网络资源的网址,具体取决于其数字项目 ID 和网络 ID。 |
healthCheck |
为托管式实例组配置的健康检查的网址。 |
previousDetailedHealthState |
实例之前的运行状况。如需查看可能的状态的列表,请参阅运行状况。 |
detailedHealthState |
实例的当前运行状况。如需查看可能的状态的列表,请参阅运行状况。 |
notificationTime |
运行状况更改时的时间戳。 |
布尔值类型的日志字段通常仅在其值为 true
时才会显示。如果某个布尔值字段的值为 false
,则日志中将不会出现该字段。
日志字段强制采用 UTF-8 编码。非 UTF-8 字符将被替换为问号。
日志条目示例
以下示例展示了虚拟机实例的运行状况从 HEALTHY
更改为 UNHEALTHY
:
{ "logName": "projects/my-project/logs/compute.googleapis.com%2Finstance_group_manager_events", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_id": "3138236342290985981", "instance_group_manager_name": "my-mig", "project_id": "my-project", "location": "europe-west3" } }, "labels": { "compute.googleapis.com/instance_id": "6498902454451155884", "compute.googleapis.com/instance_location": "europe-west3-a", "compute.googleapis.com/instance_name": "my-mig-a" }, "timestamp": "2019-11-19T15:47:57.127Z", "severity": "INFO", "jsonPayload": { "@type": "type.googleapis.com/compute.InstanceGroupManagerEvent", "instanceHealthStateChange": { "instance": "projects/my-project/zones/europe-west3-a/instances/my-mig-a", "instanceWithId": "projects/123456/zones/europe-west3-a/instances/6498902454451155884", "ipAddress": "10.0.0.4", "network": "projects/my-project/global/networks/net-1", "networkWithId": "projects/123456/global/networks/456", "healthCheck": "projects/my-project/global/healthChecks/my-mig-health-check", "previousDetailedHealthState": "HEALTHY", "detailedHealthState": "UNHEALTHY", "notificationTime": "2019-11-19T15:47:56.444Z" } }, "receiveTimestamp": "2019-11-19T15:47:57.296439184Z" }
使用场景
您可在以下监控或调试场景中使用运行状况更改日志:
- 了解特定虚拟机实例在一段时间内的运行状况更改频率。
- 评估 MIG 出现实例运行状况更改的频率。
- 确定经常出现
UNHEALTHY
的故障虚拟机实例。 - 找出导致自动修复尝试的原因。
- 确定特定虚拟机实例的自动修复尝试是否成功。
- 通过确定自动修复的相应初始延迟时间,微调应用的健康检查配置。
监控虚拟机的运行状况更改
通过创建指标来跟踪特定虚拟机的运行状况更改,您可以监控虚拟机实例的运行状况更改频率。
如需创建指标并监控更改,请执行以下操作:
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中输入以下查询,使用您的项目 ID 和实例名称。
resource.type="gce_instance_group_manager" AND logName="projects/
PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME "在查询结果部分中,点击操作,然后点击创建指标。
在创建日志指标页面上,执行以下操作:
- 将指标类型设置为计数器。
输入日志指标名称,例如
health-mig-xyzq
。构建过滤条件部分显示来自日志浏览器的日志查询。您还可以通过将
severity>=WARNING
添加到过滤条件,将指标的过滤条件配置为仅考虑中断性状态,例如UNHEALTHY
和TIMEOUT
。在标签下,点击添加标签。
输入标签名称,例如
health_state
。将标签类型设置为
STRING
。将字段名称设置为
jsonPayload.instanceHealthStateChange.detailedHealthState
。这可让您区分不同的运行状况更改。点击完成,添加标签。
点击创建指标。
前往基于日志的指标页面,然后找到新创建的指标。
点击该指标所在行中的菜单 more_vert,然后选择在 Metrics Explorer 中查看。Metrics Explorer 会打开并显示一个图表,代表您在查询中指定的虚拟机实例的健康状况变化。
监控 MIG 中所有虚拟机的运行状况更改
您可以创建指标来跟踪代管式实例的运行状况更改,以监控所有代管式实例的运行状况更改。
如需创建指标并监控更改,请执行以下操作:
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中输入以下查询,使用您的项目 ID 和代管式实例组的名称。
resource.type="gce_instance_group_manager" AND logName="projects/
PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME "在查询结果部分中,点击操作,然后点击创建指标。
在创建日志指标页面上,执行以下操作:
- 将指标类型设置为计数器。
- 输入日志指标名称,例如
health-mig-xyzq
。 - 在标签下,点击添加标签。
- 输入标签名称,例如
health_state
。 - 将标签类型设置为
STRING
。 - 将字段名称设置为
jsonPayload.instanceHealthStateChange.detailedHealthState
。这可让您区分不同的运行状况更改。 - 点击完成,添加标签。
- 点击创建指标。
前往基于日志的指标页面,然后找到新创建的指标。
点击该指标所在行中的菜单 more_vert,然后选择在 Metrics Explorer 中查看。Metrics Explorer 会打开并显示一个图表,代表您在查询中指定的托管式实例组中的所有虚拟机实例的健康状况变化。
识别经常出现运行状况不佳情况的虚拟机
您可以通过创建指标来跟踪 MIG 中所有虚拟机实例的运行状况更改,并按实例对指标进行分组,找出经常变为 UNHEALTHY
的故障虚拟机。
要创建指标并按实例进行分组,请执行以下操作:
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中输入以下查询,使用您的项目 ID 和代管式实例组的名称。
resource.type="gce_instance_group_manager" AND logName="projects/
PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME "在查询结果部分中,点击操作,然后点击创建指标。
在创建日志指标页面上,执行以下操作:
- 将指标类型设置为计数器。
- 输入日志指标名称,例如
health-mig-xyzq
。 - 在标签下,点击添加标签。
- 输入标签名称,例如
health_state
。 - 将标签类型设置为
STRING
。 - 将字段名称设置为
jsonPayload.instanceHealthStateChange.detailedHealthState
。这可让您区分不同的运行状况更改。 - 点击完成,添加标签。
- 同样,添加第二个标签(例如
instance
),并将字段名称设置为jsonPayload.instanceHealthStateChange.instance
。 - 点击创建指标。
前往基于日志的指标页面,然后找到新创建的指标。
点击该指标所在行中的菜单 more_vert,然后选择在 Metrics Explorer 中查看。Metrics Explorer 会打开并显示一个图表,代表您在查询中指定的托管式实例组中的所有虚拟机实例的健康状况变化。
将分组依据设置为
instance
,查看每个实例的运行状况更改总数。
汇总的运行状况更改最多的实例是最常出现运行状况不佳情况的实例。
检查导致自动修复尝试的原因
您可以通过过滤给定虚拟机实例的 repair
操作日志来了解导致自动修复尝试的原因。
如需过滤修复操作,请执行以下操作:
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中输入以下查询,并使用您的项目 ID 和实例名称。
resource.type="gce_instance" AND logName="projects/
PROJECT_ID /logs/cloudaudit.googleapis.com%2Fsystem_event" AND protoPayload.methodName="compute.instances.repair.recreateInstance" AND protoPayload.resourceName=~"/INSTANCE_NAME $"点击运行查询。查询结果会显示虚拟机上所有的自动修复尝试,并在
protoPayload.status.message
中显示自动修复原因。
检查虚拟机自动修复是否成功
您可以通过按虚拟机实例名称过滤 repair
操作的日志和运行状况更改来确定虚拟机实例的自动修复尝试是否成功。在修复操作完成后,如果实例的运行状况更改为 HEALTHY
,您将看到相应的运行状况更改日志。请执行以下步骤:
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中输入以下查询,并使用您的项目 ID 和实例名称。
(resource.type="gce_instance" AND logName="projects/
PROJECT_ID /logs/cloudaudit.googleapis.com%2Fsystem_event" AND protoPayload.methodName="compute.instances.repair.recreateInstance" AND protoPayload.resourceName=~"/INSTANCE_NAME $") OR (resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME ")查询的第一部分显示实例修复操作,这些操作表示 MIG 自动修复触发了重新创建,以使实例运行状况恢复正常。查询的第二部分显示虚拟机实例的所有运行状况更改。
在查询结果中,如果运行状况更改事件的
detailedHealthState
在修复操作完成后很快设置为HEALTHY
,则该事件显示自动修复尝试成功。
确定 MIG 的初始延迟时间值
通过虚拟机实例运行状况日志记录,可轻松地确定 MIG 自动修复的相应初始延迟时间值。您可以使用日志来观察 instances.insert
操作完成与收到组中一组实例的第一个运行状况良好信号之间的时间。此时间间隔显示了实例完全启动所需的时间。由于某些虚拟机的启动速度可能低于其他虚拟机,因此 Google 建议在自动修复政策中指定初始延迟时间时,向观察到的初始化时间(从插入操作到出现运行状况良好状态之间的时间)添加某个时间差。
要衡量实例插入操作与实例出现运行状况良好状态之间的时间,请按虚拟机实例名称对 insert
操作和运行状况更改日志运行查询。在这两种操作中,使用时间戳来计算实例的初始化时间。请执行以下步骤:
前往 Google Cloud 控制台中的 Logs Explorer。
在查询构建器中输入以下查询,并使用您的项目 ID 和实例名称。
(resource.type="gce_instance" AND logName="projects/
PROJECT_ID /logs/cloudaudit.googleapis.com%2Factivity" AND protoPayload.request.@type="type.googleapis.com/compute.instances.insert" AND operation.last="true" AND protoPayload.resourceName=~"/INSTANCE_NAME $") OR (resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID /logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME ")查询的第一部分显示了虚拟机插入操作的完成情况。第二部分显示虚拟机的所有运行状况更改。
在查询结果中,如果运行状况更改事件的
detailedHealthState
在插入操作完成后很快设置为HEALTHY
,则该事件的时间戳显示了此虚拟机启动所需的时间。对更多虚拟机重复上述步骤,以获取初始延迟时间参数的更优近似值。