在 Elastic Beanstalk EC2 環境中查看來自 Amazon 執行個體的日誌 - AWS Elastic Beanstalk

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

在 Elastic Beanstalk EC2 環境中查看來自 Amazon 執行個體的日誌

本主題說明 Elastic Beanstalk 提供的執行個體記錄類型。它還提供了修復和管理它們的詳細說明。

Elastic Beanstalk 環境中的 Amazon EC2 執行個體會產生日誌,您可以檢視這些日誌以對應用程式或組態檔案的問題進行疑難排解。由 Web 伺服器、應用程式伺服器、Elastic Beanstalk 平台指令碼建立的記錄檔,並儲存 AWS CloudFormation 在本機個別執行個體上。您可以使用環境管理主控台或 EB CLI 輕鬆擷取它們。您也可以將環境設定為即時將日 CloudWatch 誌串流到 Amazon 日誌。

結尾日誌是最常使用日誌檔案 (Elastic Beanstalk 操作日誌及來自 web 伺服器或應用程式伺服器的日誌) 的最後 100 行。當您透過環境主控台或 eb logs 請求結尾日誌時,環境中的一個執行個體會將最近的日誌項目串連為單一文字檔案,並上傳至 Amazon S3。

套件日誌為更多日誌檔案的完整日誌,包括來自 yum 和 cron 的日誌以及數個來自 AWS CloudFormation的日誌。當您請求捆綁日誌時,環境中的執行個體會將完整的日誌檔封裝到ZIP存檔中,並將其上傳到 Amazon S3。

注意

Elastic Beanstalk Windows Server 平台不支援套件日誌。

若要將輪換日誌上傳至 Amazon S3,環境中的執行個體必須具備執行個體描述檔,其中包含寫入至 Elastic Beanstalk Amazon S3 儲存貯體的許可。當您在 Elastic Beanstalk 主控台首次啟動環境時,Elastic Beanstalk 提示您建立的執行個體描述檔預設即包含這些許可。

擷取執行個體日誌
  1. 開啟彈性魔豆控制台,然後在區域清單中選取您的. AWS 區域

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇日誌

  4. 選擇 Request Logs (請求日誌),然後選擇要擷取的日誌類型。欲取得結尾日誌,選擇 Last 100 Lines (最後 100 行)。欲取得套件日誌,選擇 Full Logs (完整日誌)

  5. 當 Elastic Beanstalk 完成擷取記錄檔時,請選擇 Download (下載)

Elastic Beanstalk 將尾部和捆綁日誌存放在 Amazon S3 儲存貯體中,並產生可用於存取日誌URL的預先簽署 Amazon S3。Elastic Beanstalk 會在 15 分鐘後從 Amazon S3 刪除檔案。

警告

擁有預先簽署 Amazon S3 的任何人都URL可以在刪除檔案之前存取檔案。僅URL提供給受信任的各方使用。

注意

您的使用者政策必須具有 s3:DeleteObject 許可。Elastic Beanstalk 會使用您的使用者許可從 Amazon S3 刪除日誌。

若要保留日誌,您可以將環境設定為在日誌輪換後自動發佈至 Amazon S3。若要啟用 Amazon S3 的日誌輪換,請遵循 設定執行個體日誌檢視 中的程序。環境中的執行個體會每小時嘗試上傳已輪換的日誌。

若您的應用程式並未在做為您環境平台預設組態一部分的位置內產生日誌,您可以使用組態檔案 (.ebextensions) 來延伸預設組態。您可將應用程式的日誌檔案,新增至結尾日誌、套件日誌或日誌輪換。

對於即時日誌串流和長期儲存,請將您的環境設定為將日誌串流到 Amazon CloudWatch Logs

Amazon EC2 執行個體上的記錄位置

日誌存放在您環境中 Amazon EC2 執行個體上的標準位置。Elastic Beanstalk 會產生下列日誌。

Amazon Linux 2

  • /var/log/eb-engine.log

Amazon AMI (AL1)

注意

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

  • /var/log/eb-activity.log

  • /var/log/eb-commandprocessor.log

Windows Server

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\

  • C:\cfn\log\cfn-init.log

這些日誌會納入部署活動的訊息,包括與組態檔案 (.ebextensions) 相關的訊息。

各個應用程式和 Web 伺服器將日誌存放於自己的資料夾:

  • Apache/var/log/httpd/

  • IISC:\inetpub\wwwroot\

  • Node.js/var/log/nodejs/

  • nginx/var/log/nginx/

  • Passenger/var/app/support/logs/

  • Puma/var/log/puma/

  • Python/opt/python/log/

  • Tomcat/var/log/tomcat/

Amazon S3 中的日誌位置

當您自環境請求結尾或套件日誌,或當執行個體上傳輪換日誌時,這些日誌會存放於 Amazon S3 內的 Elastic Beanstalk 儲存貯體。Elastic Beanstalk 會為您在其中建立環境elasticbeanstalk-region-account-id的每個 AWS 區域建立一個名為的值區。在此儲存貯體內,日誌會存放於此路徑下:resources/environments/logs/logtype/environment-id/instance-id

例如,帳123456789012戶中 AWS 區域的 Elastic Beanstalk 環境e-mpcwnwheky中執i-0a1fd158行個體us-west-2的記錄會儲存在下列位置:

  • 結尾日誌

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/tail/e-mpcwnwheky/i-0a1fd158

  • 套件日誌

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/bundle/e-mpcwnwheky/i-0a1fd158

  • 輪換日誌

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/publish/e-mpcwnwheky/i-0a1fd158

注意

您可以在環境管理主控台中找到您的環境 ID。

在結尾和套件日誌產生後的 15 分鐘,Elastic Beanstalk 會自動將其自 Amazon S3 刪除。輪換日誌會保留,直到您將其刪除或移至 S3 Glacier。

Linux 上的日誌輪換設定

在 Linux 平台上,Elastic Beanstalk 會使用 logrotate 來定期輪換日誌。若經過設定,日誌於本機輪換後,將由日誌輪換任務選取並上傳至 Amazon S3。於本機輪換的日誌,預設不會顯示於結尾或套件日誌。

您可於 /etc/logrotate.elasticbeanstalk.hourly/ 找到 logrotate 的 Elastic Beanstalk 組態檔案。這些輪換設定為平台特定,未來的平台版本可能會加以變更。如需有關可用設定和範例組態的詳細資訊,請執行 man logrotate

定時守護作業 (cron job) 會於 /etc/cron.hourly/ 中叫用組態檔案。如需關於 cron的詳細資訊,請執行 man cron

擴展預設日誌任務組態

Elastic Beanstalk 使用 Amazon EC2 執行個體上 /opt/elasticbeanstalk/tasks (Linux) 或 C:\Program Files\Amazon\ElasticBeanstalk\config (Windows 伺服器) 子資料夾中的檔案來設定尾部日誌、捆綁日誌和日誌輪替的任務。

在 Amazon Linux 上:

  • 結尾日誌

    /opt/elasticbeanstalk/tasks/taillogs.d/

  • 套件日誌

    /opt/elasticbeanstalk/tasks/bundlelogs.d/

  • 輪換日誌

    /opt/elasticbeanstalk/tasks/publishlogs.d/

在 Windows Server 上:

  • 結尾日誌

    c:\Program Files\Amazon\ElasticBeanstalk\config\taillogs.d\

  • 輪換日誌

    c:\Program Files\Amazon\ElasticBeanstalk\config\publogs.d\

例如,Linux 上的檔案 eb-activity.conf 會將兩個日誌檔新增至結尾日誌任務。

/opt/elasticbeanstalk/tasks/taillogs.d/eb-activity.conf

/var/log/eb-commandprocessor.log /var/log/eb-activity.log

您可使用環境資訊檔案 (.ebextensions) 將自己的 .conf 檔案新增至這些資料夾。.conf 檔案會列出您應用程式特定的日誌檔案,Elastic Beanstalk 會將其新增至日誌檔案任務。

使用 files 區段將組態檔案新增至您欲修改的任務。例如,下列組態文字會將日誌組態檔案加入至您環境中的每個執行個體。此日誌組態檔案 cloud-init.conf 新增 /var/log/cloud-init.log 到結尾日誌。

files: "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" : mode: "000755" owner: root group: root content: | /var/log/cloud-init.log

將此文字新增至副檔名為 .config 的檔案,再將此檔案新增至名為 .ebextensions 的資料夾下原始碼套件中。

~/workspace/my-app |-- .ebextensions | `-- tail-logs.config |-- index.php `-- styles.css

在 Linux 平台上,您也可以在日誌任務組態中使用萬用字元。此組態檔案會自應用程式根目錄的 .log 資料夾,將副檔名為 log 的所有檔案新增至套件日誌。

files: "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" : mode: "000755" owner: root group: root content: | /var/app/current/log/*.log

日誌任務組態在 Windows 平台上不支援萬用字元。

注意

若要協助您熟悉記錄自訂程序,您可以使用 EB 部署範例應用程式。CLI為此,EB CLI 會建立包含具有範例組態之.ebextentions子目錄的本機應用程式目錄。您也可以使用範例應用程式的日誌檔案來探索本主題所述的日誌擷取功能。如需如何使用 EB 建立範例應用程式的詳細資訊CLI,請參閱 EB CLI 基礎知識。

如需使用組態檔案的詳細資訊,請參閱使用組態檔案 (.ebextensions) 來進行進階的環境自訂

您可使用組態檔案來擴展日誌輪換,如同擴展結尾日誌和套件日誌。每當 Elastic Beanstalk 輪換自己的日誌並將其上傳至 Amazon S3 時,也會輪換並上傳您的其他日誌。日誌輪換擴展的行為依平台作業系統而異。下列小節描述兩種情況。

於 Linux 上擴展日誌輪換

Linux 上的日誌輪換設定中所說明,在 Linux 平台上,Elastic Beanstalk 會使用 logrotate 來輪換日誌。當您將應用程式的日誌檔案設定為日誌輪換,該應用程式不需要建立日誌檔案的副本。Elastic Beanstalk 會設定 logrotate,於每次輪換複製您的應用程式日誌檔案。因此,應用程式在主動寫入日誌期間之外,必須讓日誌檔案保持解鎖狀態。

於 Windows Server 上擴展日誌輪換

在 Windows Server 上,當您將應用程式的日誌檔案設定為日誌輪換,該應用程式必須定期輪換日誌檔案。Elastic Beanstalk 會尋找檔名開頭與您所設定的模式相符的檔案,將其選取以上傳至 Amazon S3。此外,Elastic Beanstalk 會忽略檔名的句點,將句點前的名稱視為基本日誌檔案名稱。

Elastic Beanstalk 會上傳基本日誌檔案的所有版本 (除了最新版本),因其認為最新版本為作用中的應用程式日誌檔案,可能會被鎖定。因此,您的應用程式於輪換之間可鎖定作用中的日誌檔案。

例如,您的應用程式寫入名為 my_log.log 的日誌檔案,而且您在 .conf 檔案中指定了此名稱。應用程式會定期輪換檔案。在 Elastic Beanstalk 輪換循環時,會於日誌檔案資料夾找出下列檔案:my_log.logmy_log.0800.logmy_log.0830.log。Elastic Beanstalk 會將它們視為基本名稱 my_log 的版本。檔案 my_log.log 的修改時間最晚,因此 Elastic Beanstalk 僅會上傳其他兩個檔案:my_log.0800.logmy_log.0830.log

將日誌檔串流至 Amazon CloudWatch 日誌

您可以在 Elastic Beanstalk 主控台中將環境設定為將 CloudWatch 日誌串流到 Amazon 日誌,或使用組態選項。有了 CloudWatch Logs,您環境中的每個執行個體都會串流記錄到可設定為保留數週或數年的記錄群組,即使在您的環境終止之後也是如此。

所串流的日誌組會依環境而異,不過一律會包含 eb-engine.log,以及於應用程式前方執行的 nginx 或 Apache 代理伺服器存取日誌。

您可以在建立環境期間為現有環境,在 Elastic Beanstalk 主控台設定日誌串流。您可以從主控台設定下列選項:啟用/停用記錄串流至 CloudWatch 記錄檔、設定保留天數,以及從生命週期選項中選取。在以下範例中,日誌儲存會長達 7 天,即使環境終止也一樣。

Elastic Beanstalk 控制台中 CloudWatch 日誌設置的屏幕圖像。

下列組態檔案的日誌串流保留期間為 180 天,即使環境終止也是如此。

範例 .ebextensions/log-streaming.config
option_settings: aws:elasticbeanstalk:cloudwatch:logs: StreamLogs: true DeleteOnTerminate: false RetentionInDays: 180