

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

# 從其他資料來源中查詢指標
<a name="MultiDataSourceQuerying"></a>

您可以使用 CloudWatch 來查詢、視覺化和建立來自其他資料來源的指標警示。為此，應將 CloudWatch 連線至其他資料來源。這會為您提供 CloudWatch 主控台內的單一整合式監控體驗。無論資料儲存在何處，您都可以統一檢視基礎架構和應用程式指標，協助您更快找出問題並進行解決。

使用 CloudWatch 精靈連線至資料來源後，CloudWatch 會建立部署和設定 AWS Lambda 函數的 AWS CloudFormation 堆疊。每次查詢資料來源時，該 Lambda 函數都會隨需執行。CloudWatch 查詢建置器會即時顯示可查詢的元素清單，例如指標、資料表、欄位或標籤。當您進行選擇時，查詢建置器會以所選來源的母語預先填入查詢。

CloudWatch 提供引導式精靈，以協助您連線至下列資料來源。對於這些資料來源，您需要提供基本資訊以識別資料來源和憑證。您也可以透過建立自己的 Lambda 函數，手動建立其他資料來源的連接器。
+ Amazon OpenSearch Service – 從您的 OpenSearch Service 日誌和追蹤中衍生指標。
+ Amazon Managed Service for Prometheus – 使用 PromQL 查詢這些指標。
+ Amazon RDS for MySQL – 使用 SQL 將存放在 Amazon RDS 資料表中的資料轉換為指標。
+ Amazon RDS for PostgreSQL – 使用 SQL 將存放在 Amazon RDS 資料表中的資料轉換為指標。
+ Amazon S3 CSV 檔案 – 顯示 Amazon S3 儲存貯體中存放的 CSV 檔案中的指標資料。
+ Microsoft Azure Monitor – 從 Microsoft Azure Monitor 帳戶查詢指標。
+ Prometheus – 使用 PromQL 查詢這些指標。

建立資料來源的連接器之後，請參閱 [從另一個資料來源建立指標圖表](graph_a_metric.md#create-metric-graph-multidatasource) 以取得有關從資料來源中繪製指標圖形的資訊。如需有關從資料來源中設定指標警示的相關資訊，請參閱 [根據連線的資料來源建立警示](Create_MultiSource_Alarm.md)。

**Topics**
+ [管理資料來源的存取](CloudWatch_MultiDataSources_Permissions.md)
+ [使用精靈連線至預先建立的資料來源](CloudWatch_MultiDataSources-Connect.md)
+ [建立資料來源的自訂連接器](CloudWatch_MultiDataSources-Connect-Custom.md)
+ [使用自訂資料來源](CloudWatch_MultiDataSources-Custom-Use.md)
+ [刪除資料來源的連接器](CloudWatch_MultiDataSources-Delete.md)

# 管理資料來源的存取
<a name="CloudWatch_MultiDataSources_Permissions"></a>

 CloudWatch 會使用 CloudFormation 在您的帳戶中建立所需的資源。當您將`CreateStack`許可授予 IAM 使用者時，建議您使用 `cloudformation:TemplateUrl`條件來控制 CloudFormation 範本的存取。

**警告**  
被授予資料來源調用許可的任何使用者都可以從該資料來源中查詢指標，即使該使用者沒有資料來源的直接 IAM 許可。例如，如果您將 Amazon Managed Service for Prometheus 資料來源 Lambda 函數的 `lambda:InvokeFunction` 許可授予給使用者，該使用者將能夠從對應的 Amazon Managed Service for Prometheus 工作區中查詢指標，即使您沒有授予該工作區的直接 IAM 存取權。

可以在 CloudWatch 設定主控台的**建立堆疊**頁面上找到資料來源的範本 URL。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFormationCreateStack",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudformation:TemplateUrl": [
                        "https://s3.us-east-1.amazonaws.com/amzn-s3-demo-bucket/template.json"
                    ]
                }
            }
        }
    ]
}
```

------

如需控制 CloudFormation 存取的詳細資訊，請參閱[使用 AWS Identity and Access Management 控制存取](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)

# 使用精靈連線至預先建立的資料來源
<a name="CloudWatch_MultiDataSources-Connect"></a>

 本主題提供相關指示，以使用精靈將 CloudWatch 連線至下列資料來源。
+ Amazon OpenSearch Service
+ Amazon Managed Service for Prometheus
+ Amazon RDS for MySQL
+ Amazon RDS for PostgreSQL
+ Amazon S3 CSV 檔案
+ Microsoft Azure Monitor
+ Prometheus

 本節中的小節包含有關管理和查詢這些資料來源的備註。

**建立資料來源的連接器**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 ** Settings** (設定)。

1. 選擇**指標資料來源**索引標籤。

1. 選擇 **Create data source (建立資料來源)**。

1. 選取需要的來源，然後選擇**下一步**。

1. 輸入資料來源的名稱。

1. 根據選擇的資料來源，輸入其他必要資訊。這可能包括用於存取資料來源的憑證和資料來源識別資訊，例如 Prometheus 工作區名稱、資料庫名稱或 Amazon S3 儲存貯體名稱。對於 AWS 服務，精靈會探索資源，並將其填入選取下拉式清單。

   如需有關您正在使用之資料來源的詳細說明，請參閱此程序後的小節。

1. 若要讓 CloudWatch 連線至 VPC 中的資料來源，請選擇**使用 VPC**，然後選取要使用的 VPC。然後選取子網路和安全群組。

1. 選擇**我確認 CloudFormation 將建立 IAM 資源**。此資源是 Lambda 函數執行角色。

1. 選擇 **Create data source (建立資料來源)**。

   在 CloudFormation 堆疊完成建立之前，您剛新增的新來源不會顯示。若要檢查進度，您可以選擇**檢視我的 CloudFormation 堆疊的狀態**。或者，可以選擇重新整理圖示來更新此清單。

   當新資料來源出現在此清單中時，即已準備好可供使用。您可以選擇**從 CloudWatch 指標中查詢**，以開始使用它進行查詢。如需詳細資訊，請參閱[從另一個資料來源建立指標圖表](graph_a_metric.md#create-metric-graph-multidatasource)。

## Amazon Managed Service for Prometheus
<a name="MultiDataSources-Amazon_Managed_Prometheus"></a>

**更新資料來源組態**
+ 可執行下列操作來手動更新資料來源：
  + 若要更新 Amazon Managed Service for Prometheus 工作區 ID，請更新資料來源連接器 Lambda 函數的 `AMAZON_PROMETHEUS_WORKSPACE_ID` 環境變數。
  + 若要更新 VPC 組態，請參閱[設定 VPC 存取 (主控台)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) 以取得詳細資訊。

**查詢資料來源**
+ 查詢 Amazon Managed Service for Prometheus 時，在**多來源查詢**索引標籤中選取資料來源並選取 Amazon Managed Service for Prometheus 連接器後，可以使用**查詢助手**來查找指標和標籤，並提供簡單的 PromQL 查詢。也可以使用 PromQL 查詢編輯器來建置 PromQL 查詢。
+ CloudWatch 資料來源連接器不支援多行查詢。執行查詢時，或當您使用查詢建立警示或儀表板小工具時，每個換行符都會取代為空格。在某些情況下，這可能會使查詢無效。例如，如果查詢包含單行註釋，它將無效。如果您嘗試使用命令列或「基礎設施即程式碼」的多行查詢建立儀表板或警示，API 將以剖析錯誤拒絕該動作。

## Amazon OpenSearch Service
<a name="MultiDataSources-Amazon_OpenSearch"></a>

**建立資料來源**

如果為 FGAC 啟用 OpenSearch 網域，您必須將連接器 Lambda 函式的執行角色對應至 OpenSearch Service 中的使用者。如需詳細資訊，請參閱 OpenSearch Service 文件中[管理許可](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-access-control)中的**將使用者對應至角色**一節。

如果您的 OpenSearch 網域只能在 Virtual Private Cloud (VPC) 內存取，則您需要在名為 `AMAZON_OPENSEARCH_ENDPOINT` 的 Lambda 函式中手動包含新的環境變數。此變數的值應該是 OpenSearch 端點的根網域。您可以從 OpenSearch Service 主控台中列出的網域端點移除 `https://` 和 `<region>.es.amazonaws.com`，以取得此根網域。例如，如果您的網域端點是 `https://sample-domain.us-east-1.es.amazonaws.com`，則根網域將是 `sample-domain`。

**更新資料來源**
+ 可執行下列操作來手動更新資料來源：
  + 若要更新 OpenSearch Service 網域，請更新資料來源連接器 Lambda 函數的 `AMAZON_OPENSEARCH_DOMAIN_NAME` 環境變數。
  + 若要更新 VPC 組態，請參閱[設定 VPC 存取 (主控台)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) 以取得詳細資訊。

**查詢資料來源**
+ 查詢 OpenSearch Service 時，在**多來源查詢**索引標籤中選取資料來源之後，請執行下列動作：
  + 選取要查詢的索引。
  + 選取指標名稱 (文件中的任何數字欄位) 和「統計」。
  + 選取時間軸 (文件中的任何日期欄位)。
  + 選取要套用的篩選條件 (文件中的任何字串欄位)。
  + 選擇**圖形查詢**。

## Amazon RDS for PostgreSQL 和 Amazon RDS for MySQL
<a name="MultiDataSources-Amazon_RDS_PostGre_SQL"></a>

**建立資料來源**
+ 如果只能在 VPC 中存取資料來源，則必須包含連接器的 VPC 組態，如 [使用精靈連線至預先建立的資料來源](#CloudWatch_MultiDataSources-Connect) 中所述。如果資料來源要連線到 VPC 以取得憑證，則必須在 VPC 中設定端點。如需詳細資訊，請參閱[使用 AWS Secrets Manager VPC 端點](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)。

  此外，您必須為 Amazon RDS 服務建立 VPC 端點。如需更多詳細資訊，請參閱 [Amazon RDS API 和介面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html)。

**更新資料來源**
+ 可執行下列操作來手動更新資料來源：
  + 若要更新資料庫執行個體，請更新資料來源連接器 Lambda 函數的 `RDS_INSTANCE` 環境變數。
  + 若要更新用於連線至 Amazon RDS 的使用者名稱和密碼，請使用 AWS Secrets Manager。您可以在資料來源 Lambda 函數的環境變數 `RDS_SECRET` 中找到用於資料來源之密碼的 ARN。如需有關在 AWS Secrets Manager中更新密碼的詳細資訊，請參閱[修改 AWS Secrets Manager 密碼](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)。
  + 若要更新 VPC 組態，請參閱[設定 VPC 存取 (主控台)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) 以取得詳細資訊。

**查詢資料來源**
+ 查詢 Amazon RDS 時，在**多來源查詢**索引標籤中選取資料來源並選取 Amazon RDS 連接器後，可以使用資料庫探索器來檢視可用的資料庫、資料表和資料欄。也可以使用 SQL 編輯器建立 SQL 查詢。

  可以在查詢中使用下列變數：
  + `$start.iso` – ISO 日期格式的開始時間
  + `$end.iso` – ISO 日期格式的結束時間
  + `$period` – 所選時段 (以秒為單位)

  例如，您可以查詢 `SELECT value, timestamp FROM table WHERE timestamp BETWEEN $start.iso and $end.iso`
+ CloudWatch 資料來源連接器不支援多行查詢。執行查詢時，或當您使用查詢建立警示或儀表板小工具時，每個換行符都會取代為空格。在某些情況下，這可能會使查詢無效。例如，如果查詢包含單行註釋，它將無效。如果您嘗試使用命令列或「基礎設施即程式碼」的多行查詢建立儀表板或警示，API 將以剖析錯誤拒絕該動作。

**注意**  
如果在結果中找不到日期欄位，則每個數值欄位的值會相加為單個值，並在提供的時間範圍內繪製。如果時間戳記與 CloudWatch 中選取的時段不一致，則會使用 `SUM` 自動彙總資料並與 CloudWatch 中的時段保持一致。

## Amazon S3 CSV 檔案
<a name="MultiDataSources-Amazon_S3_CSV"></a>

**查詢資料來源**
+ 查詢 Amazon S3 CSV 檔案時，在**多來源查詢**索引標籤中選取資料來源並選取 Amazon S3 連接器之後，可選取 Amazon S3 儲存貯體和金鑰。

  JSON 檔案必須採用下列格式：
  + 時間戳記必須是第一欄。
  + 資料表必須具有標頭列。標頭用於命名指標。時間戳記欄的標題將被忽略，只會使用指標欄的標題。
  + 時間戳記必須是 ISO 日期格式。
  + 指標必須是數值欄位。

  ```
  Timestamp, Metric-1, Metric-2, ...
  ```

  以下是範例：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch_MultiDataSources-Connect.html)

**注意**  
如果未提供時間戳記，則每個指標的值會相加為單個值，並在提供的時間範圍內繪製。如果時間戳記與 CloudWatch 中選取的時段不一致，則會使用 `SUM` 自動彙總資料並與 CloudWatch 中的時段保持一致。

## Microsoft Azure Monitor
<a name="MultiDataSources-Azure_Monitor"></a>

**建立資料來源**
+ 您必須提供租用戶 ID、用戶端 ID 及用戶端密碼，才能連線至 Microsoft Azure Monitor。登入資料將存放在 中 AWS Secrets Manager。如需詳細資訊，請參閱 Microsoft 文件中的[建立可存取資源的 Microsoft Entra 應用程式和服務主體](https://learn.microsoft.com/en-us/entra/identity-platform/howto-create-service-principal-portal)。

**更新資料來源**
+ 可執行下列操作來手動更新資料來源：
  + 若要更新用於連線至 Azure Monitor 的租用戶 ID、用戶端 ID 和用戶端密碼，您可以在資料來源 Lambda 函數中找到用於資料來源之密碼的 ARN 作為 `AZURE_CLIENT_SECRET` 環境變數。如需在 中更新秘密的詳細資訊 AWS Secrets Manager，請參閱[修改 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)。

**查詢資料來源**
+ 查詢 Azure Monitor 時，在**多來源查詢**索引標籤中選取資料來源並選取 Azure Monitor 連接器之後，可以指定 Azure 訂閱以及資源群組和資源。然後，可以選取指標命名空間、指標和彙總，並依維度進行篩選。

## Prometheus
<a name="MultiDataSources-Prometheus"></a>

**建立資料來源**
+ 必須提供 Prometheus 端點以及查詢 Prometheus 所需的使用者和密碼。登入資料將存放在 中 AWS Secrets Manager。
+ 如果只能在 VPC 中存取資料來源，則必須包含連接器的 VPC 組態，如 [使用精靈連線至預先建立的資料來源](#CloudWatch_MultiDataSources-Connect) 中所述。如果要連線資料來源以取得憑證，則必須在 VPC 中設定端點。如需詳細資訊，請參閱[使用 AWS Secrets Manager VPC 端點](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)。

**更新資料來源組態**
+ 可執行下列操作來手動更新資料來源：
  + 若要更新 Prometheus 端點，請在資料來源 Lambda 函數中將新端點指定為 `PROMETHEUS_API_ENDPOINT` 環境變數。
  + 若要更新用於連線至 Prometheus 的使用者名稱和密碼，您可以在資料來源 Lambda 函數中找到用於資料來源之密碼的 ARN 作為 `PROMETHEUS_API_SECRET` 環境變數。如需在 中更新秘密的詳細資訊 AWS Secrets Manager，請參閱[修改 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)。
  + 若要更新 VPC 組態，請參閱[設定 VPC 存取 (主控台)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) 以取得詳細資訊。

**查詢資料來源**

**重要**  
Prometheus 指標類型與 CloudWatch 指標不同，而且透過 Prometheus 提供的許多指標都是根據設計累積的。查詢 Prometheus 指標時，CloudWatch 不會對資料套用任何額外的轉換：如果僅指定指標名稱或標籤，則顯示的值將會累積。如需詳細資訊，請參閱 Prometheus 文件中的[指標類型](https://prometheus.io/docs/concepts/metric_types/)。  
若要將 Prometheus 指標資料視為離散值 (例如 CloudWatch 指標)，您需要先對查詢進行編輯，然後再執行查詢。例如，您可能需要透過 Prometheus 指標名稱新增對 rate 函數的呼叫。如需有關 rate 函數和其他 Prometheus 函數的文件，請參閱 Prometheus 文件中的 [rate()](https://prometheus.io/docs/prometheus/latest/querying/functions/#rate)。

CloudWatch 資料來源連接器不支援多行查詢。執行查詢時，或當您使用查詢建立警示或儀表板小工具時，每個換行符都會取代為空格。在某些情況下，這可能會使查詢無效。例如，如果查詢包含單行註釋，它將無效。如果您嘗試使用命令列或「基礎設施即程式碼」的多行查詢建立儀表板或警示，API 將以剖析錯誤拒絕該動作。

## 可用更新的通知
<a name="CloudWatch_MultiDataSources-Future-Updates"></a>

Amazon 可能會不時通知您，建議您使用較新的可用版本更新連接器，並提供如何執行此操作的指示。

# 建立資料來源的自訂連接器
<a name="CloudWatch_MultiDataSources-Connect-Custom"></a>

 本主題說明如何將自訂資料來源連線至 CloudWatch。可以透過兩種方式將自訂資料來源連線至 CloudWatch：
+  使用 CloudWatch 提供的範本範例。可以將 JavaScript 或 Python 與此範本搭配使用。這些範本包含 Lambda 程式碼範例，這些程式碼在您建立 Lambda 函式時很有用。然後，可以從範本中修改 Lambda 函數，以連線到自訂資料來源。
+  從頭開始建立 AWS Lambda 函數，以實作資料來源連接器、資料查詢，以及準備供 CloudWatch 使用的時間序列。如有需要，此函數必須預先彙總或合併資料點，並調整時段和時間戳記，以便與 CloudWatch 相容。

**Contents**
+ [使用範本](#CloudWatch_MultiDataSources-Connect-Custom-template)
+ [從頭開始建立自訂資料來源](#CloudWatch_MultiDataSources-Connect-Custom-Lambda)
  + [步驟 1：建立函數](#MultiDataSources-Connect-Custom-Lambda-Function)
    + [GetMetricData 事件](#MultiDataSources-GetMetricData)
    + [DescribeGetMetricData 事件](#MultiDataSources-DescribeGetMetricData)
    + [CloudWatch 警示的重要考量](#MultiDataSources-Connect-Custom-Lambda-Alarms)
    + [（選用） 使用 AWS Secrets Manager 存放登入資料](#MultiDataSources-Connect-Custom-Lambda-Secrets)
    + [(選用) 連線至 VPC 中的資料來源](#MultiDataSources-Connect-Custom-Lambda-VPC)
  + [步驟 2：建立 Lambda 許可政策](#MultiDataSources-Connect-Custom-Lambda-Permissions)
  + [步驟 3：將資源標籤附接至 Lambda 函數](#MultiDataSources-Connect-Custom-Lambda-tags)

## 使用範本
<a name="CloudWatch_MultiDataSources-Connect-Custom-template"></a>

使用範本可建立範例 Lambda 函數，並協助您更快地建置自訂連接器。這些範例函數為建置自訂連接器所涉及的許多常見案例提供範例程式碼。可以在使用範本建立連接器之後檢查 Lambda 程式碼，然後修改它以用於連線至資料來源。

此外，如果使用範本，CloudWatch 會負責建立 Lambda 許可政策，並將資源標籤附接至 Lambda 函數。

**使用範本建立自訂資料來源的連接器**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 ** Settings** (設定)。

1. 選擇**指標資料來源**索引標籤。

1. 選擇 **Create data source (建立資料來源)**。

1. 選擇**自訂 - 開始使用範本**的選項按鈕，然後選擇**下一步**。

1. 輸入資料來源的名稱。

1. 選取列出的其中一個範本。

1. 選擇 Node.js 或 Python。

1. 選擇 **Create data source (建立資料來源)**。

   在 CloudFormation 堆疊完成建立之前，您剛新增的新自訂來源不會出現。若要檢查進度，您可以選擇**檢視我的 CloudFormation 堆疊的狀態**。或者，可以選擇重新整理圖示來更新此清單。

   當新資料來源出現在此清單中時，就可以在主控台中進行測試並修改。

1. (選用) 若要在主控台中查詢來自此來源的測試資料，請遵循 [從另一個資料來源建立指標圖表](graph_a_metric.md#create-metric-graph-multidatasource) 中的指示。

1. 根據需求修改 Lambda 函數。

   1. 在導覽窗格中，選擇**設定**。

   1. 選擇**指標資料來源**索引標籤。

   1. 針對您想要修改的來源，選擇**在 Lambda 主控台中檢視**。

   您現在可以修改函數以存取資料來源。如需詳細資訊，請參閱[步驟 1：建立函數](#MultiDataSources-Connect-Custom-Lambda-Function)。
**注意**  
透過使用範本，當您撰寫 Lambda 函數時，無需遵循 [步驟 2：建立 Lambda 許可政策](#MultiDataSources-Connect-Custom-Lambda-Permissions) 或 [步驟 3：將資源標籤附接至 Lambda 函數](#MultiDataSources-Connect-Custom-Lambda-tags) 中的指示。這些步驟由 CloudWatch 執行，因為您使用了範本。

## 從頭開始建立自訂資料來源
<a name="CloudWatch_MultiDataSources-Connect-Custom-Lambda"></a>

請依照本節中的步驟來建立 Lambda 函數，它可將 CloudWatch 連線至資料來源。

### 步驟 1：建立函數
<a name="MultiDataSources-Connect-Custom-Lambda-Function"></a>

自訂資料來源連接器必須支援來自 CloudWatch 的 `GetMetricData` 事件。也可以實作 `DescribeGetMetricData` 事件，在 CloudWatch 主控台中向使用者提供如何使用連接器的說明文件。`DescribeGetMetricData` 回應也可用來設定 CloudWatch 自訂查詢建置器中使用的預設值。

CloudWatch 提供程式碼片段作為範例，協助您快速入門。如需詳細資訊，請參閱範例儲存庫，網址為 [https://github.com/aws-samples/cloudwatch-data-source-samples](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 事件
<a name="MultiDataSources-GetMetricData"></a>

**請求承載**

以下是作為 Lambda 函數的輸入而傳送的 `GetMetricData` 請求承載範例。

```
{
  "EventType": "GetMetricData",
  "GetMetricDataRequest": {
    "StartTime": 1697060700,
    "EndTime": 1697061600,
    "Period": 300,
    "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] 
  }
}
```
+ **開始時間** – 指定要傳回之最早資料的時間戳記。**類型**是時間戳記 Epoch 秒。
+ **結束時間** – 指定要傳回之最新資料的時間戳記。**類型**是時間戳記 Epoch 秒。
+ **間隔** – 指標資料的每個彙總所代表的秒數。最小值為 60 秒。**類型**為秒。
+ **引數** – 傳遞至 Lambda 指標數學運算式的引數陣列。如需有關傳遞引數的詳細資訊，請參閱 [如何將引數傳遞給 Lambda 函數](CloudWatch_MultiDataSources-Custom-Use.md#MultiDataSources-Connect-Custom-Lambda-arguments)。

**回應承載**

以下是 Lambda 函數傳回的 `GetMetricData` 回應承載範例。

```
{
   "MetricDataResults": [
      {
         "StatusCode": "Complete",
         "Label": "CPUUtilization",
         "Timestamps": [ 1697060700, 1697061000, 1697061300 ],
         "Values": [ 15000, 14000, 16000 ]
      }
   ]
}
```

回應承載將包含 `MetricDataResults` 欄位或 `Error` 欄位，但不能同時包含兩者。

`MetricDataResults` 欄位是一系列 `MetricDataResult` 類型的時間序列欄位。每個時間序列欄位可以包含下列欄位。
+ **狀態碼** – (選用) `Complete` 表示傳回請求時間範圍內的所有資料點。`PartialData` 表示傳回一組不完整的資料點。若省略，則預設值為 `Complete`。

  有效值：`Complete` \$1 `InternalError` \$1 `PartialData` \$1 `Forbidden`
+ **訊息** – 可選訊息清單，其中包含有關傳回資料的其他資訊。

  類型：含有 `Code` 和 `Value` 字串的 [MessageData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MessageData.html) 物件陣列。
+ **標籤** – 與資料相關聯的人類可讀標籤。

  類型：字串
+ **時間戳記** – 資料點的時間戳記，格式為 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 事件
<a name="MultiDataSources-DescribeGetMetricData"></a>

**請求承載**

以下是 `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 事件](#MultiDataSources-GetMetricData) 中看到範例。

#### CloudWatch 警示的重要考量
<a name="MultiDataSources-Connect-Custom-Lambda-Alarms"></a>

 如果要使用資料來源來設定 CloudWatch 警示，則應將其設定為每分鐘向 CloudWatch 報告具有時間戳記的資料。如需有關從連線的資料來源中建立指標警示的詳細資訊和其他考量，請參閱 [根據連線的資料來源建立警示](Create_MultiSource_Alarm.md)。

#### （選用） 使用 AWS Secrets Manager 存放登入資料
<a name="MultiDataSources-Connect-Custom-Lambda-Secrets"></a>

如果您的 Lambda 函數需要使用登入資料來存取資料來源，建議您使用 AWS Secrets Manager 來存放這些登入資料，而不是將它們硬式編碼到您的 Lambda 函數。如需搭配使用 AWS Secrets Manager 與 Lambda 的詳細資訊，請參閱[在 AWS Lambda 函數中使用 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_lambda.html)。

#### (選用) 連線至 VPC 中的資料來源
<a name="MultiDataSources-Connect-Custom-Lambda-VPC"></a>

如果資料來源位於 Amazon Virtual Private Cloud 所管理的 VPC 中，則必須設定 Lambda 函數才能存取它。如需詳細資訊，請參閱[將傳出網路連線至 VPC 中的資源](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)。

可能還需要設定 VPC 服務端點，才能存取諸如 AWS Secrets Manager等服務。如需詳細資訊，請參閱[使用介面 VPC 端點存取 AWS 服務](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#access-service-though-endpoint)。

### 步驟 2：建立 Lambda 許可政策
<a name="MultiDataSources-Connect-Custom-Lambda-Permissions"></a>

必須建立政策陳述式來授予 CloudWatch 許可，才能使用所建立的 Lambda 函數。您可以使用 AWS CLI 或 Lambda 主控台來建立政策陳述式。

**使用 AWS CLI 建立政策陳述式**
+ 輸入以下命令。將 *123456789012* 取代為您的帳戶 ID，將 *my-data-source-function* 取代為 Lambda 函數的名稱，並將 *MyDataSource-DataSourcePermission1234* 取代為任意唯一值。

  ```
  aws lambda add-permission --function-name my-data-source-function --statement-id MyDataSource-DataSourcePermission1234 --action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account 123456789012
  ```

### 步驟 3：將資源標籤附接至 Lambda 函數
<a name="MultiDataSources-Connect-Custom-Lambda-tags"></a>

CloudWatch 主控台透過使用標籤來判斷哪些 Lambda 函數是資料來源連接器。當您使用其中一個精靈建立資料來源時，設定它的 CloudFormation 堆疊會自動套用標籤。當您自行建立資料來源時，可以針對 Lambda 函數使用下列標籤。這會讓連接器在您查詢指標時出現在 CloudWatch 主控台的**資料來源**下拉式清單中。
+ 索引鍵為 `cloudwatch:datasource` 和值為 `custom` 的標籤。

# 使用自訂資料來源
<a name="CloudWatch_MultiDataSources-Custom-Use"></a>

 建立資料來源之後，您可以使用其來查詢和視覺化呈現來自該來源的資料，並設定警示。如果使用範本來建立自訂資料來源連接器，或已新增 [步驟 3：將資源標籤附接至 Lambda 函數](CloudWatch_MultiDataSources-Connect-Custom.md#MultiDataSources-Connect-Custom-Lambda-tags) 中列出的標籤，則可以遵循 [從另一個資料來源建立指標圖表](graph_a_metric.md#create-metric-graph-multidatasource) 中的步驟進行查詢。也可以使用指標數學函數 `LAMBDA` 進行查詢，如下節所述。如需有關從資料來源中建立指標警示的相關資訊，請參閱 [根據連線的資料來源建立警示](Create_MultiSource_Alarm.md)。本主題說明如何將 Lambda 函式的引數傳遞至自訂資料來源。

## 如何將引數傳遞給 Lambda 函數
<a name="MultiDataSources-Connect-Custom-Lambda-arguments"></a>

將引數傳遞至自訂資料來源的建議方法是在查詢資料來源時使用 CloudWatch 主控台中的查詢建置器。

也可以透過使用 CloudWatch 指標數學中的新 `LAMBDA` 運算式，使用 Lambda 函數從資料來源中擷取資料。

```
LAMBDA("LambdaFunctionName" [, optional-arg]*)
```

`optional-arg` 最多為 20 個字串、數字或布林值。例如，`param`、`3.14` 或 `true`。

**注意**  
CloudWatch 資料來源連接器不支援多行字串。執行查詢時，或當您使用查詢建立警示或儀表板小工具時，每個換行符都會取代為空格。在某些情況下，這可能會使查詢無效。

使用 `LAMBDA` 指標數學函數時，可以提供函數名稱 (`"MyFunction"`)。如果資源政策允許，也可以使用特定版本的函數 (`"MyFunction:22"`) 或 Lambda 函數別名 (`"MyFunction:MyAlias"`)。您無法使用 `*`

以下是呼叫 `LAMBDA` 函數的一些範例。

```
LAMBDA("AmazonOpenSearchDataSource", "MyDomain", "some-query")
```

```
LAMBDA("MyCustomDataSource", true, "fuzzy", 99.9)
```

`LAMBDA` 指標數學函數會傳回時間序列清單，它可傳回給請求者，或與其他指標數學函數結合使用。以下是 `LAMBDA` 與其他指標數學函數結合使用的範例。

```
FILL(LAMBDA("AmazonOpenSearchDataSource", "MyDomain", "some-query"), 0)
```

# 刪除資料來源的連接器
<a name="CloudWatch_MultiDataSources-Delete"></a>

 本節說明如何刪除資料來源的連接器。

**若要刪除資料來源的連接器**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 ** Settings** (設定)。

1. 選擇**指標資料來源**索引標籤。

1. 在您想要刪除的資料來源列中選擇**在 CloudFormation 中管理**。

   系統會將您導向至 CloudFormation 主控台。

1. 在具有資料來源名稱的區段中，選擇**刪除**。

1. 在確認彈出視窗中，選擇**刪除**。