Help us learn about your current experience with the documentation. Take the survey.

集成

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

GitLab 可以通过 webhook 接收器接受来自任何来源的告警。告警通知 可以触发轮班呼叫或用于创建事件

集成列表

拥有至少 Maintainer 角色的用户,可以通过在项目侧边栏菜单中导航到 Settings > Monitor, 并展开 Alerts 部分来查看配置的告警集成列表。该列表显示集成名称、类型和状态(启用或禁用):

显示配置告警详情的表格

配置

GitLab 可以通过您配置的 HTTP 端点接收告警。

单个告警端点

在 GitLab 项目中启用告警端点后,该端点将激活以接收 JSON 格式的告警负载。 您可以随时自定义负载以满足您的需求。

  1. 以具有项目 Maintainer 角色的用户身份登录 GitLab
  2. 在您的项目中转到 Settings > Monitor
  3. 展开 Alerts 部分,在 Select integration type 下拉列表中, 选择 Prometheus 用于来自 Prometheus 的告警,或选择 HTTP Endpoint 用于任何其他监控工具
  4. 切换 Active 告警设置。保存集成后,View credentials 标签页中会显示 webhook 配置的 URL 和 Authorization Key。 您还必须在您的外部服务中输入 URL 和 Authorization Key

告警端点

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

GitLab Premium 中,您可以创建多个 唯一的告警端点来接收来自任何外部源的 JSON 格式告警,并且您可以自定义负载

  1. 以具有项目 Maintainer 角色的用户身份登录 GitLab

  2. 在您的项目中转到 Settings > Monitor

  3. 展开 Alerts 部分

  4. 对于您要创建的每个端点:

    1. 选择 Add new integration

    2. Select integration type 下拉列表中,选择 Prometheus 用于来自 Prometheus 的告警,或选择 HTTP Endpoint 用于任何其他监控工具。查看详情

    3. 为集成命名

    4. 切换 Active 告警设置。保存集成后,View credentials 标签页中会显示 webhook 配置的 URLAuthorization Key。 您还必须在您的外部服务中输入 URL 和 Authorization Key

    5. 可选。要将监控工具告警中的字段映射到 GitLab 字段,请输入示例负载并选择 Parse payload for custom mapping。 需要有效的 JSON。如果您更新示例负载,还必须重新映射字段。对于 Prometheus 集成,请输入来自负载 alerts 键的单个告警,而不是整个负载

    6. 可选。如果您提供了有效的示例负载,请选择 Payload alert key 中的每个值以映射到 GitLab alert key

    7. 要保存您的集成,请选择 Save Integration。如果需要,您可以在集成创建后,从集成页面的 Send test alert 标签页发送测试告警

新的 HTTP 端点将显示在集成列表中。 您可以通过选择集成列表右侧的 settings 设置图标来编辑集成。

自定义告警中的字段映射

您可以将监控工具的告警格式与 GitLab 告警集成。要在告警列表告警详情页面中显示正确的信息,请在创建 HTTP 端点时, 将告警的字段映射到 GitLab 字段:

告警管理列表

将集成凭据添加到 Alertmanager(仅限 Prometheus 集成)

要将 Prometheus 告警通知发送到 GitLab,请将 URL 和授权密钥从您的 Prometheus 集成复制到 Prometheus Alertmanager 配置的 webhook_configs 部分:

receivers:
  - name: gitlab
    webhook_configs:
      - http_config:
          authorization:
            type: Bearer
            credentials: 1234567890abdcdefg
        send_resolved: true
        url: http://IP_ADDRESS:PORT/root/manual_prometheus/prometheus/alerts/notify.json
        # Rest of configuration omitted
        # ...

在 GitLab 外部自定义告警负载

预期的 HTTP 请求属性

对于没有自定义映射的 HTTP 端点,您可以通过发送以下参数来自定义负载。 所有字段都是可选的。如果传入的告警不包含 Title 字段的值,则应用默认值 New: Alert

属性 类型 描述
title String 告警的标题
description String 问题的高级摘要
start_time DateTime 告警发生的时间。如果未提供,则使用当前时间
end_time DateTime 告警的解决时间。如果提供,则告警将被解决
service String 受影响的服务
monitoring_tool String 关联监控工具的名称
hosts String 或 Array 一个或多个主机,表示此事件发生的位置
severity String 告警的严重性。不区分大小写。可以是:criticalhighmediumlowinfounknown。如果缺失或值不在此列表中,默认为 critical
fingerprint String 或 Array 告警的唯一标识符。可用于对相同告警的出现进行分组。当启用 generic_alert_fingerprinting 功能时,指纹会根据负载自动生成(不包括 start_timeend_timehosts 参数)
gitlab_environment_name String 关联的 GitLab 环境名称。在仪表板上显示告警时必需

您还可以向告警负载添加自定义字段。额外参数的值不仅限于基本类型(如字符串或数字), 还可以是嵌套的 JSON 对象。例如:

{ "foo": { "bar": { "baz": 42 } } }

确保您的请求小于 payload 应用限制

示例请求体

示例负载:

{
  "title": "事件标题",
  "description": "事件的简短描述",
  "start_time": "2019-09-12T06:00:55Z",
  "service": "受影响的服务",
  "monitoring_tool": "值",
  "hosts": "值",
  "severity": "high",
  "fingerprint": "d19381d4e8ebca87b55cda6e8eee7385",
  "foo": {
    "bar": {
      "baz": 42
    }
  }
}

预期的 Prometheus 请求属性

告警应格式化为 Prometheus webhook 接收器

顶级必需属性:

  • alerts
  • commonAnnotations
  • commonLabels
  • externalURL
  • groupKey
  • groupLabels
  • receiver
  • status
  • version

从 Prometheus 负载中的 alerts,为数组中的每个项目创建一个 GitLab 告警。 您可以更改下面列出的嵌套参数来配置 GitLab 告警。

属性 类型 必需 描述
annotations/titleannotations/summarylabels/alertname 之一 String 告警的标题
startsAt DateTime 告警的开始时间
annotations/description String 问题的高级摘要
annotations/gitlab_incident_markdown String 要附加到从告警创建的任何事件的 GitLab Flavored Markdown
annotations/runbook String 文档或如何管理此告警的说明链接
endsAt DateTime 告警的解决时间
generatorUrl 中的 g0.expr 查询参数 String 关联指标的查询
labels/gitlab_environment_name String 关联的 GitLab 环境名称。在仪表板上显示告警时必需
labels/severity String 告警的严重性。应该是 Prometheus 严重性选项 之一。如果缺失或值不在此列表中,默认为 critical
status String Prometheus 中告警的状态。如果值为 ‘resolved’,则告警已解决
annotations/gitlab_y_labelannotations/titleannotations/summarylabels/alertname 之一 String 在将此告警的指标嵌入 GitLab Flavored Markdown 时使用的 Y 轴标签

annotations 下包含的其他属性在告警详情页面上可用。 任何其他属性都将被忽略。

属性不仅限于基本类型(如字符串或数字),还可以是嵌套的 JSON 对象。例如:

{
    "target": {
        "user": {
            "id": 42
        }
    }
}

确保您的请求小于 payload 应用限制

Prometheus 严重性选项

来自 Prometheus 的告警可以为 告警严重性 提供以下任何不区分大小写的值:

  • Critical: criticals1p1emergencyfatal
  • High: highs2p2majorpage
  • Medium: mediums3p3erroralert
  • Low: lows4p4warnwarning
  • Info: infos5p5debuginformationnotice

如果值缺失或不在列表中,严重性默认为 critical

示例 Prometheus 告警

示例告警规则:

groups:
- name: example
  rules:
  - alert: ServiceDown
    expr: up == 0
    for: 5m
    labels:
      severity: high
    annotations:
      title: "示例标题"
      runbook: "http://example.com/my-alert-runbook"
      description: "服务已停机超过 5 分钟。"
      gitlab_y_label: "y 轴标签"
      foo:
        bar:
          baz: 42

示例请求负载:

{
  "version" : "4",
  "groupKey": null,
  "status": "firing",
  "receiver": "",
  "groupLabels": {},
  "commonLabels": {},
  "commonAnnotations": {},
  "externalURL": "",
  "alerts": [{
    "startsAt": "2022-010-30T11:22:40Z",
    "generatorURL": "http://host?g0.expr=up",
    "endsAt": null,
    "status": "firing",
    "labels": {
      "gitlab_environment_name": "production",
      "severity": "high"
    },
    "annotations": {
      "title": "示例标题",
      "runbook": "http://example.com/my-alert-runbook",
      "description": "服务已停机超过 5 分钟。",
      "gitlab_y_label": "y 轴标签",
      "foo": {
        "bar": {
          "baz": 42
        }
      }
    }
  }]
}

触发测试告警时,输入整个负载如示例所示。 当配置自定义映射时,仅输入 alerts 数组中的第一个项目作为示例负载。

授权

接受以下授权方法:

  • Bearer 授权头
  • 基本身份验证

<authorization_key><url> 值可以在配置告警集成时找到。

Bearer 授权头

授权密钥可以用作 Bearer 令牌:

curl --request POST \
  --data '{"title": "事件标题"}' \
  --header "Authorization: Bearer <authorization_key>" \
  --header "Content-Type: application/json" \
  <url>

基本身份验证

授权密钥可以用作 passwordusername 留空:

  • username: <blank>
  • password: <authorization_key>
curl --request POST \
  --data '{"title": "事件标题"}' \
  --header "Authorization: Basic <base_64_encoded_credentials>" \
  --header "Content-Type: application/json" \
  <url>

基本身份验证也可以直接在 URL 中使用凭据:

curl --request POST \
  --data '{"title": "事件标题"}' \
  --header "Content-Type: application/json" \
  <username:password@url>

在 URL 中使用授权密钥不安全,因为它在服务器日志中可见。如果您的工具支持,我们建议 使用前面描述的头部选项之一。

响应体

JSON 响应体包含请求中创建的任何告警列表:

[
  {
    "iid": 1,
    "title": "事件标题"
  },
  {
    "iid": 2,
    "title": "第二个事件标题"
  }
]

成功响应返回 200 响应代码。

触发测试告警

项目维护者或所有者配置集成后, 您可以触发测试告警以确认您的集成正常工作。

  1. 以至少具有 Developer 角色的用户身份登录
  2. 在您的项目中转到 Settings > Monitor
  3. 选择 Alerts 展开该部分
  4. 选择列表中集成右侧的 settings 设置图标
  5. 选择 Send test alert 标签页打开它
  6. 在负载字段中输入测试负载(需要有效的 JSON)
  7. 选择 Send

GitLab 会根据测试结果显示错误或成功消息。

相同告警的自动分组

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

GitLab 根据负载对告警进行分组。当传入的告警包含与另一个告警相同的负载 (不包括 start_timehosts 属性)时,GitLab 将这些告警分组在一起, 并在告警管理列表和详情页面上显示计数器。

如果现有告警已经是 resolved 状态,GitLab 将创建一个新告警。

告警管理列表

恢复告警

当 HTTP 端点接收到设置了告警结束时间的负载时,GitLab 中的告警会自动解决。 对于没有自定义映射的 HTTP 端点,预期字段是 end_time。 使用自定义映射时,您可以选择预期字段。

GitLab 根据可以作为负载一部分提供的 fingerprint 值来确定要解决哪个告警。 有关告警属性和映射的更多信息,请参阅 在 GitLab 外部自定义告警负载

您还可以配置在告警解决时自动关闭关联的事件

链接到您的 Opsgenie 告警

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

我们正在通过 HTTP 端点集成 与 Opsgenie 和其他告警工具 进行更深入的集成,以便您可以在 GitLab 界面中查看告警。

您可以使用 GitLab 与 Opsgenie 的集成来监控告警。

如果您启用 Opsgenie 集成,则不能同时激活其他 GitLab 告警服务。

要启用 Opsgenie 集成:

  1. 以至少具有 Maintainer 角色的用户身份登录
  2. 转到 Monitor > Alerts
  3. Integrations 选择框中,选择 Opsgenie
  4. 选择 Active 切换
  5. API URL 字段中,输入您的 Opsgenie 集成的 URL,例如 https://app.opsgenie.com/alert/list
  6. 选择 Save changes

启用集成后,转到 Monitor > AlertsAlerts 页面,然后选择 View alerts in Opsgenie