首批通过分布式安全可靠测评,为关键业务系统打造
告警 API 调用示例
更新时间:2026-04-14 11:55:54
本节提供脚本示例供用户了解如何对接告警 API 及测试告警 API 。
调用 OCP 接口示例
以下脚本以"推送告警事件接口"为例,介绍如何调用该接口。
说明
推送告警事件是指将告警推送给 OCP ,让 OCP 来处理告警消息。
#!/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 脚本示例,更多示例可参考 查看告警通道配置示例。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 注意:脚本内容第一行必须是 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 触发告警:
暂时停止 OCP-Agent 来触发 Agent 不可用相关告警如
exporter数量不足告警。查看第三方平台是否收到该告警。
OCP 通道设置中有测试功能,可直接通过 发送测试消息 按钮进行测试。参考 新建告警通道。
还可以通过上述 "推送 OCP 告警事件接口" 来构造告警,并通过告警通道脚本来发送告警到第三方平台。
告警 API 接入示例
以下为您介绍将 OCP 的告警接入到用户告警平台的操作。
背景信息
将 OCP 的告警接入用户告警平台时,需使用查询告警事件的 API,详情参见 查询告警事件 。
场景 1:查看实时告警
当您需要查看系统中的实时告警时,可参考代码示例中的内容进行操作,定时请求查询告警事件列表接口即可获取到当前正在告警的对象。
代码示例
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 即可:
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 说明 告警通道配置样例 。 |
场景 2 对接客户告警平台
参考场景 1 中的代码示例,需定时请求请求查询告警事件列表接口,并更新已接收到的告警对象(target)的状态。
更新信息有:
最近一次告警时间:根据告警触发时间可计算出告警持续时长。
告警状态:若每批次(多个翻页请求获取全部告警中的告警为一个批次)请求接口未返回某个 target 的告警,则该告警置为已恢复状态。
可按告警等级维度实时统计各个告警等级"告警中"的告警数量。
场景 3 验证告警可用性
为防止因告警不可用而未暴露重要风险的隐患,可参考代码示例定期主动触发一次告警,验证告警链路的可用性。
代码示例
主动触发一次告警,如触发日志告警:在某个 OBServer 节点的运行日志中写入下述 ERROR 日志。
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输入如下命令,请求 API 验证该日志告警。
请求参数中,设置关键字(keyword)为日志内容:
系统中出现告警,则证明告警链路可用。