本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立資料來源的自訂連接器
本主題描述如何將自訂資料來源連接到 CloudWatch。您可以透過兩種方式將自訂資料 CloudWatch 來源連接到:
-
使用提 CloudWatch 供的範例範本。您可以使用任何一個 JavaScript 或 Python 與此模板。這些範本包含範例 Lambda 程式碼,當您建立 Lambda 函數時,這些程式碼對您很有用。然後,可以從範本中修改 Lambda 函數,以連線到自訂資料來源。
-
創建一個 AWS Lambda 從頭開始實作資料來源連接器、資料查詢以及準備供使用的時間序列的函數 CloudWatch。如果需要,此函數必須預先彙總或合併資料點,並對齊要與之相容的週期和時間戳記。 CloudWatch
內容
使用範本
使用範本可建立範例 Lambda 函數,並協助您更快地建置自訂連接器。這些範例函數為建置自訂連接器所涉及的許多常見案例提供範例程式碼。可以在使用範本建立連接器之後檢查 Lambda 程式碼,然後修改它以用於連線至資料來源。
此外,如果您使用範本,請注 CloudWatch 意建立 Lambda 許可政策,並將資源標籤附加至 Lambda 函數。
使用範本建立自訂資料來源的連接器
在開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
在導覽窗格中,選擇設定。
選擇指標資料來源索引標籤。
選擇 Create data source (建立資料來源)。
選擇自訂 - 開始使用範本的選項按鈕,然後選擇下一步。
輸入資料來源的名稱。
選取列出的其中一個範本。
選擇 Node.js 或 Python。
選擇 Create data source (建立資料來源)。
您剛剛新增的新自訂來源只會出現,直到 AWS CloudFormation 堆棧完成創建它。若要檢查進度,您可以選擇 [檢視我的 CloudFormation 堆疊狀態]。或者,可以選擇重新整理圖示來更新此清單。
當新資料來源出現在此清單中時,就可以在主控台中進行測試並修改。
(選用) 若要在主控台中查詢來自此來源的測試資料,請遵循 從另一個資料來源建立指標圖表 中的指示。
根據需求修改 Lambda 函數。
在導覽窗格中,選擇設定。
選擇指標資料來源索引標籤。
針對您想要修改的來源,選擇在 Lambda 主控台中檢視。
您現在可以修改函數以存取資料來源。如需詳細資訊,請參閱 步驟 1:建立函數。
注意
透過使用範本,當您撰寫 Lambda 函數時,無需遵循 步驟 2:建立 Lambda 許可政策 或 步驟 3:將資源標籤附接至 Lambda 函數 中的指示。這些步驟是由執行的, CloudWatch 因為您使用了範本。
從頭開始建立自訂資料來源
請依照本節中的步驟建立連線 CloudWatch 至資料來源的 Lambda 函數。
步驟 1:建立函數
自訂資料來源連接器必須支援來自的GetMetricData
事件 CloudWatch。或者,您也可以實作DescribeGetMetricData
事件,以便在 CloudWatch 主控台中向使用者提供如何使用連接器的說明文件。DescribeGetMetricData
回應也可以用來設 CloudWatch 定自訂查詢建置器中使用的預設值。
CloudWatch 提供程式碼片段做為範例,以協助您開始使用。如需詳細資訊,請參閱中的範例儲存庫https://github.com/aws-samples/cloudwatch-data-source-samples
限制條件
來自 Lambda 的回應必須小於 6 Mb。如果回應超過 6 Mb,則
GetMetricData
回應會將 Lambda 函數標記為InternalError
,且不會傳回任何資料。Lambda 函數必須在 10 秒內完成其執行,以達到視覺化和儀表板目的;或在 4.5 秒內完成執行,起到警示作用。如果執行時間超過該時間,則
GetMetricData
回應會將 Lambda 函數標記為InternalError
,且不會傳回任何資料。Lambda 函數必須使用 Epoch 時間戳記 (以秒為單位) 來傳送其輸出。
如果 Lambda 函數未重新取樣資料,而是傳回與 CloudWatch 使用者要求的開始時間和週期長度不相符的資料,則會忽略該資料。 CloudWatch會從任何視覺效果或警示中捨棄額外資料。任何非開始時間和結束時間之間的資料也會被捨棄。
例如,如果使用者需要間隔為 5 分鐘從上午 10 點到 11 點之間的資料,則傳回資料的有效時間範圍為「10:00:00 到 10:04:59」和「10:05:00 到 10:09:59」。必須傳回包含
10:00 value1
、10:05 value2
等的時間序列。例如,如果函數傳回10:03 valueX
,它會被丟棄,因為 10:03 與請求的開始時間和間隔不符。CloudWatch 資料來源連接器不支援多行查詢。執行查詢時,或當您使用查詢建立警示或儀表板小工具時,每個換行符都會取代為空格。在某些情況下,這可能會使查詢無效。
GetMetricData 事件
請求承載
以下是作為 Lambda 函數的輸入而傳送的 GetMetricData
請求承載範例。
{ "EventType": "GetMetricData", "GetMetricDataRequest": { "StartTime": 1697060700, "EndTime": 1697061600, "Period": 300, "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] } }
StartTime— 指定要傳回之最早資料的時間戳記。類型是時間戳記 Epoch 秒。
EndTime— 指定要傳回之最新資料的時間戳記。類型是時間戳記 Epoch 秒。
間隔 – 指標資料的每個彙總所代表的秒數。最小值為 60 秒。類型為秒。
引數 – 傳遞至 Lambda 指標數學運算式的引數陣列。如需有關傳遞引數的詳細資訊,請參閱 如何將引數傳遞給 Lambda 函數。
回應承載
以下是 Lambda 函數傳回的 GetMetricData
回應承載範例。
{ "MetricDataResults": [ { "StatusCode": "Complete", "Label": "CPUUtilization", "Timestamps": [ 1697060700, 1697061000, 1697061300 ], "Values": [ 15000, 14000, 16000 ] } ] }
回應承載將包含 MetricDataResults
欄位或 Error
欄位,但不能同時包含兩者。
MetricDataResults
欄位是一系列 MetricDataResult
類型的時間序列欄位。每個時間序列欄位可以包含下列欄位。
StatusCode— (選用)
Complete
表示傳回要求時間範圍內的所有資料點。PartialData
表示傳回一組不完整的資料點。若省略,則預設值為Complete
。有效值:
Complete
|InternalError
|PartialData
|Forbidden
訊息 – 可選訊息清單,其中包含有關傳回資料的其他資訊。
類型:具有
Code
和Value
字符串的MessageData對象數組。標籤 – 與資料相關聯的人類可讀標籤。
類型:字串
時間戳記 – 資料點的時間戳記,格式為 Epoch 時間。時間戳記的數目始終符合值的數目,而且
Timestamps[x]
的值為Values[x
]。類型:時間戳記陣列
值 – 指標的資料點值,對應於
Timestamps
。值的數目始終符合時間戳記的數目,而且Timestamps[x]
的值為Values[x
]。類型:雙精度陣列
如需有關 Error
物件的詳細資訊,請參閱下列各節。
錯誤回應格式
您可以選擇使用錯誤回應來提供有關錯誤的詳細資訊。建議您在發生驗證錯誤時傳回「程式碼驗證」錯誤,例如當參數遺失或類型錯誤時。
以下是 Lambda 函數想要引發 GetMetricData
驗證例外狀況時的回應範例。
{ "Error": { "Code": "Validation", "Value": "Invalid Prometheus cluster" } }
以下是當 Lambda 函數指出由於存取問題而無法傳回資料時的回應範例。回應會轉譯成單一時間序列,且狀態碼為 Forbidden
。
{ "Error": { "Code": "Forbidden", "Value": "Unable to access ..." } }
以下是 Lambda 函數引發整體 InternalError
例外狀況時的範例,它會轉譯為單一時間序列,且具有狀態碼 InternalError
和訊息。每當錯誤代碼具有Validation
或以外的值時Forbidden
, CloudWatch 假設它是一個通用的內部錯誤。
{ "Error": { "Code": "PrometheusClusterUnreachable", "Value": "Unable to communicate with the cluster" } }
DescribeGetMetricData 事件
請求承載
以下是 DescribeGetMetricData
請求承載的範例。
{ "EventType": "DescribeGetMetricData" }
回應承載
以下是 DescribeGetMetricData
回應承載的範例。
{ "Description": "Data source connector", "ArgumentDefaults": [{ Value: "default value" }] }
描述 – 如何使用資料來源連接器的描述。此說明將出現在 CloudWatch 控制台中。支援 Markdown。
類型:字串
ArgumentDefaults— 使用預先填入自訂資料來源建置器的可選引數預設值陣列。
如果返回
[{ Value: "default value 1"}, { Value: 10}]
,則 CloudWatch 控制台中的查詢生成器顯示兩個輸入,第一個輸入為「默認值 1」,第二個輸入為 10。如果未提供
ArgumentDefaults
,則會顯示單一輸入,且類型預設為String
。類型:包含「值」和「類型」的物件陣列。
錯誤 – (選用) 錯誤欄位可包含在任何回應中。可在 GetMetricData 事件 中看到範例。
CloudWatch 警報的重要注意事項
如果您要使用資料來源設定 CloudWatch 警示,則應將其設定為每分鐘將時間戳記報告資料至 CloudWatch。如需有關從連線的資料來源中建立指標警示的詳細資訊和其他考量,請參閱 根據連線的資料來源建立警示。
(選擇性) 使用 AWS Secrets Manager 儲存認證
如果您的 Lambda 函數需要使用登入資料來源存取資料來源,建議您使用 AWS Secrets Manager 存儲這些憑據,而不是將其硬編碼到您的 Lambda 函數中。有關使用的更多信息 AWS Secrets Manager 使用 Lambda,請參閱使用 AWS Secrets Manager 秘密在 AWS Lambda 函數。
(選擇性) Connect 至 VPC
如果您的資料來源位於由 Amazon Virtual Private Cloud VPC 管理,則必須設定 Lambda 函數才能存取它。如需詳細資訊,請參閱將輸出網路連線至VPC.
您可能還需要設定VPC服務端點才能存取諸如 AWS Secrets Manager。 如需詳細資訊,請參閱存取 AWS 使用接口VPC端點的服務。
步驟 2:建立 Lambda 許可政策
您必須使用建立政策陳述式來 CloudWatch 授與使用您所建立之 Lambda 函數的權限。您可以使用 AWS CLI 或使用 Lambda 主控台來建立政策聲明。
若要使用 AWS CLI 建立政策聲明
輸入以下命令。Replace (取代)
123456789012
使用您的帳戶 ID,更換my-data-source-function
用你的 Lambda 函數的名稱,並替換MyDataSource-DataSourcePermission1234
具有任意唯一值。aws lambda add-permission --function-name
my-data-source-function
--statement-idMyDataSource-DataSourcePermission1234
--action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account123456789012
步驟 3:將資源標籤附接至 Lambda 函數
主 CloudWatch 控台會使用標籤來判斷哪些 Lambda 函數是資料來源連接器。使用其中一個精靈建立資料來源時, AWS CloudFormation 配置它的堆棧。當您自行建立資料來源時,可以針對 Lambda 函數使用下列標籤。這會讓您的連接器在您查詢指標時出現在 CloudWatch 主控台的 [資料來源] 下拉式清單中。
索引鍵為
cloudwatch:datasource
和值為custom
的標籤。