---
title: "告警 API 调用示例 - 云平台 OCP V4.3.0 | OceanBase 文档中心"
description: "告警 API 调用示例 本节提供脚本示例供用户了解如何对接告警 API 及测试告警 API 。 调用 OCP 接口示例 以下脚本以&quot;推送告警事件接口&quot;为例，介绍如何调用该接口。 说明 推送告警事件是指将告警推送给 OCP ，让 OCP 来处理告警消息。 #!/usr/bin/env python # -*- codi…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*lJTmRZ61jSUAAAAAAAAAAAAADiGDAQ/original) 云平台 OCPV 4.3.0

# 告警 API 调用示例

更新时间：2026-04-14 11:55:54

[编辑](https://github.com/oceanbase/ocp-doc/edit/V4.3.0/zh-CN/1900.reference-guide/200.api-reference/1000.alert/100.call-an-alert-api.md)  

本节提供脚本示例供用户了解如何对接告警 API 及测试告警 API 。

## 调用 OCP 接口示例

以下脚本以"推送告警事件接口"为例，介绍如何调用该接口。

#### 说明

推送告警事件是指将告警推送给 OCP ，让 OCP 来处理告警消息。

```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import base64
import requests
import json

data = {
    "alarmType": "your_alarm_type",
    "labels": {"key":"value"},
    "target":"alarm_target",
}

base64userpass = base64.b64encode('{0}:{1}'.format('username', 'password'))
headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    "Authorization": "Basic %s" % base64userpass,
}

resp = requests.post(url='http://xxx.xxx.xxx.xxx:8080/api/v2/alarm/alarms', headers=headers, data=json.dumps(data))
jresp = json.loads(resp.text)
print(jresp)

```

## 对接 OCP 告警示例

OCP 产生告警后，告警消息通过告警通道发送出去，通道可配置 Shell 脚本和 Python 脚本。该示例描述如何将告警通过通道发送出去。`send_alarm` 函数通过 os.environ 从环境变量获取告警相关的变量值。

以下为 Python 脚本示例，更多示例可参考 [查看告警通道配置示例](https://www.oceanbase.com/docs/common-ocp-1000000000826645)。

# 注意：脚本内容第一行必须是 shebang 指定执行的程序，只支持 python 和 bash

import json
import requests
import os
import sys

ACCESS_TOKEN = "Ding Talk Token"

def send_alarm():
    """
    可以通过 os.environ 从环境变量获取 告警相关的变量值。
    支持的变量列表参见 《用户指南/附录4 OCP 告警模板变量》。
    """
    message = os.environ['message']
    data = {
        "msgtype": "markdown",
        "markdown": {
            "text": message
        }
    }
    resp = requests.post("https://oapi.dingtalk.com/robot/send?access_token=" + ACCESS_TOKEN, json=data)
    resp.close()
    response = json.loads(resp.text)

    # 将返回结果输入到标准错误（stderr）或标准输出（stdout），会被用于验证告警是否发送成功，优先验证stderr。
    if not response['errcode'] == 0:
        sys.stderr.write(resp.text)
    else:
        print(resp.text)

def main():
    """
    若发送成功，返回值为 0
    若发送失败，错误输出到 stderr，返回值不为 0
    """
    try:
        send_alarm()
        return 0
    except Exception as e:
        sys.stderr.write(str(e))
        return 1

if __name__ == "__main__":
    sys.exit(main())

```

## 应用举例

如需测试告警链路是否正常即告警是否可以推送到第三方告警平台，除了可以：

- 在 OCP 触发告警：

     1. 暂时停止 OCP-Agent 来触发 Agent 不可用相关告警如 `exporter数量不足` 告警。
     2. 查看第三方平台是否收到该告警。
 - OCP 通道设置中有测试功能，可直接通过 **发送测试消息** 按钮进行测试。参考 [新建告警通道](https://www.oceanbase.com/docs/common-ocp-1000000000826643)。

还可以通过上述 "推送 OCP 告警事件接口" 来构造告警，并通过告警通道脚本来发送告警到第三方平台。

## 告警 API 接入示例

以下为您介绍将 OCP 的告警接入到用户告警平台的操作。

### 背景信息

将 OCP 的告警接入用户告警平台时，需使用查询告警事件的 API，详情参见 [查询告警事件](https://www.oceanbase.com/docs/common-ocp-1000000000827438) 。

### 场景 1：查看实时告警

当您需要查看系统中的实时告警时，可参考代码示例中的内容进行操作，定时请求查询告警事件列表接口即可获取到当前正在告警的对象。

#### 代码示例

```javascript
curl 'http://OCP-IP:8080/api/v2/alarm/alarms?isSubscribedByMe=false&status=Active&page=1&size=10' \
--user username:password \
--compressed \
--insecure

```

其中`data.page.totalPages`是为实时告警的总页数，可选择查看某一页的告警：如需要查看第2页数据时，将 page 数设置为 2 即可：

```javascript
curl 'http://OCP-IP:8080/api/v2/alarm/alarms?isSubscribedByMe=false&status=Active&page=2&size=10' \
--user username:password \
--compressed \
--insecure

```

关键信息说明：

| 参数 | 说明 |
| --- | --- |
| alarmType | 告警规则名。 |
| activeAt | 告警触发时间，格林尼治标准时间，使用时需转换为当地时间。 |
| updatedAt | 告警更新时间，格林尼治标准时间，使用时需转换为当地时间。 |
| target | 告警对象，如某个集群的某个租户。 |
| description | 告警描述信息。 |
| summary | 告警概述信息。 |
| level | 告警等级。 |
| labels | 其他信息，如：集群（历史版本中为 obregion 或 ob_cluster），租户（tenant_name），主机 IP（svr_ip）等；后缀为_1、_2、_3的为非标准国际化内容，如非必要请不要使用，高版本不兼容该字段。 当前可用的一些 label 说明 [告警通道配置样例](https://www.oceanbase.com/docs/common-ocp-1000000000826645) 。 |

### 场景 2 对接客户告警平台

参考场景 1 中的代码示例，需定时请求请求查询告警事件列表接口，并更新已接收到的告警对象（target）的状态。

更新信息有：

- 最近一次告警时间：根据告警触发时间可计算出告警持续时长。
 - 告警状态：若每批次（多个翻页请求获取全部告警中的告警为一个批次）请求接口未返回某个 target 的告警，则该告警置为已恢复状态。
 - 可按告警等级维度实时统计各个告警等级"告警中"的告警数量。

### 场景 3 验证告警可用性

为防止因告警不可用而未暴露重要风险的隐患，可参考代码示例定期主动触发一次告警，验证告警链路的可用性。

#### 代码示例

1. 主动触发一次告警，如触发日志告警：在某个 OBServer 节点的运行日志中写入下述 ERROR 日志。

   ```javascript
   echo '[2035-01-02 15:04:05.666666] ERROR [CLOG] update_free_quota (ob_log_file_pool.cpp:413) [1994][2072][Y0-0000000000000000] [lt=19] [dc=0] test ob error for ocp alarm, just ignore. ret=-999999' >> /home/admin/oceanbase/log/observer.log.wf

   ```
 2. 输入如下命令，请求 API 验证该日志告警。
 3. 请求参数中，设置关键字（keyword）为日志内容：
 4. 系统中出现告警，则证明告警链路可用。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
