Amazon CloudWatch 事件
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 PutEvents 添加事件

PutEvents 操作在一次请求中将多个事件发送到 CloudWatch Events。每个 PutEvents 请求可支持有限数目的条目。有关更多信息,请参阅 CloudWatch Events 限制PutEvents 操作将尝试按请求的自然顺序处理所有条目。在调用 PutEvents 后,每个事件均将获得由 CloudWatch Events 分配的唯一 ID。

以下示例 Java 代码将两个相同的事件发送到 CloudWatch Events:

Copy
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); PutEventsRequest request = new PutEventsRequest() .withEntries(requestEntry, requestEntry); PutEventsResult result = awsEventsClient.putEvents(request); for (PutEventsResultEntry resultEntry : result.getEntries()) { if (resultEntry.getEventId() != null) { System.out.println("Event Id: " + resultEntry.getEventId()); } else { System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode()); } }

PutEvents 结果包含响应条目的数组。响应数组中的每个条目按自然顺序 (从请求和响应的顶部到底部) 直接与请求数组中的一个条目关联。响应 Entries 数组包含的条目数量始终与请求数组相同。

处理使用 PutEvents 时出现的失败情况

默认情况下,请求内的单个条目的失败不会中止对请求中后续条目的处理。这意味着,响应条目数组包含处理成功和不成功的条目。您必须删除处理不成功的条目并在后续调用中包括它们。

成功的结果条目包含 ID 值,不成功的结果条目包含 ErrorCodeErrorMessage 值。ErrorCode 参数反映错误的类型。ErrorMessage 提供有关错误的更多详细信息。以下示例具有针对 PutEvents 请求的三个结果条目。第二个条目失败,并且反映在响应中。

示例:PutEvents 响应语法

Copy
{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }

处理不成功的条目可包含在后续 PutEvents 请求中。首先,查看 PutEventsResult 中的 FailedRecordCount 参数以确认请求中是否存在失败的记录。如果存在,则应将每个具有 ErrorCode (不为空) 的 Entry 添加到后续请求中。有关此类处理程序的示例,请参阅以下代码。

示例:PutEvents 失败处理程序

Copy
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>(); for (int i = 0; i < 3; i++) { putEventsRequestEntryList.add(requestEntry); } PutEventsRequest putEventsRequest = new PutEventsRequest(); putEventsRequest.withEntries(putEventsRequestEntryList); PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest); while (putEventsResult.getFailedEntryCount() > 0) { final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>(); final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries(); for (int i = 0; i < PutEventsResultEntryList.size(); i++) { final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i); final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i); if (putEventsResultEntry.getErrorCode() != null) { failedEntriesList.add(putEventsRequestEntry); } } putEventsRequestEntryList = failedEntriesList; putEventsRequest.setEntries(putEventsRequestEntryList); putEventsResult = awsEventsClient.putEvents(putEventsRequest); }

使用 AWS CLI 发送事件

可使用 AWS CLI 发送自定义事件。以下示例将一个自定义事件放入 CloudWatch Events 中:

Copy
aws events put-events \ --entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]'

您还可以创建文件,例如 entries.json,如下所示:

Copy
[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]

可使用 AWS CLI 读取该文件中的条目并发送事件。在命令提示符下,输入:

Copy
aws events put-events --entries file://entries.json