# huaweicloud-aom-pushevents-java
**Repository Path**: HuaweiCloudDeveloper/huaweicloud-aom-pushevents-java
## Basic Information
- **Project Name**: huaweicloud-aom-pushevents-java
- **Description**: 解决问题:帮助用户更好的使用api上报事件告警
示例功能描述:上报事件告警
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master-dev
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-07-12
- **Last Updated**: 2025-06-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 功能介绍
华为云提供了应用运维管理服务端SDK,您可以直接集成服务端SDK来调用应用运维管理服务的相关API,从而实现对应用运维管理服务的快速操作。
当用户想要将外部服务产生的事件、告警在AOM进行展示时,用户可通过此接口上报外部服务产生的事件、告警。
该示例展示了用户如何将外部A服务下B主机的CPU使用率的Major级别的告警信息,通过接口上报到AOM。
用户可通过参考链接了解如何区分告警和事件和上报事件告警信息API详细描述。
[如何区分告警和事件](https://support.huaweicloud.com/faq-aom2/aom_06_0008.html)
[上报事件告警信息API](https://support.huaweicloud.com/api-aom/PushEvents.html)
## 前置条件
### 获取AK/SK
开发者在使用前需先获取账号的ak、sk、endpoint、projectId。
您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)。请在华为云控制台“我的凭证-访问密钥”页面上创建和查看您的 AK/SK。更多信息请查看访问密钥。
endpoint华为云各服务应用区域和各服务的终端节点,详情请查看地区和终端节点。可在AomRegion类里查看现有的,或者使用new Region("id","endpoint")。
projectId云服务所在项目ID,根据你想操作的项目所属区域选择对应的项目ID。
### 运行环境
Java JDK 1.8 及其以上版本。
### SDK获取和安装
您可以通过Maven配置所依赖的应用运维管理SDK
```xml
com.huaweicloud.sdk
huaweicloud-sdk-aom
3.1.47
```
## 示例代码
```java
package com.huawei.aom.demo;
import com.huaweicloud.sdk.aom.v2.AomClient;
import com.huaweicloud.sdk.aom.v2.model.EventList;
import com.huaweicloud.sdk.aom.v2.model.EventModel;
import com.huaweicloud.sdk.aom.v2.model.PushEventsRequest;
import com.huaweicloud.sdk.aom.v2.model.PushEventsResponse;
import com.huaweicloud.sdk.aom.v2.region.AomRegion;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PushEventsSolution {
private static final Logger LOGGER = LoggerFactory.getLogger(PushEventsSolution.class);
public static void main(String[] args) {
// 事件或者告警产生的时间,CST毫秒级时间戳
long startsAt = System.currentTimeMillis();
// 事件或者告警清除的时间,CST毫秒级时间戳,为0时表示未删除
long endsAt = 0L;
// 告警自动清除时间。毫秒数,例如一分钟则填写为60000。默认清除时间为3天,对应数字为 4320 * 1000(即:3天 * 24小时 * 60分钟 * 1000毫秒)
long timeout = 60000L;
// 事件或者告警附加字段 可为空
Map annotations = new HashMap<>();
// 事件或者告警预留字段 为空
Map attachRule = new HashMap<>();
// 事件或告警详情
List events = new ArrayList<>();
// 事件或者告警id,系统会自动生成,上报无须填写该字段
events.add(new EventModel().withId("id")
.withStartsAt(startsAt)
.withEndsAt(endsAt)
.withTimeout(timeout)
.withMetadata(getMetaData("cpu使用率超过阈值", "Major", "alarm", "A服务", "主机", "B"))
.withAnnotations(annotations)
.withAttachRule(attachRule));
EventList body = new EventList();
body.withEvents(events);
PushEventsRequest request = new PushEventsRequest();
// 接口请求动作。action=clear代表清除告警,不传或者传其他值默认为上报动作
request.withAction(PushEventsRequest.ActionEnum.fromValue(""));
request.withBody(body);
// 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
String projectId = "";
ICredential auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
AomClient client = AomClient.newBuilder().withCredential(auth).withRegion(AomRegion.CN_NORTH_4).build();
try {
PushEventsResponse response = client.pushEvents(request);
LOGGER.info(response.toString());
} catch (ConnectionException | ServiceResponseException | RequestTimeoutException e) {
LOGGER.error(e.toString());
}
}
/**
* 拼接告警或事件信息
* @param eventName 事件或者告警名称
* @param eventSeverity 事件级别枚举值。四种类型 "Critical", "Major", "Minor", "Info"
* @param eventType 事件类别枚举值。event为普通告警,alarm为告警事件
* @param resourceProvider 事件对应云服务名称
* @param resourceType 事件对应资源类型
* @param resourceId 事件对应资源信息
* @return 告警或事件详情
*/
public static Map getMetaData(String eventName, String eventSeverity, String eventType,
String resourceProvider, String resourceType, String resourceId) {
Map metadata = new HashMap<>();
metadata.put("event_name", eventName);
metadata.put("event_severity", eventSeverity);
metadata.put("event_type", eventType);
metadata.put("resource_provider", resourceProvider);
metadata.put("resource_type", resourceType);
metadata.put("resource_id", resourceId);
return metadata;
}
}
```
## 返回示例
用户可在应用运维管理AOM告警列表或事件列表中查看到上报的告警或事件。
或通过调用[查询事件告警API](https://support.huaweicloud.com/api-aom/ListEvents.html)查看上报的告警或事件
## 参考链接
[如何区分告警和事件](https://support.huaweicloud.com/faq-aom2/aom_06_0008.html)
[上报事件告警信息API](https://support.huaweicloud.com/api-aom/PushEvents.html)
[查询事件告警API](https://support.huaweicloud.com/api-aom/ListEvents.html)
更多信息请参考 [应用运维管理AOM](https://support.huaweicloud.com/aom/index.html)
## 修订记录
| 发布日期 | 文档版本 | 修订说明 |
|------------| ------------ | ------------ |
| 2023-08-14 | 1.0 | 文档首次发布 |