本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
監控 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 日誌群組。日誌群組名稱是固定的,您無法變更。
| 日誌群組 | 內容 | 日誌串流名稱 | 當它存在時 |
|---|---|---|---|
|
從應用程式的容器輸出。 |
|
當 |
|
應用程式發出的指標。 |
|
當 |
|
Elastic Beanstalk 代表您在叢集上執行的元件輸出。 |
|
永遠。 |
|
Elastic Beanstalk 為您發佈的內嵌指標格式指標。 |
|
永遠。 |
注意
這些日誌群組會共用。 AWS 帳戶和區域中的每個 Beanstalk 叢集環境都會在每個叢集中寫入相同的四個群組。您環境的資料會以日誌串流名稱分隔,而非以日誌群組分隔。Elastic Beanstalk 會在名為 的 Kubernetes 命名空間中執行每個環境,eb-後面接著環境名稱,因此您應用程式的日誌串流會以 eb-和 期間開始。您應用程式的指標串流以環境名稱和斜線開頭,沒有environment-nameeb-字首。
Elastic Beanstalk 在沒有保留政策的情況下建立這些日誌群組,因此其內容永遠不會過期。日誌串流名稱包含 Pod 名稱,因此每次部署都會建立新的串流,而先前部署的串流仍會保留。在每個日誌群組上設定保留政策,以限制您存放的內容。
Elastic Beanstalk 為您發佈的指標會在三個 CloudWatch 命名空間中到達。這三個都是自訂命名空間,您為每個指標支付 。Beanstalk Standard 環境會改為發佈至 CloudWatch 免費提供的AWS/ElasticBeanstalk命名空間。Beanstalk 叢集環境會針對每個複本發佈下列容器指標,因此自訂指標的數量會隨著您執行的複本數量而增加。如需目前的費率,請參閱 Amazon CloudWatch 定價
| 命名空間 | 指標 | Dimensions (尺寸) |
|---|---|---|
|
對於應用程式的容器: |
這兩個容器指標只會使用 |
|
相同的兩個容器指標,適用於 Elastic Beanstalk 代表您在叢集上執行的元件,而不是您的應用程式。 |
|
|
應用程式發出的指標,包括自動檢測產生的執行時間指標。 |
|
namespace 維度是 Kubernetes 命名空間,因此其值eb-後面接著您的環境名稱。ElasticBeanstalk/Application 命名空間會改用 維EnvironmentName度,其值本身即為環境名稱。使用與您查詢之命名空間相符的值。
如果您將 logs-backend 設定為 s3,Elastic Beanstalk 會elasticbeanstalk-logs-改為在從 Kubernetes 命名空間建置的金鑰下,將應用程式的日誌寫入名為 的儲存貯體、Pod 名稱和日期,而且不會進入 account-id-region-an/aws/elasticbeanstalk/application/logs。Elastic Beanstalk 會批次處理這些上傳,因此物件最多可能需要一分鐘才會出現。如果您將 logs-backend或 metrics-backend設定為 custom,則該資料會移至您設定的後端,而不會出現在任何這些日誌群組中。請參閱 將可觀測性資料傳送至第三方後端。
將可觀測性資料傳送至第三方後端
Beanstalk 叢集會使用 OpenTelemetry 收集器收集應用程式的遙測,因此您可以將它傳送到任何接受 OpenTelemetry 資料的後端,例如 Datadog 或 Splunk,而不是目的地 AWS 。您提供管道組態及其所需的登入資料,Elastic Beanstalk 會在應用程式的 Pod 中以附屬容器的形式執行管道。
設定第三方後端需要四件事:
-
設定您要重新導向至 的每個訊號
custom。這些訊號是獨立的,因此您可以在追蹤繼續前往時,將指標和日誌傳送至第三方後端 AWS X-Ray。在aws:elasticbeanstalk:eks:observability命名空間traces-backend中使用metrics-backendlogs-backend、 和 。 -
custom-config設定為收集器的管道組態,做為 JSON。參考每個登入資料做為${預留位置,而不是將 值放入組態中。NAME} -
將登入資料存放在 中, AWS Secrets Manager 並
custom-credentials設定為秘密的 ARN。秘密值必須是金鑰符合您組態中預留位置名稱的 JSON 物件。 -
在
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清單中。收集器接著會記錄其接收和匯出的遙測,告訴您資料是否到達收集器,以及收集器是否可以到達您的後端。