管理高基數操作 - Amazon CloudWatch

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

管理高基數操作

Application Signals 包含 CloudWatch 代理程式中的設定,可用來管理操作的基數,以及管理指標匯出以最佳化成本。根據預設,當服務一段時間內不同操作的數量超過預設閾值 500 時,指標限制函數會變成作用中。您可以透過調整組態設定來調整行為。

判斷是否啟用指標限制

您可以使用下列方法來尋找是否發生預設指標限制。如果是,您應該考慮遵循下一節中的步驟來最佳化基數控制。

  • 在 CloudWatch 主控台中,選擇 Application SignalsServices。如果您看到名為 AllOtherOperations 的操作或名為 AllOtherRemoteOperations 的 RemoteOperation,則會發生指標限制。 AllOtherRemoteOperations

  • 如果 Application Signals 收集的任何指標具有其Operation維度AllOtherOperations的值,則會發生指標限制。

  • 如果 Application Signals 收集的任何指標具有其RemoteOperation維度AllOtherRemoteOperations的值,則會發生指標限制。

最佳化基數控制

若要最佳化基數控制,您可以執行下列動作:

  • 建立自訂規則以彙總操作。

  • 設定您的指標限制政策。

建立自訂規則以彙總操作

高基數操作有時可能是由從內容中擷取的不適當的唯一值所造成。例如,在路徑中傳送包含使用者 IDs或工作階段 IDs HTTP/S 請求可能會導致數百個不同的操作。若要解決此類問題,建議您使用自訂規則來設定 CloudWatch 代理程式,以重寫這些操作。

如果透過個別RemoteOperation呼叫產生許多不同的指標,例如 PUT /api/customer/owners/123PUT /api/customer/owners/456和類似請求,我們建議您將這些操作合併為單一 RemoteOperation。其中一種方法是將所有以 開頭的RemoteOperation呼叫標準化PUT /api/customer/owners/為統一格式,特別是 PUT /api/customer/owners/{ownerId}。下列的範例示範了這一點。如需其他自訂規則的詳細資訊,請參閱 啟用 CloudWatch Application Signals

{ "logs":{ "metrics_collected":{ "application_signals":{ "rules":[ { "selectors":[ { "dimension":"RemoteOperation", "match":"PUT /api/customer/owners/*" } ], "replacements":[ { "target_dimension":"RemoteOperation", "value":"PUT /api/customer/owners/{ownerId}" } ], "action":"replace" } ] } } } }

在其他情況下,高基數指標可能已彙總至 AllOtherRemoteOperations,而且可能不清楚包含哪些特定指標。CloudWatch 代理程式能夠記錄捨棄的操作。若要識別捨棄的操作,請使用下列範例中的 組態來啟用記錄,直到問題重新浮現為止。然後檢查 CloudWatch 代理程式日誌 (可透過容器stdout或 EC2 日誌檔案存取),並搜尋關鍵字 drop metric data

{ "agent": { "config": { "agent": { "debug": true }, "traces": { "traces_collected": { "application_signals": { } } }, "logs": { "metrics_collected": { "application_signals": { "limiter": { "log_dropped_metrics": true } } } } } } }

建立指標限制政策

如果預設指標限制組態無法解決服務的基數,您可以自訂指標限制器組態。若要這樣做,請在 CloudWatch Agent 組態檔案中的 logs/metrics_collected/application_signals區段limiter下新增區段。

下列範例會將指標限制的閾值從 500 個不同的指標降至 100 個。

{ "logs": { "metrics_collected": { "application_signals": { "limiter": { "drop_threshold": 100 } } } } }