

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

# 在 Elastic Beanstalk 環境中檢視 Amazon EC2 執行個體的日誌
<a name="using-features.logging"></a>

本主題說明 Elastic Beanstalk 提供的執行個體日誌類型。它也提供擷取和管理它們的詳細說明。

Elastic Beanstalk 環境的 Amazon EC2 執行個體會產生日誌，您可加以檢視針對應用程式或組態檔案進行問題疑難排解。由 Web 伺服器、應用程式伺服器、Elastic Beanstalk 平台指令碼和 建立的日誌 CloudFormation 會儲存在本機的個別執行個體上。您可以使用[環境管理主控台](environments-console.md)或 EB CLI 輕鬆擷取他們。您也可以將環境設定為即時將日誌串流至 Amazon CloudWatch Logs。

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

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

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

**擷取執行個體日誌**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

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

1. 在導覽窗格中，選擇**日誌**。

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

1. 當 Elastic Beanstalk 完成擷取記錄檔時，請選擇 **Download (下載)**。

Elastic Beanstalk 會將結尾和套件日誌儲存在 Amazon S3 儲存貯體中，並產生一個預先簽章的 Amazon S3 URL，讓您用來存取日誌。Elastic Beanstalk 會在 15 分鐘後從 Amazon S3 刪除檔案。

**警告**  
擁有預先簽章之 Amazon S3 URL 的任何人皆可在檔案被刪除之前存取檔案。請務必僅將此 URL 提供給可信任者。

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

若要保留日誌，您可以將環境設定為在日誌輪換後自動發佈至 Amazon S3。若要啟用 Amazon S3 的日誌輪換，請遵循 [設定執行個體日誌檢視](environments-cfg-logging.md#environments-cfg-logging-console) 中的程序。環境中的執行個體會每小時嘗試上傳已輪換的日誌。

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

若要進行即時日誌串流和長期儲存，請設定您的環境以[串流日誌到 Amazon CloudWatch Logs](#health-logs-cloudwatchlogs)。

若要取得環境日誌、事件和執行個體運作狀態的 AI 支援分析，以識別運作狀態問題的根本原因和解決方案，請參閱 [AI 驅動的環境分析](health-ai-analysis.md)。

**Topics**
+ [Amazon EC2 執行個體上的日誌位置](#health-logs-instancelocation)
+ [Amazon S3 中的日誌位置](#health-logs-s3location)
+ [Linux 上的日誌輪換設定](#health-logs-logrotate)
+ [擴展預設日誌任務組態](#health-logs-extend)
+ [將日誌檔案串流至 Amazon CloudWatch Logs](#health-logs-cloudwatchlogs)

## Amazon EC2 執行個體上的日誌位置
<a name="health-logs-instancelocation"></a>

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

**Amazon Linux 2**
+ `/var/log/eb-engine.log`

**Amazon Linux AMI (AL1)**

**注意**  
 在 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)Elastic Beanstalk 會根據 Amazon Linux AMI (AL1) 將所有平台分支的狀態設定為**已淘汰**。如需有關遷移至完全支援的目前 Amazon Linux 2023 平台分支的詳細資訊，請參閱 [將您的 Elastic Beanstalk Linux 應用程式遷移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。
+ `/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`](ebextensions.md)) 相關的訊息。

各個應用程式和 Web 伺服器將日誌存放於自己的資料夾：
+ **Apache** – `/var/log/httpd/`
+ **IIS** – `C:\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 中的日誌位置
<a name="health-logs-s3location"></a>

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

例如，帳戶 `i-0a1fd158`中 AWS 區域中 Elastic Beanstalk `e-mpcwnwheky`環境中執行個體 `us-west-2`的日誌`123456789012`會存放在下列位置：
+ **結尾日誌** –

  `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 刪除。輪換的日誌會持續存在，直到您將其刪除或移至 Amazon Glacier。

## Linux 上的日誌輪換設定
<a name="health-logs-logrotate"></a>

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

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

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

## 擴展預設日誌任務組態
<a name="health-logs-extend"></a>

Elastic Beanstalk 會使用 Amazon EC2 執行個體上 `/opt/elasticbeanstalk/tasks` (Linux) 或 `C:\Program Files\Amazon\ElasticBeanstalk\config` (Windows Server) 的子資料夾內的檔案，設定結尾日誌、套件日誌和日誌輪換的任務。

**在 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\bundlelogs.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](ebextensions.md)`) 將自己的 `.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-cli3.md) 部署範例應用程式。為此，EB CLI 會建立包含具有範例組態之 `.ebextentions` 子目錄的本機應用程式目錄。您也可以使用範例應用程式的日誌檔案來探索本主題所述的日誌擷取功能。

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

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

### 於 Linux 上擴展日誌輪換
<a name="health-logs-extend-rotation-linux"></a>

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

### 於 Windows Server 上擴展日誌輪換
<a name="health-logs-extend-rotation-windows"></a>

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

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

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

## 將日誌檔案串流至 Amazon CloudWatch Logs
<a name="health-logs-cloudwatchlogs"></a>

您可將環境設定為在 Elastic Beanstalk 主控台中串流日誌至 Amazon CloudWatch Logs，或使用[組態選項](command-options.md)來進行此作業。透過 CloudWatch Logs，您環境的各個執行個體會將日誌串流至日誌群組，您可將日誌群組設定為保留數週或數年，甚至保留到環境終止之後。

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

您可以在[建立環境期間](environments-create-wizard.md#environments-create-wizard-software)或[為現有環境](environments-cfg-logging.md#environments-cfg-logging-console)，在 Elastic Beanstalk 主控台設定日誌串流。您可以從主控台設定下列選項：啟用 /停用日誌串流至 CloudWatch Logs、設定保留天數，然後從生命週期選項中選取。在以下範例中，日誌儲存會長達 7 天，即使環境終止也一樣。

![\[Elastic Beanstalk 主控台中 CloudWatch Logs 設定的螢幕影像。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/log-streaming-screen.png)


下列[組態檔案](ebextensions.md)的日誌串流保留期間為 180 天，即使環境終止也是如此。

**Example .ebextensions/log-streaming.config**  

```
option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: true
    DeleteOnTerminate: false
    RetentionInDays: 180
```