

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

# 湊集其他 Prometheus 來源並匯入這些指標
<a name="ContainerInsights-Prometheus-Setup-configure-ECS"></a>

具有 Prometheus 監控的 CloudWatch 代理程式需要兩種組態來湊集 Prometheus 指標。其中一個是 Prometheus 文件的 [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) 中記錄的標準 Prometheus 湊集組態。另一個適用於 CloudWatch 代理程式組態。

對於 Amazon ECS 叢集，組態會透過 Amazon ECS 任務定義中的秘密與 AWS Systems Manager 的參數存放區進行整合：
+ 秘密 `PROMETHEUS_CONFIG_CONTENT` 適用於 Prometheus 湊集組態。
+ 秘密 `CW_CONFIG_CONTENT` 適用於 CloudWatch 代理程式組態。

若要湊集其他 Prometheus 指標來源並將這些指標匯入 CloudWatch，您可以修改 Prometheus 湊集組態和 CloudWatch 代理程式組態，然後使用更新的組態重新部署代理程式。

**VPC 安全群組要求**

Prometheus 工作負載安全群組的輸入規則必須開啟到 CloudWatch 代理程式的 Prometheus 連接埠，以便透過私有 IP 擷取 Prometheus 指標。

CloudWatch 代理程式安全群組的輸出規則必須允許 CloudWatch 代理程式透過私有 IP 連接至 Prometheus 工作負載的連接埠。

## Prometheus 湊集組態
<a name="ContainerInsights-Prometheus-Setup-config-global"></a>

CloudWatch 代理程式支援標準 Prometheus 湊集組態，如 Prometheus 文件的 [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) 中所述。您可以編輯此區段來更新已存在於此檔案中的組態，並新增其他 Prometheus 湊集目標。根據預設，範例組態檔案包含下列全域組態行：

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
```
+ **scrape\$1interval**— 定義湊集目標的頻率。
+ **scrape\$1timeout**— 定義湊集請求逾時之前要等待的時間。

您也可以在任務層級為這些設定定義不同的數值，以覆寫全域設定。

### Prometheus 湊集任務
<a name="ContainerInsights-Prometheus-Setup-config-scrape"></a>

CloudWatch 代理程式 YAML 檔案已設定一些預設的湊集任務。例如，在 Amazon ECS 的 YAML 檔案中，例如 `cwagent-ecs-prometheus-metric-for-bridge-host.yaml`，已在 `ecs_service_discovery` 區段中設定預設湊集任務。

```
"ecs_service_discovery": {
                  "sd_frequency": "1m",
                  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
                  "docker_label": {
                  },
                  "task_definition_list": [
                    {
                      "sd_job_name": "ecs-appmesh-colors",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition\/.*-ColorTeller-(white):[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    },
                    {
                      "sd_job_name": "ecs-appmesh-gateway",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition/.*-ColorGateway:[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    }
                  ]
                }
```

會湊集這些預設目標當中的各個目標，並使用內嵌的指標格式將指標傳送到日誌事件中的 CloudWatch。如需詳細資訊，請參閱[在日誌中內嵌指標](CloudWatch_Embedded_Metric_Format.md)。

來自 Amazon ECS 叢集的日誌事件會存放在 **/aws/ecs/containerinsights/*cluster\$1name*/prometheus** 日誌群組。

每個湊集任務都包含在此日誌群組的不同日誌串流中。

若要新增湊集目標，您可在 YAML 檔案的 `ecs_service_discovery` 區段下的 `task_definition_list` 區段中新增條目，然後重新啟動代理程式。如需此程序的範例，請參閱[新增 Prometheus 湊集目標的教學課程：Prometheus API 伺服器指標](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters)。

## Prometheus 的 CloudWatch 代理程式組態
<a name="ContainerInsights-Prometheus-Setup-cw-agent-config"></a>

CloudWatch 代理程式組態檔案在 `metrics_collected` 下有一個 `prometheus` 區段可用於 Prometheus 湊集組態。其包含下列組態選項：
+ **cluster\$1name**— 指定要在日誌事件中新增為標籤的叢集名稱。此欄位為選用欄位。如果您省略此值，代理程式可以偵測 Amazon ECS 叢集名稱。
+ **log\$1group\$1name**— 為湊集的 Prometheus 指標指定日誌檔案群組名稱。此欄位為選用欄位。如果您省略此值，CloudWatch 會將 **/aws/ecs/containerinsights/*cluster\$1name*/prometheus** 用於來自 Amazon ECS 叢集的日誌。
+ **prometheus\$1config\$1path**— 指定 Prometheus 湊集組態檔案路徑。如果此欄位的值以 `env:` 為開頭，則將從容器的環境變數中擷取 Prometheus 湊集組態檔案內容。請不要變更此欄位。
+ **ecs\$1service\$1discovery**— 是指定 Amazon ECS Prometheus 目標自動探索功能組態的區段。支援兩種模式來探索 Prometheus 目標：根據容器的 Docker 標籤進行探索，或根據 Amazon ECS 任務定義 ARN 規則表達式進行探索。您可以同時使用這兩種模式，CloudWatch 代理程式會根據以下情況刪除重複的已搜索到的目標：*\$1private\$1ip\$1:\$1port\$1/\$1metrics\$1path\$1*。

  `ecs_service_discovery` 區段可以包含下列欄位：
  + `sd_frequency` 是發現 Prometheus Exporters 的頻率。指定數字和單位尾碼。例如：每分鐘一次 `1m` 或每 30 秒`30s`一次。有效的單位尾碼為`ns`、`us`、`ms`、`s`、`m` 以及 `h`。

    此欄位為選用欄位。預設值為 60 秒 (1 分鐘)。
  + `sd_target_cluster` 是用於自動探索的目標 Amazon ECS 叢集名稱。此欄位為選用欄位。預設是安裝 CloudWatch 代理程式的 Amazon ECS 叢集名稱。
  + `sd_cluster_region` 是目標 Amazon ECS 叢集的區域。此欄位為選用欄位。預設是安裝 CloudWatch 代理程式的 Amazon ECS 叢集區域。
  + `sd_result_file` 是 Prometheus 目標結果的 YAML 檔案路徑。Prometheus 湊集組態將參與此檔案。
  + `docker_label` 是選用區段，您可以用它來指定 Docker 標籤型服務探索的組態。如果您省略此區段，則不會使用 Docker 標籤型探索。此區段可以包含下列欄位：
    + `sd_port_label` 是容器的 Docker 標籤名稱，用於指定 Prometheus 指標的容器連接埠。預設值為 `ECS_PROMETHEUS_EXPORTER_PORT`。如果容器沒有此 Docker 標籤，CloudWatch 代理程式將略過它。
    + `sd_metrics_path_label` 是容器的 Docker 標籤名稱，用於指定 Prometheus 指標路徑。預設值為 `ECS_PROMETHEUS_METRICS_PATH`。如果容器沒有此 Docker 標籤，則代理程式會假設預設路徑 `/metrics`。
    + `sd_job_name_label` 是容器的 Docker 標籤名稱，用於指定 Prometheus 湊集任務名稱。預設值為 `job`。如果容器沒有此 Docker 標籤，CloudWatch 代理程式會在 Prometheus 湊集組態中使用任務名稱。
  + `task_definition_list` 是選用區段，您可以用它來指定任務定義型服務探索的組態。如果您省略此區段，則不會使用任務定義型探索。此區段可以包含下列欄位：
    + `sd_task_definition_arn_pattern` 是用來指定要探索的 Amazon ECS 任務定義的模式。這是規則表達式。
    + `sd_metrics_ports` 列出了 Prometheus 指標的 containerPort。使用分號分隔 containerPorts。
    + `sd_container_name_pattern` 指定了 Amazon ECS 任務容器名稱。這是規則表達式。
    + `sd_metrics_path` 指定了 Prometheus 指標路徑。如果您省略此項，代理程式會假設預設路徑 `/metrics`
    + `sd_job_name` 指定了 Prometheus 湊集任務名稱。如果您省略此欄位，CloudWatch 代理程式會使用 Prometheus 湊集組態中的任務名稱。
  + `service_name_list_for_tasks` 是選用區段，您可以用它來指定服務名稱型探索的組態。如果您省略此區段，則不會使用服務名稱型探索。此區段可以包含下列欄位：
    + `sd_service_name_pattern` 是用來指定要探索任務的 Amazon ECS 服務的模式。這是規則表達式。
    + `sd_metrics_ports` 列出了 Prometheus 指標的 `containerPort`。使用分號分隔多個 `containerPorts`。
    + `sd_container_name_pattern` 指定了 Amazon ECS 任務容器名稱。這是規則表達式。
    + `sd_metrics_path` 指定了 Prometheus 指標路徑。如果您省略此項，代理程式會假設預設路徑 `/metrics`。
    + `sd_job_name` 指定了 Prometheus 湊集任務名稱。如果您省略此欄位，CloudWatch 代理程式會使用 Prometheus 湊集組態中的任務名稱。
+ **metric\$1declaration**— 是以要產生之內嵌指標格式來指定日誌陣列的區段。根據預設，CloudWatch 代理程式匯入的每個 Prometheus 來源都有 `metric_declaration` 區段。這些區段各包括下列欄位：
  + `label_matcher` 是一個規則表達式，會檢查 `source_labels` 中列出的標籤值。符合的指標已啟用，可包含在傳送至 CloudWatch 的內嵌指標格式。

    如果您在 `source_labels` 中指定了多個標籤，我們建議您不要在 `label_matcher` 的規則表達式中使用 `^` 或 `$` 字元。
  + `source_labels` 指定由 `label_matcher` 行檢查的標籤值。
  + `label_separator` 指定要在 ` label_matcher` 行中使用的分隔符號 (如果指定多個 `source_labels`)。預設值為 `;`。您可以在下面的範例中看到 `label_matcher` 行中使用此預設值。
  + `metric_selectors` 是一個規則表達式，可指定要收集和傳送至 CloudWatch 的指標。
  + `dimensions` 是要用作為每個所選指標之 CloudWatch 維度的標籤清單。

請參閱以下 `metric_declaration` 範例。

```
"metric_declaration": [
  {
     "source_labels":[ "Service", "Namespace"],
     "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system$",
     "dimensions":[
        ["Service", "Namespace"]
     ],
     "metric_selectors":[
        "^coredns_dns_request_type_count_total$"
     ]
  }
]
```

此範例會在符合下列條件時，設定內嵌指標格式區段，以作為日誌事件傳送：
+ `Service` 的數值包含 `node-exporter` 或 `kube-dns`。
+ `Namespace` 的值為 `kube-system`。
+ Prometheus 指標 `coredns_dns_request_type_count_total` 包含 `Service` 和 `Namespace` 標籤。

傳送的日誌事件包含下列反白顯示的區段：

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"coredns_dns_request_type_count_total"
            }
         ],
         "Dimensions":[
            [
               "Namespace",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "Namespace":"kube-system",
   "Service":"kube-dns",
   "coredns_dns_request_type_count_total":2562,
   "eks_amazonaws_com_component":"kube-dns",
   "instance":"192.168.61.254:9153",
   "job":"kubernetes-service-endpoints",
   ...
}
```

# 在 Amazon ECS 叢集上自動探索的詳細指南
<a name="ContainerInsights-Prometheus-Setup-autodiscovery-ecs"></a>

Prometheus 提供數十種動態服務探索機制，如 [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) 中所述 不過，Amazon ECS 沒有內建的服務探索。CloudWatch 代理程式會新增此機制。

啟用 Amazon ECS Prometheus 服務探索後，CloudWatch 代理程式會定期對 Amazon ECS 和 Amazon EC2 前端進行下列 API 呼叫，以擷取目標 ECS 叢集中正在執行的 ECS 任務的中繼資料。

```
EC2:DescribeInstances
ECS:ListTasks
ECS:ListServices
ECS:DescribeContainerInstances
ECS:DescribeServices
ECS:DescribeTasks
ECS:DescribeTaskDefinition
```

CloudWatch 代理程式會使用中繼資料來掃描 ECS 叢集內的 Prometheus 目標。CloudWatch 代理程式支援三種服務探索模式：
+ 容器 Docker 標籤型服務探索
+ ECS 任務定義 ARN 規則表達式型服務探索
+ ECS 服務名稱規則表達式型服務探索

所有模式可以一起使用。CloudWatch 代理程式會根據下列項目刪除重複的已搜索到的目標：`{private_ip}:{port}/{metrics_path}`。

所有已搜索到的目標都會寫入由 CloudWatch 代理程式容器內的 `sd_result_file` 組態欄位指定的結果檔案中。以下是範例結果檔案：

```
- targets:
  - 10.6.1.95:32785
  labels:
    __metrics_path__: /metrics
    ECS_PROMETHEUS_EXPORTER_PORT: "9406"
    ECS_PROMETHEUS_JOB_NAME: demo-jar-ec2-bridge-dynamic
    ECS_PROMETHEUS_METRICS_PATH: /metrics
    InstanceType: t3.medium
    LaunchType: EC2
    SubnetId: subnet-123456789012
    TaskDefinitionFamily: demo-jar-ec2-bridge-dynamic-port
    TaskGroup: family:demo-jar-ec2-bridge-dynamic-port
    TaskRevision: "7"
    VpcId: vpc-01234567890
    container_name: demo-jar-ec2-bridge-dynamic-port
    job: demo-jar-ec2-bridge-dynamic
- targets:
  - 10.6.3.193:9404
  labels:
    __metrics_path__: /metrics
    ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_B: "9404"
    ECS_PROMETHEUS_JOB_NAME: demo-tomcat-ec2-bridge-mapped-port
    ECS_PROMETHEUS_METRICS_PATH: /metrics
    InstanceType: t3.medium
    LaunchType: EC2
    SubnetId: subnet-123456789012
    TaskDefinitionFamily: demo-tomcat-ec2-bridge-mapped-port
    TaskGroup: family:demo-jar-tomcat-bridge-mapped-port
    TaskRevision: "12"
    VpcId: vpc-01234567890
    container_name: demo-tomcat-ec2-bridge-mapped-port
    job: demo-tomcat-ec2-bridge-mapped-port
```

您可以將此結果檔案與 Prometheus 檔案型服務探索直接整合。如需 Prometheus 檔案型服務探索的詳細資訊，請參閱 [<file\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#file_sd_config)。

 假設結果檔案寫入 `/tmp/cwagent_ecs_auto_sd.yaml`。下列 Prometheus 湊集組態將會使用它。

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
scrape_configs:
  - job_name: cwagent-ecs-file-sd-config
    sample_limit: 10000
    file_sd_configs:
      - files: [ "/tmp/cwagent_ecs_auto_sd.yaml" ]
```

CloudWatch 代理程式也會為已搜索到的目標新增下列其他標籤。
+ `container_name`
+ `TaskDefinitionFamily`
+ `TaskRevision`
+ `TaskGroup`
+ `StartedBy`
+ `LaunchType`
+ `job`
+ `__metrics_path__`
+ Docker 標籤

當叢集具有 EC2 啟動類型時，會新增以下三個標籤。
+ `InstanceType`
+ `VpcId`
+ `SubnetId`

**注意**  
不符合規則表達式的 Docker 標籤 `[a-zA-Z_][a-zA-Z0-9_]*` 會被篩選掉。這與 Prometheus 文件中的[組態檔案](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#labelname)的 `label_name` 列出的 Prometheus 慣例相符。

## ECS 服務探索組態範例
<a name="ContainerInsights-Prometheus-Setup-autodiscovery-ecs-examples"></a>

本節包含示範 ECS 服務探索的範例。

**範例 1**

```
"ecs_service_discovery": {
  "sd_frequency": "1m",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "docker_label": {
  }
}
```

此範例會啟用 Docker 標籤型服務探索。CloudWatch 代理程式將會每分鐘查詢一次 ECS 任務的中繼資料，然後將已搜索到的目標寫入 CloudWatch 代理程式容器內的 `/tmp/cwagent_ecs_auto_sd.yaml` 檔案中。

`docker_label` 區段中的 `sd_port_label` 的預設值為 `ECS_PROMETHEUS_EXPORTER_PORT`。如果 ECS 任務中任何正在執行的容器具有 `ECS_PROMETHEUS_EXPORTER_PORT` Docker 標籤，則 CloudWatch 代理程式會使用其值作為 `container port` 掃描容器的所有公開連接埠。如果有相符項目，則會使用映射的主機連接埠加上容器的私有 IP，以下列格式建構 Prometheus 匯出工具目標：`private_ip:host_port`。

`docker_label` 區段中的 `sd_metrics_path_label` 的預設值為 `ECS_PROMETHEUS_METRICS_PATH`。如果容器具有此 Docker 標籤，則其值將被用作 `__metrics_path__`。如果容器沒有此標籤，則會使用預設值 `/metrics`。

`docker_label` 區段中的 `sd_job_name_label` 的預設值為 `job`。如果容器具有此 Docker 標籤，其值會附加為目標的其中一個標籤，以取代 Prometheus 組態中指定的預設任務名稱。此 Docker 標籤的值會用作 CloudWatch Logs 日誌群組中的日誌串流名稱。

**範例 2**

```
"ecs_service_discovery": {
  "sd_frequency": "15s",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "docker_label": {
    "sd_port_label": "ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A",
    "sd_job_name_label": "ECS_PROMETHEUS_JOB_NAME"  
  }
}
```

此範例會啟用 Docker 標籤型服務探索。CloudWatch 代理程式將會每 15 秒查詢一次 ECS 任務的中繼資料，然後將已搜索到的目標寫入 CloudWatch 代理程式容器內的 `/tmp/cwagent_ecs_auto_sd.yaml` 檔案中。將掃描帶有 Docker 標籤的容器 `ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A`。Docker 標籤的值 `ECS_PROMETHEUS_JOB_NAME` 可用作任務名稱。

**範例 3**

```
"ecs_service_discovery": {
  "sd_frequency": "5m",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "task_definition_list": [
    {
      "sd_job_name": "java-prometheus",
      "sd_metrics_path": "/metrics",
      "sd_metrics_ports": "9404; 9406",
      "sd_task_definition_arn_pattern": ".*:task-definition/.*javajmx.*:[0-9]+"
    },
    {
      "sd_job_name": "envoy-prometheus",
      "sd_metrics_path": "/stats/prometheus",
      "sd_container_name_pattern": "^envoy$", 
      "sd_metrics_ports": "9901",
      "sd_task_definition_arn_pattern": ".*:task-definition/.*appmesh.*:23"
    }
  ]
}
```

此範例會啟用 ECS 任務定義 ARN 規則表達式型服務探索。CloudWatch 代理程式將會每 5 分鐘查詢一次 ECS 任務的中繼資料，然後將已搜索到的目標寫入 CloudWatch 代理程式容器內的 `/tmp/cwagent_ecs_auto_sd.yaml` 檔案中。

定義了兩個任務定義 ARN 規則表達式部分：
+  對於第一個區段，會篩選出其 ECS 任務定義 ARN 中具有 `javajmx` 的 ECS 任務，以進行容器連接埠掃描。如果這些 ECS 任務中的容器在 9404 或 9406 上公開容器連接埠，則會使用映射的主機連接埠以及容器的私有 IP 來建立 Prometheus 匯出工具目標。`sd_metrics_path` 的值會將 `__metrics_path__` 設定為 `/metrics`。因此，CloudWatch 代理程式將從 `private_ip:host_port/metrics` 湊集 Prometheus 指標，湊集的指標將會傳送至日誌群組 `/aws/ecs/containerinsights/cluster_name/prometheus` 中的 CloudWatch Logs 的 `java-prometheus` 日誌串流。
+  對於第一個區段，會篩選出其 ECS 任務定義 ARN 中具有 `appmesh` 且 `:23` 的 `version` 的 ECS 任務，以進行容器連接埠掃描。對於名稱為 `envoy` 且在 `9901` 上公開容器連接埠的容器，則會使用映射的主機連接埠以及容器的私有 IP 來建立 Prometheus 匯出工具目標。這些 ECS 任務中的值在 9404 或 9406 上公開容器連接埠，則會使用映射的主機連接埠以及容器的私有 IP 來建立 Prometheus 匯出工具目標。`sd_metrics_path` 的值會將 `__metrics_path__` 設定為 `/stats/prometheus`。因此，CloudWatch 代理程式將從 `private_ip:host_port/stats/prometheus` 湊集 Prometheus 指標，並會將湊集的指標傳送至日誌群組 `/aws/ecs/containerinsights/cluster_name/prometheus` 中的 CloudWatch Logs 的 `envoy-prometheus` 日誌串流。

**範例 4**

```
"ecs_service_discovery": {
  "sd_frequency": "5m",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "service_name_list_for_tasks": [
    {
      "sd_job_name": "nginx-prometheus",
      "sd_metrics_path": "/metrics",
      "sd_metrics_ports": "9113",
      "sd_service_name_pattern": "^nginx-.*"
    },
    {
      "sd_job_name": "haproxy-prometheus",
      "sd_metrics_path": "/stats/metrics",
      "sd_container_name_pattern": "^haproxy$",
      "sd_metrics_ports": "8404",
      "sd_service_name_pattern": ".*haproxy-service.*"
    }
  ]
}
```

此範例會啟用 ECS 服務名稱規則表達式型服務探索。CloudWatch 代理程式將會每 5 分鐘查詢一次 ECS 服務的中繼資料，然後將已搜索到的目標寫入 CloudWatch 代理程式容器內的 `/tmp/cwagent_ecs_auto_sd.yaml` 檔案中。

定義了兩個服務名稱規則表達式區段：
+  對於第一個區段，會篩選出與 ECS 服務相關聯的 ECS 任務，且其名稱符合規則表達式 `^nginx-.*`，以進行容器連接埠掃描。如果這些 ECS 任務中的容器在 9113 上公開容器連接埠，則會使用映射的主機連接埠以及容器的私有 IP 來建立 Prometheus 匯出工具目標。`sd_metrics_path` 的值會將 `__metrics_path__` 設定為 `/metrics`。因此，CloudWatch 代理程式將從 `private_ip:host_port/metrics` 湊集 Prometheus 指標，而湊集的指標將會傳送至日誌群組 `/aws/ecs/containerinsights/cluster_name/prometheus` 中的 CloudWatch Logs 的 `nginx-prometheus` 日誌串流。
+  對於第一個區段，會篩選出與 ECS 服務相關聯的 ECS 任務，且其名稱符合規則表達式 `.*haproxy-service.*`，以進行容器連接埠掃描。對於名稱為 `haproxy` 且在 8404 上公開容器連接埠的容器，則會使用映射的主機連接埠以及容器的私有 IP 來建立 Prometheus 匯出工具目標。`sd_metrics_path` 的值會將 `__metrics_path__` 設定為 `/stats/metrics`。因此，CloudWatch 代理程式將從 `private_ip:host_port/stats/metrics` 湊集 Prometheus 指標，而湊集的指標將會傳送至日誌群組 `/aws/ecs/containerinsights/cluster_name/prometheus` 中的 CloudWatch Logs 的 `haproxy-prometheus` 日誌串流。

**範例 5**

```
"ecs_service_discovery": {
  "sd_frequency": "1m30s",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "docker_label": {
    "sd_port_label": "MY_PROMETHEUS_EXPORTER_PORT_LABEL",
    "sd_metrics_path_label": "MY_PROMETHEUS_METRICS_PATH_LABEL",
    "sd_job_name_label": "MY_PROMETHEUS_METRICS_NAME_LABEL"  
  }
  "task_definition_list": [
    {
      "sd_metrics_ports": "9150",
      "sd_task_definition_arn_pattern": "*memcached.*"
    }
  ]
}
```

此範例會啟用兩種 ECS 服務探索模式。CloudWatch 代理程式將會每 90 秒查詢一次 ECS 任務的中繼資料，然後將已搜索到的目標寫入 CloudWatch 代理程式容器內的 `/tmp/cwagent_ecs_auto_sd.yaml` 檔案中。

若為 Docker 型服務探索組態：
+ 具有 Docker 標籤的 ECS 任務 `MY_PROMETHEUS_EXPORTER_PORT_LABEL` 將被篩選為 Prometheus 連接埠掃描。目標 Prometheus 容器連接埠由標籤 `MY_PROMETHEUS_EXPORTER_PORT_LABEL` 的值指定。
+ Docker 標籤的值 `MY_PROMETHEUS_EXPORTER_PORT_LABEL` 可用於 `__metrics_path__`。如果容器沒有此 Docker 標籤，則會使用預設值 `/metrics`。
+ Docker 標籤的值 `MY_PROMETHEUS_EXPORTER_PORT_LABEL` 可用作任務名稱。如果容器沒有此 Docker 標籤，則會使用 Prometheus 組態中定義的任務名稱。

若為 ECS 任務定義 ARN 規則表達式型服務探索組態：
+ 會篩選出 ECS 任務定義 ARN 中具有 `memcached` 的 ECS 任務，以進行容器連接埠掃描。目標 Prometheus 容器連接埠由 `sd_metrics_ports` 定義為 9150。使用預設指標路徑 `/metrics`。使用 Prometheus 組態中定義的任務名稱。