從與 Amazon SNS 直接整合的 APM 擷取警示
如果您的 APM 支援將警示傳送至 Amazon SNS 主題,您可以依照本指南將 APM 警示擷取至 AWS 事件偵測與回應。
您可以部署提供的 CloudFormation 範本AWSServiceRoleForHealth_EventProcessor。
選項 1:使用 CloudFormation
CloudFormation 範本可用來簡化建立整合基礎結構的程序,須有此基礎結構才能從與 Amazon SNS 整合的 APM 將警示擷取至 AWS 事件偵測與回應。
注意
-
透過此 CloudFormation 範本部署的資源會產生其他成本 (例如 Lambda 和 EventBridge)。如需這些服務定價的詳細資訊,請參閱 AWS 定價
。 -
您必須在 AWS 事件偵測與回應需要從中擷取警示的每個 AWS 帳戶和區域中部署此 CloudFormation 範本。
-
本文件中提供的範例適用於 Grafana,但此範本可用於與 Amazon Simple Notification Service 直接整合的任何 APM。
-
基於安全考量,AWS 建議您從
TransformLambdaFunction移除logger.info()陳述式,以防止承載記錄於 Amazon CloudWatch Logs 中。
部署此 CloudFormation 範本的先決條件:
-
您必須建立 Amazon Simple Notification Service 主題,才能從 APM 接收警示事件。在 Amazon Simple Notification Service 主控台中建立 SNS 主題。
-
範本中的
TransformLambdaFunction必須經過修改,才能根據使用的 APM 將["detail"]["incident-detection-response-identifier"]設定為所需的值。
先決條件完成:
-
開啟 Amazon SNS 主控台,然後選取「主題」。複製為了接收來自 APM 的警示事件而建立的 SNS 主題 ARN。
-
範例:
arn:aws:sns:eu-west-1:012345678912:<your-apm-name>-sns
-
-
下載並開啟 CloudFormation 範本
。 -
在範本中尋找
TransformLambdaFunction-
在
def lambda_handler(event, context)下,將event["detail"]["incident-detection-response-identifier"]設定為 json 路徑,其中警示名稱會出現在 SNS 記錄的 JSON 承載中。-
任何透過 SNS 傳送至
TransformLambdaFunction的事件都有父承載結構,如event["Records"][n]["Sns"]["Message"]。來自來源 (APM) 的實際承載來源會包裝在父結構內。 -
Grafana 的範例:
event["Records"][n]["Sns"]["Message"]["alerts"][n]["labels"]["alertname"]
-
-
-
部署 CloudFormation 範本:
-
在您需要設定整合的帳戶和區域中,瀏覽至 CloudFormation 主控台。
-
導覽至 CloudFormation。
-
選擇「建立堆疊」、「使用新資源 (標準)」
-
選取選擇現有範本、上傳範本檔案、選擇檔案,然後上傳您儲存在本機上的 CloudFormation 範本。
-
-
-
指定堆疊詳細資訊:
-
輸入堆疊名稱 (範例:
<your-apm-name>IntegrationForIDR) -
指定先決條件完成期間取得的參數值
-
APMNameParameter 範例:
Grafana -
TriggerSNSParameter 範例:
arn:aws:sns:eu-west-1:012345678912:<your-apm-name>-sns
-
-
選擇「下一步」。
-
-
設定堆疊選項:
-
捲動至頁面底部並確認核取方塊,以允許 CloudFormation 使用自訂名稱建立 IAM 資源。
-
-
檢閱和建立:
-
驗證參數值的設定正確無誤,然後選擇「提交」。
-
-
CloudFormation 堆疊會部署必要的資源,以將 APM 事件整合到 AWS 事件偵測與回應。等到 CloudFormation 堆疊狀態顯示為 CREATE_COMPLETE。
-
CloudFormation 堆疊會建立下列資源,假設範例值已輸入 Grafana 的參數中,且在 EU-WEST-1 區域中執行。
-
CustomEventBus: Grafana-AWSIncidentDetectionResponse-EventBus
-
SNSSubscription: arn:aws:sns:eu-west-1:012345678912:grafana-sns:[random_string]
-
TransformLambdaExecutionRole: IDR-TransformLambdaExecutionRole-eu-west-1
-
TransformLambdaFunction: Grafana-AWSIncidentDetectionResponse-Lambda-Transform
-
TransformLambdaPermission: GrafanaIntegrationForIDR-TransformLambdaPermission-[random_string]
-
整合測試
成功部署 CloudFormation 堆疊後,您可以從 APM 傳送測試承載來驗證整合。從 APM 傳送測試承載後:
-
瀏覽至 Lambda 主控台,然後選取
APMNameParameter-AWSIncidentDetectionResponse-Lambda-Transform函式。接著選擇「監控」索引標籤。 -
在指標圖中應該會看到成功的調用。
-
選取「檢視 Amazon CloudWatch Logs」。您可以從日誌串流中的日誌事件進行驗證,以確認從 APM 傳送的測試承載是否存在,或是遇到任何錯誤。
將您的事件匯流排 ARN 與 AWS 事件偵測與回應共用
-
瀏覽至 Amazon EventBridge 主控台。選取事件匯流排。
-
記錄隨 CloudFormation 堆疊一起部署的自訂事件匯流排的 ARN,例如:
arn:aws:events:eu-west-1:012345678912:event-bus/Grafana-AWSIncidentDetectionResponse-EventBus。-
在 警示擷取問卷 - 概觀 的「第三方 APM 警示」區段的「EventBridge 事件匯流排 ARN」欄位中,將此自訂事件匯流排的 ARN 提供給 AWS 事件偵測與回應。
-
-
在上線過程中,AWS 事件偵測與回應會在此自訂事件匯流排上建立受管 EventBridge 規則,以擷取您的 APM 警示。
選項 2:手動整合
-
開啟 Amazon SNS 主控台並在 Amazon Simple Notification Service 主控台中建立 SNS 主題,名為
[apm_name]-sns,以接收來自 APM 的警示事件。請記下所建立 SNS 主題的 ARN。 -
執行下列其中一項:
-
(建議方法) 建立 EventBridge 自訂事件匯流排,名為
[apm_name]-AWSIncidentDetectionResponse-EventBus。 -
(替代方法) 使用預設 EventBridge 事件匯流排,而不使用自訂事件匯流排。
AWS 事件偵測與回應會透過
AWSServiceRoleForHealth_EventProcessorSLR,在自訂或預設事件匯流排上安裝受管規則 (AWSHealthEventProcessorEventSource-DO-NOT-DELETE)。規則來源將是自訂或預設事件匯流排,規則目的地將是 AWS 事件偵測與回應,且規則將符合擷取第三方 APM 事件的模式。 -
-
建立名為
$YourApmName-AWSIncidentDetectionResponse-LambdaFunction的 Lambda 函式來轉換 SNS 承載。-
轉換後的事件必須符合 使用 EventBridge 擷取 APM 警示的承載需求 中所述的承載需求
-
將 Lambda 函式的目標設定為步驟 2 中建立的自訂事件匯流排 (建議方法),或設定為預設事件匯流排。
-
-
將 SNS 主題設定為 Lambda 函式
$YourApmName-AWSIncidentDetectionResponse-LambdaFunction的觸發條件。-
在「新增觸發」頁面中,搜尋「SNS」。
-
新增在步驟 1 中所建立的專用 SNS 主題的 ARN。
-
選擇「新增」。
-
-
依照您的 APM 文件中所述,設定 APM 承載的 SNS 目的地,以供 AWS 事件偵測與回應擷取。
AWS 事件偵測與回應會透過 AWSServiceRoleForHealth_EventProcessor SLR,在自訂或預設事件匯流排上安裝受管規則 (AWSHealthEventProcessorEventSource-DO-NOT-DELETE)。規則來源將是自訂或預設事件匯流排,規則目的地將是 AWS 事件偵測與回應,且規則將符合擷取第三方 APM 事件的模式。