本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
監控服務事件
Service Events 為使用 CloudWatch Application Signals 監控的服務提供自動化的深度可觀測性。它會擷取錯誤指標、函數層級效能資料、事件快照 (當請求超過延遲閾值或擲回例外狀況時) 和部署事件,而不需要額外的程式碼變更。
服務事件的運作方式
Service Events 會從您的檢測服務收集下列類型的訊號:
錯誤指標 — Per-exception-type錯誤計數和每個操作的速率,可讓您識別哪些例外狀況最常發生和出現趨勢。
函數呼叫指標 — 應用程式程式碼中個別函數的調用計數、持續時間和錯誤率。
事件快照 — 請求超過延遲閾值或擲回例外狀況時觸發的詳細擷取,包括堆疊追蹤、呼叫樹狀目錄、呼叫者詳細資訊和操作內容。
部署事件 — 在應用程式啟動時和每 24 小時發出的標記,這些標記會將程式碼部署與服務行為變更建立關聯。應用程式會自動發出部署事件。提供部署中繼資料 (git 遞交、部署 ID) 可讓這些事件具有額外的內容。
當您為服務啟用 CloudWatch Application Signals 時,會自動啟用服務事件。錯誤指標和例外狀況追蹤會立即作用中。函數呼叫指標需要額外的組態 - 您必須先將套件設定為檢測,才能收集函數呼叫資料 (請參閱 啟用函數檢測)。您可以透過設定 來停用服務事件OTEL_AWS_SERVICE_EVENTS_ENABLED=false。從 ADOT 開發套件到 CloudWatch 代理程式的資料流程。代理程式會將事件發佈至 CloudWatch Logs (/aws/service-events/ 日誌群組) 和 CloudWatch 指標。service-name
支援的語言:Java、Python 和 Node.js。
注意
服務事件會在 Lambda 環境中自動停用。
資料儲存
Service Events 會將資料存放在 CloudWatch Logs 中。CloudWatch 會將服務事件資料發佈至字首為 的日誌群組/aws/application-signals/,其中 service-nameservice-name 是您OTEL_SERVICE_NAME環境變數的值。每個服務建立一個日誌群組。
您需要按標準 CloudWatch Logs 費率支付日誌擷取和儲存的費用。
在主控台中檢視錯誤
在 CloudWatch 主控台中,導覽至 Application Signals,選擇您的服務,然後選擇錯誤索引標籤。此標籤顯示 服務的例外狀況指標。
索引標籤會顯示:
例外計數圖表顯示隨時間變化的錯誤趨勢。使用此項目可偵測最近發生頻率變更的例外狀況類型。
列出每個例外狀況類型的資料表、發生的操作、發生計數,以及與上一個期間相比的變更。
選取例外狀況以深入了解詳細資訊,包括堆疊追蹤、例外狀況訊息,以及關聯追蹤的連結。
錯誤會依操作、例外狀況類型和最高堆疊影格分組。只會顯示每個群組的最新代表。
注意
若要檢視錯誤資料,您的帳戶中必須至少有一個/aws/service-events/日誌群組。如果不存在日誌群組,錯誤索引標籤會顯示加入提示。service-name
在日誌中檢視服務事件
Service Events 資料存放在 CloudWatch Logs 的日誌群組下,字首為 /aws/service-events/。您可以直接使用 CloudWatch Logs Insights 查詢此資料,以建立自訂檢視、建立儀表板或調查特定事件。service-name
若要查詢服務事件:
開啟 CloudWatch 主控台並導覽至 Logs Insights。
選取
/aws/service-events/您服務的日誌群組。service-name輸入查詢以篩選和分析服務事件資料。
CloudWatch Application Signals MCP (模型內容通訊協定) 伺服器中的服務事件
服務事件資料可透過 CloudWatch Application Signals MCP (模型內容通訊協定) 伺服器存取,讓 AI 編碼助理和客服人員可以直接查詢服務的執行時間行為。
疑難排解
自動將程式碼中的錯誤與生產事件快照建立關聯,包括完整堆疊追蹤和受影響的端點。
使用事件內容 (例外類型、呼叫路徑、追蹤 IDs) 建議目標修正,而不需要您手動導覽儀表板。
擷取部署事件,以判斷最近的版本是否引入迴歸。
效能改善
查詢函數層級效能資料,以在調查延遲問題時識別瓶頸。
比較跨部署的函數呼叫持續時間,以精確找出效能迴歸。
如需設定和使用說明,請參閱 GitHub 網站上的 Application Signals MCP 伺服器
設定服務事件
先決條件
若要使用服務事件,請確定您擁有下列元件所需的最低版本:
-
更新 ADOT SDK — 將 AWS Distro for OpenTelemetry (ADOT) 檢測 SDK 更新為您的語言 (Java、Python 或 Node.js) 的最新版本。
-
更新 Amazon EKS 附加元件 (如適用) — 如果您使用 CloudWatch 可觀測性 Amazon EKS 附加元件來檢測您的應用程式,請更新至最新版本的附加元件。
-
更新 CloudWatch 代理程式 — 更新至 CloudWatch 代理程式版本
1.300069.0或更新版本。
如果您使用 Amazon EKS,請參閱 在 Amazon EKS 叢集上啟用 Application Signals 以取得附加元件設定指示。
預設啟用的功能
如果您使用 CloudWatch Application Signals,則預設會啟用下列服務事件訊號,而不需要額外的組態:
事件快照 (在例外狀況和延遲閾值違規時觸發)
錯誤指標 per-exception-type錯誤計數)
部署事件 (一律發出;當您提供部署中繼資料時富集)
函數檢測 (預設為啟用,但除非您將套件設定為檢測,否則不會產生指標)
下列功能為選擇加入,需要設定環境變數才能產生資料:
函數層級指標 (需要設定
OTEL_AWS_SERVICE_EVENTS_PACKAGES_INCLUDE)自訂端點篩選
每個端點延遲閾值
一般設定
| 環境變數 | 預設 | 說明 |
|---|---|---|
OTEL_AWS_SERVICE_EVENTS_ENABLED |
遵循 CloudWatch Application Signals | 切換服務事件。服務事件會在 CloudWatch Application Signals 啟用時自動啟用。設定為 false以明確停用。 |
OTEL_AWS_SERVICE_EVENTS_SAMPLING_MODE |
always |
控制函數呼叫資料取樣策略。值: always (記錄所有函數呼叫)、 auto(讓 SDK 根據負載決定)、 never(停用函數呼叫記錄)。僅適用於設定函數檢測套件時。 |
啟用函數檢測
函數檢測預設為啟用,但在您設定要檢測的套件之前,不會產生指標。提供套件允許清單以開始收集每個函數遙測:
| 環境變數 | 預設 | 說明 |
|---|---|---|
OTEL_AWS_SERVICE_EVENTS_FUNCTION_INSTRUMENT_ENABLED |
true |
啟用或停用函數層級檢測。設定為 false以完全停用。 |
OTEL_AWS_SERVICE_EVENTS_PACKAGES_INCLUDE |
無 (指標需要) | 要檢測的逗號分隔套件字首清單。不需要萬用字元。例如:Java 使用 com.myapp,Python 使用 myapp,Nodesrc/myapp.js 使用 。 |
OTEL_AWS_SERVICE_EVENTS_PACKAGES_EXCLUDE |
無 | 要從檢測中排除的逗號分隔子套件清單。排除一律優先於包含。例如,包含com.myapp和排除 com.myapp.models以檢測您的應用程式程式碼,但略過資料模型類別。 |
端點篩選
端點篩選可控制哪些端點產生端點錯誤指標和事件快照。這些設定不會影響函數檢測。
| 環境變數 | 預設 | 說明 |
|---|---|---|
OTEL_AWS_SERVICE_EVENTS_ENDPOINT_INCLUDE_PATTERNS |
所有端點 | 要包含之端點的逗號分隔 glob 模式。符合 METHOD /route。 |
OTEL_AWS_SERVICE_EVENTS_ENDPOINT_EXCLUDE_PATTERNS |
無 | 要排除之端點的逗號分隔 glob 模式。當端點同時符合兩者時,排除優先。 |
延遲閾值
使用下列環境變數來設定事件快照觸發的延遲閾值。
| 環境變數 | 預設 | 說明 |
|---|---|---|
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_DURATION_THRESHOLD_MS |
5000 |
以毫秒為單位的全域延遲閾值。超過此持續時間的請求會觸發事件快照。 |
OTEL_AWS_SERVICE_EVENTS_LATENCY_THRESHOLDS |
無 | 覆寫全域預設值的每個端點延遲閾值。格式: METHOD /route:ms(例如,GET /health:200,POST /checkout:8000)。 |
速率限制
使用下列環境變數來控制收集和報告服務事件資料的速率。
| 環境變數 | 預設 | 說明 |
|---|---|---|
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_MAX_PER_MINUTE |
100 |
每分鐘擷取的事件快照數目上限。 |
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_MAX_SAME_ERROR |
1 |
每個擷取時段相同錯誤的快照數目上限。 |
設定部署事件
部署事件一律會在應用程式啟動和每 24 小時發出一次。提供部署中繼資料可豐富這些事件,讓您可以將事件和效能變更與特定程式碼部署建立關聯。
在應用程式容器或程序上設定下列環境變數,以提供部署中繼資料:
| 環境變數 | 說明 |
|---|---|
OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA |
部署程式碼的 Git 遞交 SHA。 |
OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL |
Git 儲存庫的 URL。 |
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID |
部署的唯一識別符 (例如 CI/CD 管道執行 ID)。 |
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP |
部署的 ISO 8601 時間戳記。 |
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL |
部署建置或管道執行的 URL。 |
使用 GitHub 動作設定部署事件
在您的 GitHub 動作工作流程中,使用內建環境變數來填入部署中繼資料。將下列項目新增至您的部署步驟或容器環境:
env: OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA: ${{ github.sha }} OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL: ${{ github.server_url }}/${{ github.repository }} OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID: ${{ github.run_id }} OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
如果您部署容器映像,請在任務定義或 Pod 規格中將這些值做為環境變數傳遞。您可以在建置時間將其封裝到映像中,或在部署時間透過部署組態將其注入。
使用 GitLab CI/CD 設定部署事件
在您的 GitLab CI/CD 管道中,使用預先定義的 CI/CD 變數來填入部署中繼資料。將下列項目新增至部署任務:
deploy: variables: OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA: $CI_COMMIT_SHA OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL: $CI_PROJECT_URL OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID: $CI_PIPELINE_ID OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL: $CI_PIPELINE_URL
透過容器協同運作平台,在部署時間將這些變數傳遞到您的應用程式容器 (例如,做為 Amazon ECS 任務定義或 Kubernetes 部署資訊清單中的環境變數)。