搭配 Amazon CloudWatch Logs 使用 Elastic Beanstalk - AWS Elastic Beanstalk

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

搭配 Amazon CloudWatch Logs 使用 Elastic Beanstalk

本主題說明 Amazon CloudWatch Logs 服務可提供給 Elastic Beanstalk 的監控功能。它也會引導您完成組態設定,並列出每個 Elastic Beanstalk 平台的日誌位置。

實作 CloudWatch Logs 可讓您執行下列監控活動:

  • 從環境的 Amazon EC2 執行個體監控和封存 Elastic Beanstalk 應用程式、系統和自訂日誌檔案。

  • 設定警示,讓您更輕鬆地對指標篩選條件擷取的特定日誌串流事件做出反應。

安裝在環境中每個 Amazon EC2 執行個體上的 CloudWatch Logs 代理程式,會針對您所設定的每個日誌群組,將指標資料點發佈到 CloudWatch 服務。每個日誌群組會套用自己的篩選模式,來判斷哪些日誌串流事件做為資料點傳送到 CloudWatch。屬於同一個日誌群組的日誌串流,會共用相同的保留、監控和存取控制設定。您可以將 Elastic Beanstalk 設定為自動將日誌串流到 CloudWatch 服務,如 將執行個體日誌串流至 CloudWatch Logs 中所述。如需 CloudWatch Logs 的詳細資訊,包括術語和概念,請參閱 Amazon CloudWatch Logs 使用者指南

除了執行個體日誌,如果您為環境啟用增強行運作狀態,您可以將環境設定為將運作狀態資訊串流到 CloudWatch Logs。請參閱 將 Elastic Beanstalk 環境運作狀態資訊串流至 Amazon CloudWatch Logs

執行個體日誌串流到 CloudWatch Logs 的必要條件

若要啟用從環境的 Amazon EC2 執行個體到 CloudWatch Logs 的日誌串流,您必須符合以下條件。

  • 平台 – 由於此功能僅適用於此版本或之後發行的平台版本,如果您使用較早的平台版本,請將您的環境更新至目前的平台版本。

  • 如果您的 Elastic Beanstalk 執行個體設定檔中未包含 AWSElasticBeanstalkWebTierAWSElasticBeanstalkWorkerTier 受管政策,則您必須將下列程式碼加入您的設定檔中,以啟用此功能。

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": [ "*" ] } ] }

Elastic Beanstalk 如何設定 CloudWatch Logs

Elastic Beanstalk 會在其建立的每個執行個體上,使用預設的組態設定安裝 CloudWatch 日誌代理程式。如需進一步了解,請參閱 CloudWatch Logs 代理程式參考

當您啟用執行個體日誌串流到 CloudWatch Logs,Elastic Beanstalk 會將從您環境執行個體的日誌檔案傳送到 CloudWatch Logs。不同的平台會串流不同的日誌。下表根據平台列出了日誌。

平台/平台分支

日誌

Docker/

平台分支︰執行於 64 位元 Amazon Linux 2 的 Docker

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/docker

  • /var/log/docker-events.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Docker/

平台分支︰執行於 64 位元 Amazon Linux 2 的 ECS

  • /var/log/docker-events.log

  • /var/log/eb-ecs-mgr.log

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/ecs/ecs-agent.log

  • /var/log/ecs/ecs-init.log

Go

Linux 上的 .NET Core

Java/平台分支︰執行於 64 位元 Amazon Linux 2 的 Corretto

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/web.stdout.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Node.js

Python

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/web.stdout.log

  • /var/log/httpd/access_log

  • /var/log/httpd/error_log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Tomcat

PHP

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/httpd/access_log

  • /var/log/httpd/error_log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Windows Server 上的 .NET

  • C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

Ruby

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/puma/puma.log

  • /var/log/web.stdout.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

注意

2022 年 7 月 18 日,Elastic Beanstalk 已將所有以 Amazon Linux AMI (AL1) 為基礎的平台分支狀態設為已淘汰如需有關遷移至完全支援的目前 Amazon Linux 2023 平台分支的詳細資訊,請參閱 將您的 Elastic Beanstalk Linux 應用程式遷移到 Amazon Linux 2023 或 Amazon Linux 2

下表依據 Amazon Linux AMI (前身為 Amazon Linux 2),列出從平台上的執行個體串流的日誌檔案。

平台/平台分支

日誌

Docker/

平台分支︰執行於 64 位元 Amazon Linux 的 Docker

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

Docker/

平台分支︰執行於 64 位元 Amazon Linux 的多容器 Docker

  • /var/log/eb-activity.log

  • /var/log/ecs/ecs-init.log

  • /var/log/eb-ecs-mgr.log

  • /var/log/ecs/ecs-agent.log

  • /var/log/docker-events.log

Glassfish (預先設定的 Docker)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Go

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

Java/

平台分支︰執行於 64 位元 Amazon Linux 的 Java 8

平台分支︰執行於 64 位元 Amazon Linux 的 Java 7

  • /var/log/eb-activity.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

  • /var/log/web-1.error.log

  • /var/log/web-1.log

Tomcat

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /var/log/nginx/error_log

  • /var/log/nginx/access_log

Node.js

  • /var/log/eb-activity.log

  • /var/log/nodejs/nodejs.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

  • /var/log/httpd/error.log

  • /var/log/httpd/access.log

PHP

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

Python

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /opt/python/log/supervisord.log

Ruby/

平台分支︰執行於 64 位元 Amazon Linux 的 Puma with Ruby

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/puma/puma.log

  • /var/log/nginx/access.log

Ruby/

平台分支︰執行於 64 位元 Amazon Linux 的 Passenger with Ruby

  • /var/log/eb-activity.log

  • /var/app/support/logs/passenger.log

  • /var/app/support/logs/access.log

  • /var/app/support/logs/error.log

Elastic Beanstalk 在 CloudWatch Logs 中針對其串流的各個日誌檔案,設定日誌群組。若要從 CloudWatch Logs 擷取特定的日誌檔案,您必須了解對應的日誌群組的名稱。日誌群組命名結構描述取決於平台的作業系統。

對於 Linux 平台,使用 /aws/elasticbeanstalk/environment_name 做為執行個體日誌檔案位置的前置詞,以取得日誌群組名稱。例如,如果要擷取檔案 /var/log/nginx/error.log,請指定日誌群組名稱 /aws/elasticbeanstalk/environment_name/var/log/nginx/error.log

對於 Windows 平台,請參閱下表中對應到每個日誌檔的日誌群組。

執行個體上的日誌檔

日誌群組

C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

/aws/elasticbeanstalk/<environment-name>/EBDeploy-Log

C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

/aws/elasticbeanstalk/<environment-name>/EBHooks-Log

C:\inetpub\logs\LogFiles(整個目錄)

/aws/elasticbeanstalk/<environment-name>/IIS-Log

將執行個體日誌串流至 CloudWatch Logs

您可以使用 Elastic Beanstalk 主控台、EB CLI 或組態選項,啟用串流至 CloudWatch Logs 的執行個體日誌。

啟用前,請設定搭配 CloudWatch Logs 代理程式使用的 IAM 許可。您可以將下列的自訂政策,連接到您指派給環境的執行個體設定檔

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "*" ] } ] }

使用 Elastic Beanstalk 主控台的執行個體日誌串流

將執行個體日誌串流至 CloudWatch Logs
  1. 開啟 Elastic Beanstalk 主控台,然後在區域清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

  3. 在導覽窗格中,選擇組態

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

  5. Instance log streaming to CloudWatch Logs (執行個體日誌串流到 CloudWatch Logs) 下:

    • 啟用 Log streaming (日誌串流)

    • Retention (保留) 設為儲存日誌的天數。

    • 選取 Lifecycle (生命週期) 設定,其決定是否在環境終止後儲存日誌。

  6. 若要儲存變更,請選擇頁面底部的儲存變更

您在啟用日誌串流後,返回 Software (軟體) 組態類別或頁面,並且尋找 Log Groups (日誌群組) 連結。按一下此連結,在 CloudWatch 主控台中查看您的日誌。

使用 EB CLI 執行個體日誌串流

若要使用 EB CLI 將執行個體日誌串流到 CloudWatch Logs,請使用 eb logs 命令。

$ eb logs --cloudwatch-logs enable

您也可以使用 eb logs 擷取 CloudWatch Logs 的日誌,您可以擷取所有環境的執行個體日誌,或使用命令的許多選項,以指定要擷取的日誌子集。例如,以下命令為您的環境中擷取整組的執行個體日誌,並將它們儲存到 .elasticbeanstalk/logs 底下目錄。

$ eb logs --all

尤其是,--log-group 選項可讓您擷取特定日誌群組的執行個體日誌,其對應特定現場執行個體日誌檔。若要這樣做,您需要知道對應到您要擷取的日誌檔案的日誌群組名稱。您可以在 Elastic Beanstalk 如何設定 CloudWatch Logs 中尋找此資訊。

使用組態檔案的執行個體日誌串流

當您建立或更新環境時,您可以使用組態檔案來設定與配置執行個體日誌串流到 CloudWatch Logs。以下範例組態檔啟用預設執行個體日誌串流。Elastic Beanstalk 為您環境的平台串流預設的日誌檔組合。若要使用此範例,可將文字複製到您的應用程式來源套件最上層,.ebextensions 目錄中具有 .config 副檔名的檔案。

option_settings: - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: StreamLogs value: true

自訂日誌檔串流

與 CloudWatch Logs 的 Elastic Beanstalk 整合不會直接支援您的應用程式所產生的自訂日誌檔串流。若要串流自訂日誌,請使用組態檔案直接安裝 CloudWatch 代理程式,並設定要推送的檔案。如需範例組態檔,請參閱 logs-streamtocloudwatch-linux.config

注意

此範例不適用於 Windows 平台。

如需設定 CloudWatch Logs 的詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的 CloudWatch 代理程式組態檔案參考Amazon CloudWatch

疑難排解 CloudWatch Logs 整合

找不到環境執行個體日誌

如果您在 CloudWatch Logs 中找不到一些預期的環境執行個體日誌,請調查下列常見問題:

  • 您的 IAM 角色缺少所需的 IAM 權限。

  • 您在不支援 CloudWatch Logs AWS 區域 的 中啟動環境。

  • 其中一個自訂日誌檔不存在於您指定的路徑。

應用程式日誌遺失或間歇性

如果您的 Elastic Beanstalk 應用程式日誌 (/var/log/web.stdout.log) 似乎遺失或間歇性,這可能是由於 rsyslog 和日誌中的預設速率限制設定所致。雖然完全停用速率限制可以解決此問題,但不建議這麼做,因為它可能會導致磁碟使用量過高、可能拒絕服務或意外日誌爆量期間系統效能降低。反之,您可以使用下列 調整速率限制.ebextensions configuration。此組態會將速率限制間隔增加到 600 秒,並具有更高的爆量限制,在適當的記錄和系統保護之間取得平衡。

調節問題

如果同時啟動大量執行個體的 Elastic Beanstalk 操作傳回類似 的訊息Error: fail to create log stream: ThrottlingException: Rate exceeded,則會從對 CloudWatch API 的太多呼叫進行限流。

若要解決限流問題,請採取下列其中一個動作: