

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

# 搭配 Amazon CloudWatch Logs 使用 Elastic Beanstalk
<a name="AWSHowTo.cloudwatchlogs"></a>

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

實作 CloudWatch Logs 可讓您執行下列監控活動：
+ 從環境的 Amazon EC2 執行個體監控和封存 Elastic Beanstalk 應用程式、系統和自訂日誌檔案。
+ 設定警示，讓您更輕鬆地對指標篩選條件擷取的特定日誌串流事件做出反應。

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

除了執行個體日誌，如果您為環境啟用[增強行運作狀態](health-enhanced.md)，您可以將環境設定為將運作狀態資訊串流到 CloudWatch Logs。請參閱 [將 Elastic Beanstalk 環境運作狀態資訊串流至 Amazon CloudWatch Logs](AWSHowTo.cloudwatchlogs.envhealth.md)。

**Topics**
+ [執行個體日誌串流至 CloudWatch Logs 的先決條件](#AWSHowTo.cloudwatchlogs.prereqs)
+ [Elastic Beanstalk 如何設定 CloudWatch Logs](#AWSHowTo.cloudwatchlogs.loggroups)
+ [將執行個體日誌串流至 CloudWatch Logs](#AWSHowTo.cloudwatchlogs.streaming)
+ [疑難排解 CloudWatch Logs 整合](#AWSHowTo.cloudwatchlogs.troubleshoot)
+ [將 Elastic Beanstalk 環境運作狀態資訊串流至 Amazon CloudWatch Logs](AWSHowTo.cloudwatchlogs.envhealth.md)

## 執行個體日誌串流至 CloudWatch Logs 的先決條件
<a name="AWSHowTo.cloudwatchlogs.prereqs"></a>

如果您在 Elastic Beanstalk 執行個體描述檔中沒有 *AWSElasticBeanstalkWebTier* 或 *AWSElasticBeanstalkWorkerTier* Elastic Beanstalk 受管政策，則必須將下列許可新增至您的描述檔以啟用此功能。 [Elastic Beanstalk 執行個體描述檔](concepts-roles-instance.md)

------
#### [ JSON ]

****  

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

------

## Elastic Beanstalk 如何設定 CloudWatch Logs
<a name="AWSHowTo.cloudwatchlogs.loggroups"></a>

Elastic Beanstalk 會在其建立的每個執行個體上，使用預設的組態設定安裝 CloudWatch 日誌代理程式。如需進一步了解，請參閱 [CloudWatch 代理程式文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)。

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


****  

|  平台/平台分支  |  日誌  | 
| --- | --- | 
| Docker |  +  /var/log/eb-engine.log <br />+  /var/log/eb-hooks.log <br />+  /var/log/docker <br />+  /var/log/docker-events.log <br />+  /var/log/eb-docker/containers/eb-current-app/stdouterr.log <br />+  /var/log/nginx/access.log <br />+  /var/log/nginx/error.log   | 
| Docker 上的 ECS |  +  /var/log/docker-events.log <br />+  /var/log/eb-ecs-mgr.log <br />+  /var/log/eb-engine.log <br />+  /var/log/eb-hooks.log <br />+  /var/log/ecs/ecs-agent.log <br />+  /var/log/ecs/ecs-init.log   | 
| Go<br />Linux 上的 .NET Core<br />Java |  +  /var/log/eb-engine.log <br />+  /var/log/eb-hooks.log <br />+  /var/log/web.stdout.log <br />+  /var/log/nginx/access.log <br />+  /var/log/nginx/error.log   | 
| Node.js<br />Python |  +  /var/log/eb-engine.log <br />+  /var/log/eb-hooks.log <br />+  /var/log/web.stdout.log <br />+  /var/log/httpd/access\_log <br />+  /var/log/httpd/error\_log <br />+  /var/log/nginx/access.log <br />+  /var/log/nginx/error.log   | 
| Tomcat<br />PHP |  +  /var/log/eb-engine.log <br />+  /var/log/eb-hooks.log <br />+  /var/log/httpd/access\_log <br />+  /var/log/httpd/error\_log <br />+  /var/log/nginx/access.log <br />+  /var/log/nginx/error.log   | 
| Windows Server 上的 .NET |  +  C:\\inetpub\\logs\\LogFiles\\W3SVC1\\u\_ex\*.log <br />+  C:\\Program Files\\Amazon\\ElasticBeanstalk\\logs\\AWSDeployment.log <br />+  C:\\Program Files\\Amazon\\ElasticBeanstalk\\logs\\Hooks.log   | 
| Ruby |  +  /var/log/eb-engine.log <br />+  /var/log/eb-hooks.log <br />+  /var/log/puma/puma.log <br />+  /var/log/web.stdout.log <br />+  /var/log/nginx/access.log <br />+  /var/log/nginx/error.log   | 

### Amazon Linux AMI 平台上的日誌檔案
<a name="AWSHowTo.cloudwatchlogs.loggroups.alami"></a>

**注意**  
 在 [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)。

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


****  

|  平台/平台分支  |  日誌  | 
| --- | --- | 
| Docker/ <br />平台分支︰執行於 64 位元 Amazon Linux 的 Docker |  +  /var/log/eb-activity.log <br />+  /var/log/nginx/error.log <br />+  /var/log/docker-events.log <br />+  /var/log/docker <br />+  /var/log/nginx/access.log <br />+  /var/log/eb-docker/containers/eb-current-app/stdouterr.log   | 
| Docker/ <br />平台分支︰執行於 64 位元 Amazon Linux 的多容器 Docker |  +  /var/log/eb-activity.log <br />+  /var/log/ecs/ecs-init.log <br />+  /var/log/eb-ecs-mgr.log <br />+  /var/log/ecs/ecs-agent.log <br />+  /var/log/docker-events.log   | 
| Glassfish (預先設定的 Docker) |  +  /var/log/eb-activity.log <br />+  /var/log/nginx/error.log <br />+  /var/log/docker-events.log <br />+  /var/log/docker <br />+  /var/log/nginx/access.log   | 
| Go |  +  /var/log/eb-activity.log <br />+  /var/log/nginx/error.log <br />+  /var/log/nginx/access.log   | 
| Java/<br />平台分支︰執行於 64 位元 Amazon Linux 的 Java 8<br />平台分支︰執行於 64 位元 Amazon Linux 的 Java 7 |  +  /var/log/eb-activity.log <br />+  /var/log/nginx/access.log <br />+  /var/log/nginx/error.log <br />+  /var/log/web-1.error.log <br />+  /var/log/web-1.log   | 
| Tomcat |  +  /var/log/eb-activity.log <br />+  /var/log/httpd/error\_log <br />+  /var/log/httpd/access\_log <br />+  /var/log/nginx/error\_log <br />+  /var/log/nginx/access\_log   | 
| Node.js |  +  /var/log/eb-activity.log <br />+  /var/log/nodejs/nodejs.log <br />+  /var/log/nginx/error.log <br />+  /var/log/nginx/access.log <br />+  /var/log/httpd/error.log <br />+  /var/log/httpd/access.log   | 
| PHP |  +  /var/log/eb-activity.log <br />+  /var/log/httpd/error\_log <br />+  /var/log/httpd/access\_log   | 
| Python |  +  /var/log/eb-activity.log <br />+  /var/log/httpd/error\_log <br />+  /var/log/httpd/access\_log <br />+  /opt/python/log/supervisord.log   | 
| Ruby/<br />平台分支︰執行於 64 位元 Amazon Linux 的 Puma with Ruby |  +  /var/log/eb-activity.log <br />+  /var/log/nginx/error.log <br />+  /var/log/puma/puma.log <br />+  /var/log/nginx/access.log   | 
| Ruby/ 平台分支︰執行於 64 位元 Amazon Linux 的 Passenger with Ruby |  +  /var/log/eb-activity.log <br />+  /var/app/support/logs/passenger.log <br />+  /var/app/support/logs/access.log <br />+  /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
<a name="AWSHowTo.cloudwatchlogs.streaming"></a>

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

啟用前，請設定搭配 CloudWatch Logs 代理程式使用的 IAM 許可。如果您使用的是 *AWSElasticBeanstalkWebTier* 或 *AWSElasticBeanstalkWorkerTier* 受管政策 （請參閱 [執行個體日誌串流至 CloudWatch Logs 的先決條件](#AWSHowTo.cloudwatchlogs.prereqs))，您已具備必要的許可。否則，請將下列自訂政策連接至您指派給環境的[執行個體描述檔](concepts-roles-instance.md)。

------
#### [ JSON ]

****  

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

------

### 使用 Elastic Beanstalk 主控台的執行個體日誌串流
<a name="AWSHowTo.cloudwatchlogs.streaming.console"></a>

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

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

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

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

1. 在 **Instance log streaming to CloudWatch Logs (執行個體日誌串流到 CloudWatch Logs)** 下：
   + 啟用 **Log streaming (日誌串流)**。
   + 將 **Retention (保留)** 設為儲存日誌的天數。
   + 選取 **Lifecycle (生命週期)** 設定，其決定是否在環境終止後儲存日誌。
**重要**  
如果您在**終止時選取刪除日誌**，當您終止環境時，日誌群組和所有日誌資料都會永久刪除。這個動作無法復原。若要保留日誌以進行偵錯或合規，請選取**終止環境後保留日誌**。

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

啟用日誌串流後，Elastic Beanstalk 會在環境管理主控台的日誌頁面上顯示串流的 CloudWatch **Logs 日誌**群組。選擇日誌群組以在內建檢視器中檢視其日誌事件：Elastic Beanstalk 會自動選取最新的作用中日誌串流，而且您可以切換串流、搜尋和篩選事件，以及載入較早的事件。

### 使用 EB CLI 執行個體日誌串流
<a name="AWSHowTo.cloudwatchlogs.streaming.ebcli"></a>

若要使用 EB CLI 將執行個體日誌串流到 CloudWatch Logs，請使用 [**eb logs**](eb3-logs.md) 命令。

```
$ eb logs --cloudwatch-logs enable
```

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

```
$ eb logs --all
```

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

### 使用組態檔案的執行個體日誌串流
<a name="AWSHowTo.cloudwatchlogs.files"></a>

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

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

### 自訂日誌檔串流
<a name="AWSHowTo.cloudwatchlogs.streaming.custom"></a>

與 CloudWatch Logs 的 Elastic Beanstalk 整合不會直接支援您的應用程式所產生的自訂日誌檔串流。若要串流自訂日誌，請使用組態檔案直接安裝 CloudWatch 代理程式，並設定要推送的檔案。如需範例組態檔，請參閱 [`logs-streamtocloudwatch-linux.config`](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config)。

**注意**  
此範例不適用於 Windows 平台。

如需設定 CloudWatch Logs 的詳細資訊，請參閱《Amazon [CloudWatch 使用者指南》中的 CloudWatch 代理程式組態檔案參考](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)。 *Amazon CloudWatch *

## 疑難排解 CloudWatch Logs 整合
<a name="AWSHowTo.cloudwatchlogs.troubleshoot"></a>

**試用 Amazon Q Developer CLI 進行 AI 輔助故障診斷**  
 Amazon Q Developer CLI 可協助您快速疑難排解環境問題。Q CLI 透過檢查環境狀態、檢閱事件、分析日誌和詢問釐清問題來提供解決方案。如需詳細資訊和詳細的逐步解說，請參閱 AWS 部落格中的[使用 Amazon Q Developer CLI 疑難排解 Elastic Beanstalk 環境](https://aws.amazon.com/blogs/devops/troubleshooting-elastic-beanstalk-environments-with-amazon-q-developer-cli/)。

**找不到環境執行個體日誌**  
如果您在 CloudWatch Logs 中找不到一些預期的環境執行個體日誌，請調查下列常見問題：
+ 您的 IAM 角色缺少所需的 IAM 權限。
+ 您在不支援 CloudWatch Logs AWS 區域 的 中啟動環境。
+ 其中一個自訂日誌檔不存在於您指定的路徑。

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

**由於 API 限流，日誌串流建立失敗**  
如果同時啟動大量執行個體的 Elastic Beanstalk 操作傳回類似 的訊息`Error: fail to create log stream: ThrottlingException: Rate exceeded`，則操作會對 CloudWatch API 發出太多並行呼叫。

若要解決限流問題，請採取下列其中一個動作：
+ 使用較小的批次大小搭配滾動部署，以減少並行更新。
+ 請求提高您 AWS 帳戶的 *CreateLogStream* 每秒交易 (TPS) 限制服務配額。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的 CloudWatch Logs 配額](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)和管理您的 CloudWatch Logs 服務配額。 [ CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html#service-quotas-manage) *Amazon CloudWatch *