View a markdown version of this page

監控 Beanstalk 叢集環境 - AWS Elastic Beanstalk

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

監控 Beanstalk 叢集環境

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。請參閱 容器探查命名空間。

指標、日誌和追蹤

應用程式可觀測性與環境運作狀態不同。您可以使用 aws:elasticbeanstalk:eks:observability 命名空間中的組態選項,為應用程式的指標、日誌和追蹤選取後端。根據預設,Elastic Beanstalk 會將應用程式的指標和日誌傳送至 Amazon CloudWatch (CloudWatch),而追蹤沒有後端。您可以改為將日誌傳送至 Amazon S3、將指標傳送至 Amazon Managed Service for Prometheus,以及將追蹤傳送至 AWS X-Ray。您也可以將這三個 中的任何一個傳送至接受 OpenTelemetry 資料的第三方後端;請參閱 將可觀測性資料傳送至第三方後端。如需可用的選項,請參閱 aws:elasticbeanstalk: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 事件,這使得它成為操作失敗時可查看的位置。如需詳細資訊,請參閱部署日誌。

在 CloudWatch 中尋找您的日誌和指標

使用預設後端時,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 定價。

Beanstalk 叢集環境的 CloudWatch 指標
命名空間 指標 Dimensions (尺寸)

ElasticBeanstalk/Infrastructure

對於應用程式的容器:container_cpu_usage_seconds_total、 container_memory_working_set_bytes和 EnvironmentReplicas,即已準備好的複本數量。

這兩個容器指標只會使用 namespace、 podcontainer和 發佈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,則該資料會移至您設定的後端,而不會出現在任何這些日誌群組中。請參閱 將可觀測性資料傳送至第三方後端。

將可觀測性資料傳送至第三方後端

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

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

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

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

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

  4. 在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清單中。收集器接著會記錄其接收和匯出的遙測,告訴您資料是否到達收集器,以及收集器是否可以到達您的後端。