

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

# 監控 Beanstalk 叢集環境
<a name="monitoring-cluster-environments"></a>

Beanstalk 叢集環境會透過與 Beanstalk 標準環境相同的 Elastic Beanstalk 運作狀態模型和 APIs 來報告環境層級的運作狀態。您可以在 Elastic Beanstalk 主控台中檢視其運作狀態顏色和狀態，也可以呼叫 `DescribeEnvironmentHealth` 來讀取目前的顏色、狀態和解釋原因。運作狀態顏色和狀態在這兩種模式中都有相同的含義。

當 Beanstalk 叢集環境使用 Application Load Balancer 時，Elastic Beanstalk 會從環境的負載平衡器指標判斷應用程式運作狀態：請求率、傳回 HTTP 4xx 和 5xx 回應的請求比例，以及回應延遲。提供請求的環境會成功報告運作狀態良好。隨著失敗請求的比例增加，狀態會逐漸變得更嚴重。環境接收的流量太少，Elastic Beanstalk 無法評估請求率不足以判斷閒置環境的運作狀態的報告。如果您將負載平衡器類型設定為 `None`，則不適用此負載平衡器評估。

與 Beanstalk 標準環境不同，Beanstalk 叢集環境不會報告每個執行個體的運作狀態。Beanstalk 叢集不使用執行個體上運作狀態代理程式，且適用於標準環境的執行個體層級運作狀態報告設定也不適用。

容器探查可控制應用程式複本何時接收流量，以及何時重新啟動：整備性探查會從服務中移除未就緒的複本、即時性探查會重新啟動保持運作狀態不佳的複本，而啟動探查會提供啟動緩慢的複製時間進行初始化。使用 下的探查命名空間設定探查`aws:elasticbeanstalk:eks:environment`。請參閱 [容器探查命名空間](command-options-general-eks.md#command-options-eks-probes)。

## 指標、日誌和追蹤
<a name="monitoring-cluster-environments-observability"></a>

應用程式可觀測性與環境運作狀態不同。您可以使用 `aws:elasticbeanstalk:eks:observability` 命名空間中的組態選項，為應用程式的指標、日誌和追蹤選取後端。根據預設，Elastic Beanstalk 會將應用程式的指標和日誌傳送至 Amazon CloudWatch (CloudWatch)，而追蹤沒有後端。您可以改為將日誌傳送至 Amazon S3、將指標傳送至 Amazon Managed Service for Prometheus，以及將追蹤傳送至 AWS X-Ray。您也可以將這三個 中的任何一個傳送至接受 OpenTelemetry 資料的第三方後端；請參閱 [將可觀測性資料傳送至第三方後端](#monitoring-cluster-environments-custom-backend)。如需可用的選項，請參閱 [aws：elasticbeanstalk：eks：observability](command-options-general-eks.md#command-options-eks-observability)。

Elastic Beanstalk 會代您佈建和操作集合元件，並發佈基礎設施指標。您有責任檢測您的應用程式，使其發出您想要的指標、日誌和追蹤，並提供和維護您選取之任何目的地的存取權。

您的應用程式必須發出 OpenTelemetry 資料，後端才能接收任何內容。若要在不變更應用程式的情況下取得，請將 `aws:elasticbeanstalk:eks:environment` 命名空間中的 `language`選項設定為應用程式的執行時間。Elastic Beanstalk 會將該執行時間的 OpenTelemetry 自動檢測新增至您的容器，這適用於每個後端 AWS 和第三方。自動檢測適用於 Java、Node.js、Python 和 .NET 應用程式。對於 Java 應用程式，代理程式也會橋接 Log4j2、Logback 和 `java.util.logging`，以便您應用程式的日誌到達日誌後端，而不會進行任何應用程式變更。

與日誌後端分開，Elastic Beanstalk 會收集每個環境操作的部署日誌。它包含 Pod 的容器日誌和來自 操作的 Kubernetes 事件，這使得它成為操作失敗時可查看的位置。如需詳細資訊，請參閱[部署日誌](environments-deployment-logs.md)。

### 在 CloudWatch 中尋找您的日誌和指標
<a name="monitoring-cluster-environments-destinations"></a>

使用預設後端時，Elastic Beanstalk 會寫入四個 CloudWatch 日誌群組。日誌群組名稱是固定的，您無法變更。


**Beanstalk 叢集環境的 CloudWatch 日誌群組**  

| **日誌群組** | **內容** | **日誌串流名稱** | **當它存在時** | 
| --- | --- | --- | --- | 
| `/aws/elasticbeanstalk/application/logs` | 從應用程式的容器輸出。 | `eb-{{environment-name}}.{{pod-name}}` | 當 `logs-backend`為 時`cloudwatch`，預設為 。 | 
| `/aws/elasticbeanstalk/application/metrics` | 應用程式發出的指標。 | `{{environment-name}}/{{pod-name}}` | 當 `metrics-backend`為 `cloudwatch`時，預設 和您的應用程式會發出指標。 | 
| `/aws/elasticbeanstalk/infrastructure/logs` | Elastic Beanstalk 代表您在叢集上執行的元件輸出。 | `{{kubernetes-namespace}}.{{pod-name}}` | 永遠。 | 
| `/aws/elasticbeanstalk/infrastructure/metrics` | Elastic Beanstalk 為您發佈的內嵌指標格式指標。 | `{{kubernetes-namespace}}.{{pod-name}}` | 永遠。 | 

**注意**  
這些日誌群組會共用。 AWS 帳戶和區域中的每個 Beanstalk 叢集環境都會在每個叢集中寫入相同的四個群組。您環境的資料會以日誌串流名稱分隔，而非以日誌群組分隔。Elastic Beanstalk 會在名為 的 Kubernetes 命名空間中執行每個環境，`eb-`後面接著環境名稱，因此您應用程式的日誌串流會以 `eb-{{environment-name}}`和 期間開始。您應用程式的指標串流以環境名稱和斜線開頭，沒有`eb-`字首。

Elastic Beanstalk 在沒有保留政策的情況下建立這些日誌群組，因此其內容永遠不會過期。日誌串流名稱包含 Pod 名稱，因此每次部署都會建立新的串流，而先前部署的串流仍會保留。在每個日誌群組上設定保留政策，以限制您存放的內容。

Elastic Beanstalk 為您發佈的指標會在三個 CloudWatch 命名空間中到達。這三個都是自訂命名空間，您為每個指標支付 。Beanstalk Standard 環境會改為發佈至 CloudWatch 免費提供的`AWS/ElasticBeanstalk`命名空間。Beanstalk 叢集環境會針對每個複本發佈下列容器指標，因此自訂指標的數量會隨著您執行的複本數量而增加。如需目前的費率，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)。


**Beanstalk 叢集環境的 CloudWatch 指標**  

| **命名空間** | **指標** | **Dimensions (尺寸)** | 
| --- | --- | --- | 
| `ElasticBeanstalk/Infrastructure` | 對於應用程式的容器：`container_cpu_usage_seconds_total`、 `container_memory_working_set_bytes`和 `EnvironmentReplicas`，即已準備好的複本數量。 | 這兩個容器指標只會使用 `namespace`、 `pod``container`和 發佈`namespace`。 `namespace`只會使用 `EnvironmentReplicas` 發佈。 | 
| `ElasticBeanstalk/System` | 相同的兩個容器指標，適用於 Elastic Beanstalk 代表您在叢集上執行的元件，而不是您的應用程式。 | `namespace`、`container`、 `pod`和 ，再次`namespace`單獨使用 。 | 
| `ElasticBeanstalk/Application` | 應用程式發出的指標，包括自動檢測產生的執行時間指標。 | `EnvironmentName`。 請求持續時間也會使用 `http.method`、 `http.route`和 發佈`http.status_code`。 | 

`namespace` 維度是 Kubernetes 命名空間，因此其值`eb-`後面接著您的環境名稱。`ElasticBeanstalk/Application` 命名空間會改用 維`EnvironmentName`度，其值本身即為環境名稱。使用與您查詢之命名空間相符的值。

如果您將 `logs-backend` 設定為 `s3`，Elastic Beanstalk 會`elasticbeanstalk-logs-{{account-id}}-{{region}}-an`改為在從 Kubernetes 命名空間建置的金鑰下，將應用程式的日誌寫入名為 的儲存貯體、Pod 名稱和日期，而且不會進入 `/aws/elasticbeanstalk/application/logs`。Elastic Beanstalk 會批次處理這些上傳，因此物件最多可能需要一分鐘才會出現。如果您將 `logs-backend`或 `metrics-backend`設定為 `custom`，則該資料會移至您設定的後端，而不會出現在任何這些日誌群組中。請參閱 [將可觀測性資料傳送至第三方後端](#monitoring-cluster-environments-custom-backend)。

## 將可觀測性資料傳送至第三方後端
<a name="monitoring-cluster-environments-custom-backend"></a>

Beanstalk 叢集會使用 OpenTelemetry 收集器收集應用程式的遙測，因此您可以將它傳送到任何接受 OpenTelemetry 資料的後端，例如 Datadog 或 Splunk，而不是目的地 AWS 。您提供管道組態及其所需的登入資料，Elastic Beanstalk 會在應用程式的 Pod 中以附屬容器的形式執行管道。

設定第三方後端需要四件事：

1. 設定您要重新導向至 的每個訊號`custom`。這些訊號是獨立的，因此您可以在追蹤繼續前往時，將指標和日誌傳送至第三方後端 AWS X-Ray。在 `aws:elasticbeanstalk:eks:observability` 命名空間`traces-backend`中使用 `metrics-backend``logs-backend`、 和 。

1. `custom-config` 設定為收集器的管道組態，做為 JSON。參考每個登入資料做為`${{{NAME}}}`預留位置，而不是將 值放入組態中。

1. 將登入資料存放在 中， AWS Secrets Manager 並`custom-credentials`設定為秘密的 ARN。秘密值必須是金鑰符合您組態中預留位置名稱的 JSON 物件。

1. 在`aws:elasticbeanstalk:eks:environment`命名空間中設定 `application-role`選項，並授予該角色讀取秘密的許可。收集器會在執行時間使用應用程式角色，而非可觀測性角色，並透過 Pod 的身分到達秘密，而此身分僅在設定 `application-role` 時存在。如果沒有它，掛載會失敗，您的複本永遠不會啟動。

下列範例會將指標和日誌傳送至 Datadog，並將追蹤保持在 AWS X-Ray。首先，建立存放您組態參考之登入資料的秘密：

```
$ aws secretsmanager create-secret \
    --name {{my-app/otel-credentials}} \
    --secret-string '{"DD_API_KEY":"{{your-api-key}}"}'
```

授予應用程式角色讀取它的許可，以便收集器可以在執行時間擷取它：

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret"
      ],
      "Resource": "{{arn:aws:secretsmanager:us-east-1:111122223333:secret:my-app/otel-credentials-AbCdEf}}"
    }
  ]
}
```

Elastic Beanstalk 會依排程重新整理掛載的登入資料，而重新整理會檢查秘密的目前版本，因此除了 之外，`secretsmanager:DescribeSecret`還會授予 `secretsmanager:GetSecretValue`。環境`GetSecretValue`僅從 開始，但之後每次重新整理都會失敗。

接著，將選項設定放入檔案中。收集器組態包含逗號， 的速記語法`--option-settings`會視為分隔符號，因此請改為將設定傳遞為 JSON。將以下內容儲存為 `options.json`，管道組態為 `custom-config`值中的 JSON 字串：

```
[
  {
    "Namespace": "aws:elasticbeanstalk:eks:observability",
    "OptionName": "metrics-backend",
    "Value": "custom"
  },
  {
    "Namespace": "aws:elasticbeanstalk:eks:observability",
    "OptionName": "logs-backend",
    "Value": "custom"
  },
  {
    "Namespace": "aws:elasticbeanstalk:eks:observability",
    "OptionName": "traces-backend",
    "Value": "xray"
  },
  {
    "Namespace": "aws:elasticbeanstalk:eks:observability",
    "OptionName": "custom-config",
    "Value": "{\"receivers\":{\"otlp\":{\"protocols\":{\"grpc\":{\"endpoint\":\"0.0.0.0:4317\"},\"http\":{\"endpoint\":\"0.0.0.0:4318\"}}}},\"processors\":{\"batch\":{}},\"exporters\":{\"datadog\":{\"api\":{\"site\":\"{{datadoghq.com}}\",\"key\":\"${DD_API_KEY}\"}}},\"service\":{\"pipelines\":{\"metrics\":{\"receivers\":[\"otlp\"],\"processors\":[\"batch\"],\"exporters\":[\"datadog\"]},\"logs\":{\"receivers\":[\"otlp\"],\"processors\":[\"batch\"],\"exporters\":[\"datadog\"]}}}}"
  },
  {
    "Namespace": "aws:elasticbeanstalk:eks:observability",
    "OptionName": "custom-credentials",
    "Value": "{{arn:aws:secretsmanager:us-east-1:111122223333:secret:my-app/otel-credentials-AbCdEf}}"
  }
]
```

`site` 設定為組織使用的 Datadog 網站。然後套用 檔案：

```
$ aws elasticbeanstalk update-environment \
    --environment-name {{my-cluster-env}} \
    --option-settings file://options.json
```

為您設為 的每個訊號定義管道`custom`。您留在 AWS 目的地的訊號會繼續使用 Elastic Beanstalk 操作的集合，而且不需要自己的管道。

沒有設定的元件會採用空物件，如 `"batch": {}`。`receivers` 區塊是選用的。如果您省略它，Elastic Beanstalk 會新增應用程式傳送到的 OTLP 接收器，並記錄報告新增的環境事件。上述範例明確定義接收器。

當您設定此項目時，請將`debug`匯出工具新增至每個管道，並將其包含在管道的`exporters`清單中。收集器接著會記錄其接收和匯出的遙測，告訴您資料是否到達收集器，以及收集器是否可以到達您的後端。