

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 傳送自訂事件
<a name="CloudWatch-RUM-custom-events"></a>

CloudWatch RUM 會記錄並提取 [CloudWatch RUM Web 用戶端所收集的資訊](CloudWatch-RUM-datacollected.md) 中列出的事件。如果您使用的是 CloudWatch RUM Web 用戶端 1.12.0 版或更新版本，則可以定義、記錄和傳送其他自訂事件。您可以為您定義的每個事件類型定義事件類型名稱和要傳送的資料。每個自訂事件承載最多可達 6 KB。

只有在應用程式監視器啟用自訂事件時，才會擷取自訂事件。若要更新應用程式監視器的組態設定，請使用 CloudWatch RUM 主控台或 [UpdateAppMonitor](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_UpdateAppMonitor.html) API。

啟用自訂事件後，接著定義並傳送自訂事件，之後您就可以搜尋這些事件。若要搜尋這些事件，請使用 CloudWatch RUM 主控台中的 **Events** (事件) 索引標籤。使用事件類型進行搜尋。

## 要求與語法
<a name="CloudWatch-RUM-custom-event-syntax"></a>

自訂事件包含事件類型和事件詳細資料。具體要求如下：
+ **事件類型**
  + 這可以是事件的 **type** (類型) 或 **name** (名稱)。例如，CloudWatch RUM 內建的事件類型稱為 **JsError**，事件類型為 `com.amazon.rum.js_error_event`。
  + 長度必須介於 1 與 256 個字元之間。
  + 可以是英數字元、底線、連字號和句點的組合。
+ **事件詳細資訊**
  + 包含您要在 CloudWatch RUM 記錄的實際資料。
  + 必須是由欄位和值組成的物件。

## 記錄自訂事件的範例
<a name="CloudWatch-RUM-custom-event-examples"></a>

有兩種方法可以在 CloudWatch RUM Web 用戶端中記錄自訂事件。
+ 使用 CloudWatch RUM Web 用戶端的 `recordEvent` API。
+ 使用自訂外掛程式。

**使用 `recordEvent` API傳送自訂事件 (NPM 範例)**

```
awsRum.recordEvent('my_custom_event', {
        location: 'IAD', 
        current_url: 'amazonaws.com', 
        user_interaction: {
            interaction_1 : "click",
            interaction_2 : "scroll"
        }, 
        visit_count:10
    }
)
```

**使用 `recordEvent` API 傳送自訂事件 (內嵌指令碼範例)**

```
cwr('recordEvent', {
    type: 'my_custom_event', 
    data: {
        location: 'IAD', 
        current_url: 'amazonaws.com', 
        user_interaction: {
            interaction_1 : "click",
            interaction_2 : "scroll"
        }, 
        visit_count:10
    }
})
```

**使用自訂外掛程式傳送自訂事件的範例**

```
// Example of a plugin that listens to a scroll event, and
// records a 'custom_scroll_event' that contains the timestamp of the event.
class MyCustomPlugin implements Plugin {
    // Initialize MyCustomPlugin.
    constructor() {
        this.enabled;
        this.context;
        this.id = 'custom_event_plugin';
    }
    // Load MyCustomPlugin.
    load(context) {
        this.context = context;
        this.enable();
    }
    // Turn on MyCustomPlugin.
    enable() {
        this.enabled = true;
        this.addEventHandler();
    }
    // Turn off MyCustomPlugin.
    disable() {
        this.enabled = false;
        this.removeEventHandler();
    }
    // Return MyCustomPlugin Id.
    getPluginId() {
        return this.id;
    }
    // Record custom event.
    record(data) {
        this.context.record('custom_scroll_event', data);
    }
    // EventHandler.
    private eventHandler = (scrollEvent: Event) => {
        this.record({timestamp: Date.now()})
    }
    // Attach an eventHandler to scroll event.
    private addEventHandler(): void {
        window.addEventListener('scroll', this.eventHandler);
    }
    // Detach eventHandler from scroll event.
    private removeEventHandler(): void {
        window.removeEventListender('scroll', this.eventHandler);
    }
}
```