本文档介绍了如何使用 Google Cloud 控制台配置通知渠道。当提醒政策触发时,Cloud Monitoring 会使用这些渠道通知您或您的待命团队。创建提醒政策时,您可以从已配置的通知渠道列表中进行选择,以指定要接收通知的人员。例如,您可以配置用于监控 Compute Engine 实例的提醒政策,以发布 Pub/Sub 主题并通知值班团队的 Slack 频道。
本文档介绍了如何使用 Google Cloud 控制台。如果您使用的是 Cloud Monitoring API,请参阅通过 API 创建和管理通知渠道。
准备工作
如需获得使用 Google Cloud 控制台查看和配置通知渠道所需的权限,请让您的管理员向您授予项目的 Monitoring Editor (roles/monitoring.editor
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如需详细了解 Cloud Monitoring 角色,请参阅使用 Identity and Access Management 控制访问权限。
创建通知渠道
创建提醒政策时,您可以选择任何已配置的通知渠道,并将其添加到政策中。您可以预配置通知渠道,也可以在创建提醒政策的过程中配置它们。如需了解详情,请参阅按需创建渠道。
如需使用 Google Cloud 控制台创建通知渠道,请按照下表中包含的特定于渠道的说明操作:
如需添加电子邮件通知渠道,请执行以下操作:
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
- 点击修改通知渠道。
- 在电子邮件部分中,点击新增。
- 输入一个电子邮件地址和说明。
- 点击保存。
如果您使用群组电子邮件地址作为提醒政策的通知渠道,请将该群组配置为接受来自 alerting-noreply@google.com
的邮件。
您可以在创建提醒政策期间创建电子邮件渠道。如需了解详情,请参阅按需创建渠道。
您可以使用 Google Cloud 控制台移动应用随时随地监控 Google Cloud 控制台资源和 Monitoring 信息。Google Cloud 控制台移动应用通知会发送给特定设备或特定用户:
- 设备表示通知仅发送到创建通知渠道的特定设备。对于设备范围的通知渠道,显示名字段包含设备信息。
- 用户表示通知将发送到安装了 Google Cloud 控制台移动应用的所有设备。
Cloud Monitoring 会在创建渠道时确定通知范围。您不能选择或更改范围。
如需为特定 Google Cloud 项目配置 Google Cloud 控制台移动应用通知渠道,请执行以下操作:
- 从移动设备的应用商店安装 Google Cloud 控制台移动应用。
选择要在 Google Cloud 控制台移动应用中查看的项目。
选择项目后,应用与所选的 Google Cloud 项目之间会交换数据。当不存在通知渠道时,系统会创建一个通知渠道。几分钟后,该渠道会列在通知渠道页面的移动设备部分。
如需将您的移动设备添加为提醒政策的通知渠道,请在提醒通知部分中选择 Google Cloud 控制台(移动设备),然后从列表中选择您的移动设备。
PagerDuty 支持与 Monitoring 进行双向同步。因此,以下为真:
- 如果在 Monitoring 中创建了突发事件,则会在 PagerDuty 中打开一个突发事件。
- 您不能使用 PagerDuty 来结束 Monitoring 中的突发事件。
- 如果您在 PagerDuty 中解决了突发事件,而 Monitoring 中仍有该突发事件处于打开状态,则该突发事件会在 PagerDuty 中重新打开。
如需设置 PagerDuty 通知,请执行以下操作:
- 在 PagerDuty 账号中,在新服务中配置集成,或将集成添加到现有服务。
- 创建一个账号或登录现有账号。
- 前往服务页面。
- 如需创建服务,请执行以下操作:
- 点击 + 新服务。
- 输入服务名称和说明,然后点击下一步。
- 配置上报政策,然后点击下一步。
- 如果您的 PagerDuty 账号支持提醒分组和暂时性提醒,请进行相应配置,然后点击下一步。
- 在集成设置页面的 Search for an integration(s)(搜索集成)工具栏中,输入
Events API v1
,然后点击 Create Service(创建服务)。然后,您会返回到新服务的 Integrations(集成)面板。
- 如需修改现有服务,请执行以下操作:
- 从您的 Service Directory 中选择一项服务。
- 在服务页面上,选择集成面板。
- 点击 + 添加其他集成,前往集成设置页面。
- 在集成设置页面的搜索集成工具栏中,输入
Events API v1
,然后点击添加。然后,您会返回到所修改服务的集成面板。
- 在服务的集成面板中,找到新集成的列表,展开其菜单,然后复制集成键。
- 可选:配置 PagerDuty 以准确映射 Monitoring 中的突发事件严重程度值。
- 在 Cloud Monitoring 中,添加 PagerDuty 通知渠道:
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
- 点击修改通知渠道。
- 在 PagerDuty 部分,点击新增。
- 输入显示名。此名称应与您在第 1 步中配置新集成的 PagerDuty 服务的名称一致。
- 将您在第 1 步中复制的集成密钥粘贴到服务密钥字段中。
- 点击保存。
-
创建提醒政策时,请在 Notifications 部分选择 PagerDuty,然后选择您的 PagerDuty 配置。
PagerDuty 的 JSON 数据包的格式如下:
{
"description": A string of various fields in the incident,
"details": JSON payload with schema version 1.2.
}
如需查看 details
字段的示例和架构,请展开即可下部分。
JSON 示例
默认情况下,提醒后端会尝试生成版本 1.2 格式的 JSON 数据包。如需详细了解此格式,请参阅下一部分。
以下是此类数据包的示例:
{
"incident": {
"incident_id": "0.opqiw61fsv7p",
"scoping_project_id": "internal-project",
"scoping_project_number": 12345,
"url": "https://console.cloud.google.com/monitoring/alerting/incidents/0.lxfiw61fsv7p?project=internal-project",
"severity": "no severity",
"started_at": 1577840461,
"ended_at": 1577877071,
"state": "closed",
"resource_id": "11223344",
"resource_name": "internal-project gke-cluster-1-default-pool-e2df4cbd-dgp3",
"resource_display_name": "gke-cluster-1-default-pool-e2df4cbd-dgp3",
"resource_type_display_name": "VM Instance",
"resource": {
"type": "gce_instance",
"labels": {
"instance_id": "11223344",
"project_id": "internal-project",
"zone": "us-central1-c"
}
},
"metric": {
"type": "compute.googleapis.com/instance/cpu/utilization",
"displayName": "CPU utilization",
"labels": {
"instance_name": "the name of the VM instance"
}
},
"metadata": {
"system_labels": { "labelkey": "labelvalue" },
"user_labels": { "labelkey": "labelvalue" }
},
"policy_name": "Monitor-Project-Cluster",
"policy_user_labels" : {
"user-label-1" : "important label",
"user-label-2" : "another label"
},
"condition_name": "VM Instance - CPU utilization [MAX]",
"threshold_value": "0.9",
"observed_value": "0.835",
"condition": {
"name": "projects/internal-project/alertPolicies/1234567890123456789/conditions/1234567890123456789",
"displayName": "VM Instance - CPU utilization [MAX]",
"conditionThreshold": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" metadata.system_labels.\"state\"=\"ACTIVE\"",
"aggregations": [
{
"alignmentPeriod": "120s",
"perSeriesAligner": "ALIGN_MEAN"
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.9,
"duration": "0s",
"trigger": {
"count": 1
}
}
},
"documentation": {
"content": "TEST ALERT\n\npolicy.name=projects/internal-project/alertPolicies/1234567890123456789\n\npolicy.display_name=Monitored-Project-NO-GROUPBY\n\ncondition.name=projects/nternal-project/alertPolicies/1234567890123456789/conditions/1234567890123456789\n\ncondition.display_name=VM Instance - CPU utilization [MAX]\n\nproject=internal-project\n\nresrouce.project=internal-project \n\nDONE\n",
"mime_type": "text/markdown",
"subject": "ALERT - No severity",
"links": [
{
"displayName": "Playbook",
"url": "https://myownpersonaldomain.com/playbook?name=${resource.name}"
}
]
},
"summary": "CPU utilization for internal-project gke-cluster-1-16-default-pool-e2df4cbd-dgp3 with metric labels {instance_name=gke-cluster-1-default-pool-e2df4cbd-dgp3} and system labels {state=ACTIVE} returned to normal with a value of 0.835."
},
"version": "1.2"
}
架构结构 1.2 版
本部分介绍载荷架构 1.2 版。一些字段可能未出现在所有返回的数据包中,或者可能具有空值,具体取决于提醒政策的配置、突发事件状态或受监控的资源。一些字段采用嵌入式结构作为值;这些结构也会通过引用进行描述,因为它们的内容也可能会有所不同。
在返回的数据包中,字段可按任意顺序排列。在下面的说明中,会将它们整理到相关组中。
{
"version": "1.2",
"incident": {
突发事件相关信息。
"incident_id"
:字符串,代表为此突发事件生成的 ID。
"scoping_project_id"
:字符串,代表托管指标范围的项目 ID。
"scoping_project_number"
:数字,代表范围项目的项目编号。
"url"
:字符串,代表此突发事件的 Google Cloud 控制台网址。
"started_at"
:数字,代表创建突发事件的时间(以 Unix 纪元秒数表示)。
"ended_at"
:数字,代表结束突发事件的时间(以 Unix 纪元秒数表示)。仅当 state
为 closed
时填充。
"state"
:字符串,代表突发事件 open
或 closed
的状态。如果为 open
,则 ended_at
为 null。
"summary"
:字符串,代表为突发事件生成的文本摘要。
"apigee_url"
:字符串,代表此突发事件的 Apigee 网址,仅适用于 Apigee 资源类型 Environment
和 Proxy*
。
"observed_value"
:字符串,代表观察到的触发/解决提醒的值,如果条件过期,则它可能为空。
为其创建突发事件的受监控资源的相关信息。
"resource": {
"type"
:字符串,代表收到提醒的受监控资源类型的标识符,例如 gce_instance
;请参阅受监控资源列表。
"labels"
:对象,代表与受监控资源关联的标签的键值对。
},
"resource_type_display_name"
:字符串,代表受监控资源类型的显示名。
"resource_id"
:字符串,代表受监控资源的实例 ID,与 resource.labels.instance_id
的值相同。
"resource_display_name"
:字符串,代表受监控资源的显示名。
"resource_name"
:字符串,代表为此受监控资源生成的名称;由其他字段的值组成。
时间序列数据指标类型的相关信息。
"metric": {
"type"
:字符串,代表接收提醒的指标类型的标识符,例如 compute.googleapis.com/instance/cpu/utilization
;请参阅指标列表。
"displayName"
:字符串,代表指标类型的显示名。
"labels"
:对象,代表与指标关联的标签的键值对。
},
"metadata": {
"system_labels"
:对象,代表系统元数据标签的键值对。
"user_labels"
:对象,代表用户元数据标签的键值对。
},
未解决/已解决突发事件的提醒政策和条件的相关信息。
值来自相关的 AlertPolicy
对象。
"policy_name"
:字符串,代表提醒政策的显示名。
"policy_user_labels"
:对象,代表附加到政策的任何用户标签的键值对。
"documentation"
:对象,代表 Documentation
表单的嵌入式结构。
"condition"
:对象,代表 Condition
表单的嵌入式结构。
"condition_name"
:字符串,代表条件的显示名,值与 condition.displayName
相同。
"severity"
:字符串,突发事件的严重程度。
如果在创建提醒政策期间未定义此字段,Cloud Monitoring 会将提醒政策严重程度设置为 no severity
。
"threshold_value"
:字符串,代表此条件的阈值,如果此条件不是阈值条件,则它可能为空。
},
}
弃用政策
载荷架构需遵守 Google Cloud Platform 服务条款第 1.4(d) 条所述的 Google Cloud 弃用政策。请注意,该架构不会控制生成的字段值的格式,这些格式可能会发生变化而不另行通知。例如,incident.summary
、incident.documentation.content
和 incident.url
旨在包含与其字段相关的数据,但该架构并不具备可保证准确解析这些字段的限制条件。您可以将该值作为一个整体进行使用,并希望它遵守弃用政策,但请勿凭借它来解析生成的字段。
配置 PagerDuty 以映射严重级别
默认情况下,PagerDuty 通知会将所有事件严重程度级别显示为“严重”。您可以在 PagerDuty 中配置事件编排规则,以便 PagerDuty 提醒严重程度与 Monitoring 突发事件严重程度相匹配:
- 在 PagerDuty 账号中,前往服务页面。
- 选择您接收通知的 PagerDuty 服务。 Google Cloud
- 点击设置。
- 前往事件管理部分,然后点击查看编排规则。
- 点击新建规则。
- 对于您要转换的每个 Monitoring 严重程度值,请创建一个条件规则,将严重程度值映射到等效的 PagerDuty 值:
- 在第 1 步:应在何时应用此规则?下方的菜单中, 选择如果事件与特定条件匹配。
- 选择代码编辑器。
- 在 If 部分中,输入
event.custom_details.incident.severity matches part
VALUE,其中 VALUE 是监控严重程度值的名称,然后点击 Next。 - 在第 2 步:应应用哪些操作下,选择提醒数据。
- 将提醒严重程度设置为与您在第 C 步中输入的“监控”值相符的值,然后保存更改。
- 可选:如需添加其他规则,请点击“否则”规则。
如需配置短信通知,请执行以下操作:
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
- 点击修改通知渠道。
- 在短信部分中,点击新增。
- 完整填写对话框,然后点击保存。
设置提醒政策时,请选择短信通知类型,然后从列表中选择经过验证的手机号码。
在发生新事件时,Monitoring Slack 集成允许您的提醒政策向 Slack 渠道发布通知。如需设置 Slack 通知,请执行以下操作:
在 Slack 中:在 Slack 网站上创建一个 Slack 工作区和渠道。请记录渠道网址。
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
点击修改通知渠道。
在 Slack 部分中,点击新增以打开 Slack 登录页面:
- 选择您的 Slack 工作区。
- 点击允许以允许 Cloud Monitoring 访问您的 Slack 工作区。此操作会使您返回通知渠道的 Monitoring 配置页面。
- 在 Slack 渠道名称字段中,输入您要用于通知的 Slack 渠道的名称。
- 在 Cloud Alerting Display Name(Cloud Alerting 显示名称)字段中,输入简短的描述性说明。监控会在通知渠道页面上显示此字段的值。
- (可选)如需测试 Cloud Monitoring 与 Slack 工作区之间的连接,请点击发送测试通知。如果连接成功,您会在指定的 Slack 通知渠道中看到消息
This is a test alert notification...
。请检查通知渠道以确认收到。
如果您要用于通知的 Slack 渠道是专用渠道,则必须手动邀请 Monitoring 应用加入该渠道:
- 打开 Slack。
转到您指定为 Monitoring 通知渠道的渠道。
通过在该渠道中输入并发送以下消息,邀请 Monitoring 应用加入该渠道:
/invite @Google Cloud Monitoring
务必邀请 Monitoring 应用加入您在 Monitoring 中创建通知渠道时指定的专用渠道。邀请 Monitoring 应用加入公共渠道是可选操作。
创建提醒政策时,请在 Notifications 部分选择 Slack,然后选择您的 Slack 配置。
在配置 Webhook 通知渠道之前,请考虑以下事项:
- webhook 仅支持公共端点。 如果您需要将通知发送到非公开的端点,请创建一个 Pub/Sub 通知渠道,并配置对 Pub/Sub 主题的订阅。如需了解详情,请参阅为专用端点配置网络钩子通知时失败。
- 如果 Cloud Run 函数配置为通知渠道的 webhook 端点,请确保调用该函数的用户具有所需的身份验证权限。如需了解详情,请参阅进行身份验证以便调用和启用对函数的访问权限。
- Webhook 通知渠道与 Microsoft Teams 不兼容。 如需将监控通知数据发送到 Microsoft Teams,请创建一个集成层来接收监控网络钩子,然后将其重定向到 Microsoft Teams。
配置 Webhook 通知渠道
如需配置网络钩子通知,请执行以下操作:
- Webhook 处理程序:确定从 Monitoring 接收 Webhook 数据的公共端点网址。
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
- 点击修改通知渠道。
- 在网络钩子部分中,点击新增。
- 完整填写对话框。
- 点击测试连接,将测试载荷发送到网络钩子端点。您可以转到接收端点来验证递送。
- 点击保存。
创建提醒政策时,在 Notifications 部分选择 Webhook,然后选择您的 Webhook 配置。 Error Reporting 发送的通知遵循 1.0 架构,而 Monitoring 发送的通知遵循 1.2 架构:
JSON 示例
默认情况下,提醒后端会尝试生成版本 1.2 格式的 JSON 数据包。如需详细了解此格式,请参阅下一部分。
以下是此类数据包的示例:
{
"incident": {
"incident_id": "0.opqiw61fsv7p",
"scoping_project_id": "internal-project",
"scoping_project_number": 12345,
"url": "https://console.cloud.google.com/monitoring/alerting/incidents/0.lxfiw61fsv7p?project=internal-project",
"severity": "no severity",
"started_at": 1577840461,
"ended_at": 1577877071,
"state": "closed",
"resource_id": "11223344",
"resource_name": "internal-project gke-cluster-1-default-pool-e2df4cbd-dgp3",
"resource_display_name": "gke-cluster-1-default-pool-e2df4cbd-dgp3",
"resource_type_display_name": "VM Instance",
"resource": {
"type": "gce_instance",
"labels": {
"instance_id": "11223344",
"project_id": "internal-project",
"zone": "us-central1-c"
}
},
"metric": {
"type": "compute.googleapis.com/instance/cpu/utilization",
"displayName": "CPU utilization",
"labels": {
"instance_name": "the name of the VM instance"
}
},
"metadata": {
"system_labels": { "labelkey": "labelvalue" },
"user_labels": { "labelkey": "labelvalue" }
},
"policy_name": "Monitor-Project-Cluster",
"policy_user_labels" : {
"user-label-1" : "important label",
"user-label-2" : "another label"
},
"condition_name": "VM Instance - CPU utilization [MAX]",
"threshold_value": "0.9",
"observed_value": "0.835",
"condition": {
"name": "projects/internal-project/alertPolicies/1234567890123456789/conditions/1234567890123456789",
"displayName": "VM Instance - CPU utilization [MAX]",
"conditionThreshold": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" metadata.system_labels.\"state\"=\"ACTIVE\"",
"aggregations": [
{
"alignmentPeriod": "120s",
"perSeriesAligner": "ALIGN_MEAN"
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.9,
"duration": "0s",
"trigger": {
"count": 1
}
}
},
"documentation": {
"content": "TEST ALERT\n\npolicy.name=projects/internal-project/alertPolicies/1234567890123456789\n\npolicy.display_name=Monitored-Project-NO-GROUPBY\n\ncondition.name=projects/nternal-project/alertPolicies/1234567890123456789/conditions/1234567890123456789\n\ncondition.display_name=VM Instance - CPU utilization [MAX]\n\nproject=internal-project\n\nresrouce.project=internal-project \n\nDONE\n",
"mime_type": "text/markdown",
"subject": "ALERT - No severity",
"links": [
{
"displayName": "Playbook",
"url": "https://myownpersonaldomain.com/playbook?name=${resource.name}"
}
]
},
"summary": "CPU utilization for internal-project gke-cluster-1-16-default-pool-e2df4cbd-dgp3 with metric labels {instance_name=gke-cluster-1-default-pool-e2df4cbd-dgp3} and system labels {state=ACTIVE} returned to normal with a value of 0.835."
},
"version": "1.2"
}
架构结构 1.2 版
本部分介绍载荷架构 1.2 版。一些字段可能未出现在所有返回的数据包中,或者可能具有空值,具体取决于提醒政策的配置、突发事件状态或受监控的资源。一些字段采用嵌入式结构作为值;这些结构也会通过引用进行描述,因为它们的内容也可能会有所不同。
在返回的数据包中,字段可按任意顺序排列。在下面的说明中,会将它们整理到相关组中。
{
"version": "1.2",
"incident": {
突发事件相关信息。
"incident_id"
:字符串,代表为此突发事件生成的 ID。
"scoping_project_id"
:字符串,代表托管指标范围的项目 ID。
"scoping_project_number"
:数字,代表范围项目的项目编号。
"url"
:字符串,代表此突发事件的 Google Cloud 控制台网址。
"started_at"
:数字,代表创建突发事件的时间(以 Unix 纪元秒数表示)。
"ended_at"
:数字,代表结束突发事件的时间(以 Unix 纪元秒数表示)。仅当 state
为 closed
时填充。
"state"
:字符串,代表突发事件 open
或 closed
的状态。如果为 open
,则 ended_at
为 null。
"summary"
:字符串,代表为突发事件生成的文本摘要。
"apigee_url"
:字符串,代表此突发事件的 Apigee 网址,仅适用于 Apigee 资源类型 Environment
和 Proxy*
。
"observed_value"
:字符串,代表观察到的触发/解决提醒的值,如果条件过期,则它可能为空。
为其创建突发事件的受监控资源的相关信息。
"resource": {
"type"
:字符串,代表收到提醒的受监控资源类型的标识符,例如 gce_instance
;请参阅受监控资源列表。
"labels"
:对象,代表与受监控资源关联的标签的键值对。
},
"resource_type_display_name"
:字符串,代表受监控资源类型的显示名。
"resource_id"
:字符串,代表受监控资源的实例 ID,与 resource.labels.instance_id
的值相同。
"resource_display_name"
:字符串,代表受监控资源的显示名。
"resource_name"
:字符串,代表为此受监控资源生成的名称;由其他字段的值组成。
时间序列数据指标类型的相关信息。
"metric": {
"type"
:字符串,代表接收提醒的指标类型的标识符,例如 compute.googleapis.com/instance/cpu/utilization
;请参阅指标列表。
"displayName"
:字符串,代表指标类型的显示名。
"labels"
:对象,代表与指标关联的标签的键值对。
},
"metadata": {
"system_labels"
:对象,代表系统元数据标签的键值对。
"user_labels"
:对象,代表用户元数据标签的键值对。
},
未解决/已解决突发事件的提醒政策和条件的相关信息。
值来自相关的 AlertPolicy
对象。
"policy_name"
:字符串,代表提醒政策的显示名。
"policy_user_labels"
:对象,代表附加到政策的任何用户标签的键值对。
"documentation"
:对象,代表 Documentation
表单的嵌入式结构。
"condition"
:对象,代表 Condition
表单的嵌入式结构。
"condition_name"
:字符串,代表条件的显示名,值与 condition.displayName
相同。
"severity"
:字符串,突发事件的严重程度。
如果在创建提醒政策期间未定义此字段,Cloud Monitoring 会将提醒政策严重程度设置为 no severity
。
"threshold_value"
:字符串,代表此条件的阈值,如果此条件不是阈值条件,则它可能为空。
},
}
基本身份验证
除了 Cloud Monitoring 发送的网络钩子请求之外,基本身份验证还会使用 HTTP 规范来指定用户名和密码。Cloud Monitoring 要求您的服务器返回具有正确 WWW-Authenticate
标头的 401 响应。如需了解有关基本身份验证的详情,请参阅以下内容:
令牌身份验证
令牌身份验证需要端点网址中的查询字符串参数和服务器希望在其自身和 Monitoring 之间保密的密钥。以下是包含令牌的示例网址:
https://www.myserver.com/stackdriver-hook?auth_token=1234-abcd
如果 Monitoring 将突发事件发布到端点网址,则您的服务器可以验证附加的参数。这种身份验证方法在与 SSL/TLS 结合使用以加密 HTTP 请求时最有效,可以防止窥探者学习令牌。
如需了解 Python 中的示例服务器,请参阅此示例服务器。
弃用政策
载荷架构需遵守 Google Cloud Platform 服务条款第 1.4(d) 条所述的 Google Cloud 弃用政策。请注意,该架构不会控制生成的字段值的格式,这些格式可能会发生变化而不另行通知。例如,incident.summary
、incident.documentation.content
和 incident.url
旨在包含与其字段相关的数据,但该架构并不具备可保证准确解析这些字段的限制条件。您可以将该值作为一个整体进行使用,并希望它遵守弃用政策,但请勿凭借它来解析生成的字段。
本部分介绍如何配置 Pub/Sub 通知渠道。为实现冗余,我们建议您创建多个通知渠道。建议将 Pub/Sub 与 Google Cloud 控制台移动应用、PagerDuty、Webhooks 或 Slack 配对,因为 Pub/Sub 使用不同的传送机制。
要配置 Pub/Sub 通知渠道,请执行以下操作:
如需了解数据架构,请参阅架构示例。
如需接收提醒通知,您还必须创建以下某种订阅:拉取、推送或 BigQuery。
如果订阅与主题位于不同的项目中,请在订阅方项目中创建一个服务账号,并向其授予
roles/pubsub.subscriber
角色。
准备工作
当您向某个 Google Cloud 项目添加第一个 Pub/Sub 通知渠道时,Cloud Monitoring 会为该项目创建一个服务账号。它还会向服务账号授予 Identity and Access Management 角色 Monitoring Notification Service Agent。借助此服务账号,Monitoring 可向此项目中基于 Pub/Sub 的通知渠道发送通知。
该服务账号具有以下格式:
service-PROJECT_NUMBER @gcp-sa-monitoring-notification.iam.gserviceaccount.com
通知服务账号的名称包含唯一的 Google Cloud 项目编号。您可以在 Google Cloud 控制台中该项目的信息中心找到项目名称、ID 和编号,也可以使用以下命令进行检索:
gcloud projects describePROJECT_ID --format="value(project_number)"
您可以使用 Google Cloud 控制台或 Google Cloud CLI 查看和修改服务账号。
启用所需的 API 并创建主题
在您计划创建通知渠道和 Pub/Sub 主题的 Google Cloud 项目中,执行以下操作:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub and Cloud Monitoring APIs.
创建 Pub/Sub 主题。如需了解如何创建主题,请参阅创建主题。 例如,要使用 Google Cloud CLI 创建名为
notificationTopic
的主题,请运行以下命令:gcloud pubsub topics create notificationTopic
接下来,配置 Pub/Sub 通知渠道。
为主题配置通知
如需创建 Pub/Sub 通知渠道,您可以使用 Monitoring API、Google Cloud CLI 或 Google Cloud 控制台。创建通知渠道后,请授权通知服务账号发布您用作通知渠道的每个主题。
如需了解如何使用 Monitoring API 或 Google Cloud CLI 创建通知渠道,请参阅创建渠道。
如需使用 Google Cloud 控制台创建通知渠道,请执行以下操作:
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
- 选择包含您创建的 Pub/Sub 主题的 Google Cloud 项目。
- 点击修改通知渠道。
在 Pub/Sub 部分中,点击新增。
已创建 Pub/Sub 渠道对话框显示 Monitoring 创建的服务账号的名称。
向服务账号授权。您的服务账号可以发布所有主题或特定主题:
如要发布所有主题,请选择管理角色,并添加 Pub/Sub Publisher 角色。
完成配置通知渠道的步骤后,请跳过标题为向服务账号授权,然后转到在提醒政策中设置通知渠道
- 如要发布特定主题,请继续执行下一步,并授权服务账号在您完成通知渠道配置后发布特定主题。如需了解如何向服务账号授权,请参阅向服务账号授权。
- 输入渠道的显示名称和 Pub/Sub 主题名称。
- (可选)如需验证渠道是否已正确配置,请点击发送测试通知。
- 选择添加渠道。
接下来,向服务账号授权。
向服务账号授权
通过授权,通知服务账号可以发布用作通知渠道的每个 Pub/Sub 主题。本部分介绍如何执行以下操作:
- 为特定主题授权服务账号。
- 为所有主题授权服务账号。
为特定主题的服务账号授权
您可以使用 Google Cloud 控制台和 Google Cloud CLI 授权服务账号发布特定主题。本部分介绍了两种方法。
如需使用 Google Cloud 控制台向特定主题的服务账号授权,请执行以下操作:
-
在 Google Cloud 控制台中,前往主题页面:
如果您使用搜索栏查找此页面,请选择子标题为 Pub/Sub 的结果。
- 选择主题。
- 在权限标签页中,选择添加主账号。
- 在新建主账号字段中,输入通知服务账号的名称。该服务账号具有以下命名惯例:
service-
PROJECT_NUMBER @gcp-sa-monitoring-notification.iam.gserviceaccount.com - 选择角色 Pub/Sub Publisher,然后选择保存。
如需使用 Google Cloud CLI 向您的特定主题的服务账号授权,请将该主题的 pubsub.publisher
IAM 角色授予该服务账号。例如,以下命令用于为 notificationTopic
主题配置 IAM 角色:
gcloud pubsub topics add-iam-policy-binding \ projects/PROJECT_NUMBER /topics/notificationTopic --role=roles/pubsub.publisher \ --member=serviceAccount:service-PROJECT_NUMBER @gcp-sa-monitoring-notification.iam.gserviceaccount.com
成功执行 add-iam-policy-binding
命令的响应如下所示:
Updated IAM policy for topic [notificationTopic]. bindings: ‐ members: ‐ serviceAccount:service-PROJECT_NUMBER @gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwWcDOIw1Pc= version: 1
如需了解详情,请参阅pubsub topics add-iam-policy-binding
参考页面。
为所有主题的服务账号授权。
如需向您所有主题的服务账号授权,请执行以下操作:
-
在 Google Cloud 控制台中,进入 IAM 页面:
如果您使用搜索栏查找此页面,请选择子标题为 IAM 和管理的结果。
- 选择包括 Google 提供的角色授予,如以下图片所示:
- 搜索具有以下格式的服务账号:
service-
PROJECT_NUMBER @gcp-sa-monitoring-notification.iam.gserviceaccount.com如果服务账号未列出,请重新加载页面。
- 为通知服务账户选择edit修改,选择添加另一个角色,然后添加角色Pub/Sub 发布者。
接下来,在提醒政策中设置通知渠道。
在提醒政策中设置通知渠道
要在提醒政策中使用 Pub/Sub 通知渠道,请选择 Pub/Sub 作为渠道类型,然后选择主题。
架构示例
如需查看示例 JSON 数据包和架构,请展开以下部分。
JSON 示例
默认情况下,提醒后端会尝试生成版本 1.2 格式的 JSON 数据包。如需详细了解此格式,请参阅下一部分。
以下是此类数据包的示例:
{
"incident": {
"incident_id": "0.opqiw61fsv7p",
"scoping_project_id": "internal-project",
"scoping_project_number": 12345,
"url": "https://console.cloud.google.com/monitoring/alerting/incidents/0.lxfiw61fsv7p?project=internal-project",
"severity": "no severity",
"started_at": 1577840461,
"ended_at": 1577877071,
"state": "closed",
"resource_id": "11223344",
"resource_name": "internal-project gke-cluster-1-default-pool-e2df4cbd-dgp3",
"resource_display_name": "gke-cluster-1-default-pool-e2df4cbd-dgp3",
"resource_type_display_name": "VM Instance",
"resource": {
"type": "gce_instance",
"labels": {
"instance_id": "11223344",
"project_id": "internal-project",
"zone": "us-central1-c"
}
},
"metric": {
"type": "compute.googleapis.com/instance/cpu/utilization",
"displayName": "CPU utilization",
"labels": {
"instance_name": "the name of the VM instance"
}
},
"metadata": {
"system_labels": { "labelkey": "labelvalue" },
"user_labels": { "labelkey": "labelvalue" }
},
"policy_name": "Monitor-Project-Cluster",
"policy_user_labels" : {
"user-label-1" : "important label",
"user-label-2" : "another label"
},
"condition_name": "VM Instance - CPU utilization [MAX]",
"threshold_value": "0.9",
"observed_value": "0.835",
"condition": {
"name": "projects/internal-project/alertPolicies/1234567890123456789/conditions/1234567890123456789",
"displayName": "VM Instance - CPU utilization [MAX]",
"conditionThreshold": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" metadata.system_labels.\"state\"=\"ACTIVE\"",
"aggregations": [
{
"alignmentPeriod": "120s",
"perSeriesAligner": "ALIGN_MEAN"
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.9,
"duration": "0s",
"trigger": {
"count": 1
}
}
},
"documentation": {
"content": "TEST ALERT\n\npolicy.name=projects/internal-project/alertPolicies/1234567890123456789\n\npolicy.display_name=Monitored-Project-NO-GROUPBY\n\ncondition.name=projects/nternal-project/alertPolicies/1234567890123456789/conditions/1234567890123456789\n\ncondition.display_name=VM Instance - CPU utilization [MAX]\n\nproject=internal-project\n\nresrouce.project=internal-project \n\nDONE\n",
"mime_type": "text/markdown",
"subject": "ALERT - No severity",
"links": [
{
"displayName": "Playbook",
"url": "https://myownpersonaldomain.com/playbook?name=${resource.name}"
}
]
},
"summary": "CPU utilization for internal-project gke-cluster-1-16-default-pool-e2df4cbd-dgp3 with metric labels {instance_name=gke-cluster-1-default-pool-e2df4cbd-dgp3} and system labels {state=ACTIVE} returned to normal with a value of 0.835."
},
"version": "1.2"
}
架构结构 1.2 版
本部分介绍载荷架构 1.2 版。一些字段可能未出现在所有返回的数据包中,或者可能具有空值,具体取决于提醒政策的配置、突发事件状态或受监控的资源。一些字段采用嵌入式结构作为值;这些结构也会通过引用进行描述,因为它们的内容也可能会有所不同。
在返回的数据包中,字段可按任意顺序排列。在下面的说明中,会将它们整理到相关组中。
{
"version": "1.2",
"incident": {
突发事件相关信息。
"incident_id"
:字符串,代表为此突发事件生成的 ID。
"scoping_project_id"
:字符串,代表托管指标范围的项目 ID。
"scoping_project_number"
:数字,代表范围项目的项目编号。
"url"
:字符串,代表此突发事件的 Google Cloud 控制台网址。
"started_at"
:数字,代表创建突发事件的时间(以 Unix 纪元秒数表示)。
"ended_at"
:数字,代表结束突发事件的时间(以 Unix 纪元秒数表示)。仅当 state
为 closed
时填充。
"state"
:字符串,代表突发事件 open
或 closed
的状态。如果为 open
,则 ended_at
为 null。
"summary"
:字符串,代表为突发事件生成的文本摘要。
"apigee_url"
:字符串,代表此突发事件的 Apigee 网址,仅适用于 Apigee 资源类型 Environment
和 Proxy*
。
"observed_value"
:字符串,代表观察到的触发/解决提醒的值,如果条件过期,则它可能为空。
为其创建突发事件的受监控资源的相关信息。
"resource": {
"type"
:字符串,代表收到提醒的受监控资源类型的标识符,例如 gce_instance
;请参阅受监控资源列表。
"labels"
:对象,代表与受监控资源关联的标签的键值对。
},
"resource_type_display_name"
:字符串,代表受监控资源类型的显示名。
"resource_id"
:字符串,代表受监控资源的实例 ID,与 resource.labels.instance_id
的值相同。
"resource_display_name"
:字符串,代表受监控资源的显示名。
"resource_name"
:字符串,代表为此受监控资源生成的名称;由其他字段的值组成。
时间序列数据指标类型的相关信息。
"metric": {
"type"
:字符串,代表接收提醒的指标类型的标识符,例如 compute.googleapis.com/instance/cpu/utilization
;请参阅指标列表。
"displayName"
:字符串,代表指标类型的显示名。
"labels"
:对象,代表与指标关联的标签的键值对。
},
"metadata": {
"system_labels"
:对象,代表系统元数据标签的键值对。
"user_labels"
:对象,代表用户元数据标签的键值对。
},
未解决/已解决突发事件的提醒政策和条件的相关信息。
值来自相关的 AlertPolicy
对象。
"policy_name"
:字符串,代表提醒政策的显示名。
"policy_user_labels"
:对象,代表附加到政策的任何用户标签的键值对。
"documentation"
:对象,代表 Documentation
表单的嵌入式结构。
"condition"
:对象,代表 Condition
表单的嵌入式结构。
"condition_name"
:字符串,代表条件的显示名,值与 condition.displayName
相同。
"severity"
:字符串,突发事件的严重程度。
如果在创建提醒政策期间未定义此字段,Cloud Monitoring 会将提醒政策严重程度设置为 no severity
。
"threshold_value"
:字符串,代表此条件的阈值,如果此条件不是阈值条件,则它可能为空。
},
}
弃用政策
载荷架构需遵守 Google Cloud Platform 服务条款第 1.4(d) 条所述的 Google Cloud 弃用政策。请注意,该架构不会控制生成的字段值的格式,这些格式可能会发生变化而不另行通知。例如,incident.summary
、incident.documentation.content
和 incident.url
旨在包含与其字段相关的数据,但该架构并不具备可保证准确解析这些字段的限制条件。您可以将该值作为一个整体进行使用,并希望它遵守弃用政策,但请勿凭借它来解析生成的字段。
借助 Google Cloud Monitoring 应用,您的 Google Chat 聊天室可以接收通知。
准备工作
如果您属于某个组织,则必须有权访问Google Cloud Monitoring 应用,才能安装Google Cloud Monitoring 应用。如果您没有访问权限,请让 Google Workspace 管理员执行以下操作:
安装 Google Cloud “Monitoring”应用
您必须按照以下步骤安装Google Cloud Monitoring 应用。不支持通过 Google Workspace Marketplace 商品详情安装。
如需安装该应用并将聊天室配置为通知渠道,请执行以下操作:
在 Google Chat 中,打开或创建您想接收通知的聊天室。
安装 Google Cloud “Monitoring”应用:
选择您的聊天室名称,然后选择应用和集成。
如果 Google Cloud “监控”应用未显示在“应用”列表中,请返回到您的聊天室,输入
@Google Cloud Monitoring
,然后按 Enter 键。点击添加到聊天室。
将聊天室 ID 复制到剪贴板。
如果您安装了 Google Cloud “Monitoring”应用,则安装确认中会包含聊天室 ID。否则,您可以在聊天室网址末尾的
space/
后面找到一串数字和字母,即聊天室 ID。打开新的浏览器标签页,然后配置通知渠道:
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
点击修改通知渠道。
前往 Google Chat 部分,然后点击新增。
在聊天室 ID 字段中输入您的聊天室 ID,然后点击保存。
-
按需创建渠道
将通知渠道添加到提醒政策时,必须从列表中选择一个渠道。如需在创建提醒政策时更新选项列表,请按以下步骤操作:
- 在通知对话框中,点击管理通知渠道。系统会将您转到新的浏览器标签页中的通知渠道窗口。
- 要添加新的通知渠道,请找到渠道类型,点击新增,然后按照上表中包含的具体渠道说明进行操作:
返回到原始标签页,然后在通知对话框中点击 refresh 刷新。
从更新后的列表中选择通知渠道。
通过不受支持的渠道接收通知
如果您的首选通知渠道不受支持,不妨考虑创建一个依赖于将通知发送到 Pub/Sub 的流水线。如需查看使用 Flask 的 Python 示例,请参阅使用 Cloud Monitoring 和 Cloud Run 创建自定义通知。如需查看其他示例,请参阅 cloud-alerting-notification-forwarding Git 代码库。
测试通知渠道
Cloud Monitoring 不支持为通知渠道提供测试选项。不过,您可以通过创建提醒政策并配置要满足的条件来验证通知渠道是否已正确配置。
如需手动测试通知渠道,您可以创建一个用于监控某个虚拟机 (VM) 实例 CPU 利用率的提醒政策:
可选:如果您的 Google Cloud 项目中还没有虚拟机,或者您想使用其他虚拟机进行测试,请创建一个虚拟机:
-
在 Google Cloud 控制台中,转到虚拟机实例页面:
如果您使用搜索栏查找此页面,请选择子标题为 Compute Engine 的结果。
- 选择创建实例,然后配置虚拟机。如需详细了解如何创建虚拟机,请参阅通过公共映像创建虚拟机实例。
-
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
选择创建政策。
使用选择指标菜单为虚拟机实例选择 CPU 利用率指标。
点击添加过滤条件,然后为您的虚拟机添加过滤条件。
更新 Configure trigger(配置触发器)字段,如下所示:
- 为阈值位置字段选择低于阈值。
请选择一个大于实例 CPU 利用率的值。例如,如果图表显示 CPU 利用率约为 5%,请将阈值设置为 10%。
这些设置用于配置当虚拟机实例的 CPU 利用率低于指定阈值时要满足的条件。由于您选择的阈值大于虚拟机实例的 CPU 利用率,因此满足了提醒政策的条件。
将通知渠道添加到您的政策中。
展开突发事件自动关闭时长,然后选择 30 分钟。
输入政策名称,然后点击创建政策。
满足条件后,请验证您是否在每个通知渠道中都收到了通知。
删除提醒政策。在自动关闭时长到期后,突发事件会自动关闭。
如果您为此测试创建了虚拟机实例,请将其删除。
如果您未收到预期的通知,则可以在日志浏览器中搜索包含有关缺失通知的信息的日志条目。如需了解详情,请参阅未收到通知。
修改和删除通知渠道
如需使用 Google Cloud 控制台修改或删除通知渠道,请执行以下操作:
-
在 Google Cloud 控制台中,转到 notifications 提醒页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
点击修改通知渠道。
通知渠道信息中心包含每种类型的通知渠道的一部分。每个部分列出了该类型的所有配置:
- 如需修改条目,请点击 edit 修改。更改完成后,点击保存。
- 如需删除条目,请点击 删除。点击确认对话框中的删除。
查看通知渠道日志
您可以使用日志浏览器查看通知渠道错误:
-
在 Google Cloud 控制台中,转到 Logs Explorer 页面。
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
输入并运行查询。如需查看与通知渠道错误相关的查询,请参阅 Cloud Monitoring 查询。
后续步骤
如需了解突发事件,请参阅以下文档: