

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

# Elastic Beanstalk 中的增強型運作狀態報告和監控
<a name="health-enhanced"></a>

本節說明 Elastic Beanstalk 增強型運作狀態功能的功能。

增強型運作狀態報告是一項功能，您可以在您的環境中啟用 ， AWS Elastic Beanstalk 以允許 收集您環境中資源的其他資訊。Elastic Beanstalk 會分析所收集到的資訊，以提供更全面的整體環境運作狀態，並協助辨識可能會導致應用程式無法運作的問題。

除了可變更運作狀態顏色的運作方式，增強型運作狀態更增加*狀態*描述項，當環境為黃色或紅色時，可提供所觀察之問題嚴重性的指標。若系統提供目前狀態的更多資訊，您可選擇 **Causes (成因)** 按鈕，於[運作狀態頁面](health-enhanced-console.md)檢視詳細的運作狀態資訊。

為了提供在您環境中所執行 Amazon EC2 執行個體的詳細運作狀態資訊，Elastic Beanstalk 在 Amazon Machine Image (AMI) 中包含了每個支援增強型運作狀態平台版本的[運作狀態代理程式](#health-enhanced-agent)。運作狀態代理程式會監控 Web 伺服器日誌和系統指標，並將其轉送至 Elastic Beanstalk 服務。Elastic Beanstalk 會分析這些指標以及來自 Elastic Load Balancing 和 Amazon EC2 Auto Scaling 的資料，以提供環境運作狀態的整體概況。

除了能夠收集並呈現您環境資源的相關資訊，Elastic Beanstalk 亦可針對環境中的資源監控其多種錯誤條件，給予通知協助您避免故障並解決組態問題。[影響環境運作狀態的因素](#health-enhanced-factors)包括應用程式每次處理請求的結果、執行個體作業系統的指標，以及最近的部署狀態。

您可使用 Elastic Beanstalk 主控台中的[環境概觀](health-enhanced-console.md)頁面或 [Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 中的 [eb health](health-enhanced-ebcli.md) 命令，即時檢視運作狀態。若要隨時間記錄並追蹤環境和執行個體運作狀態，環境可設定為將 Elastic Beanstalk 收集的增強型運作狀態報告相關資訊，發佈至 Amazon CloudWatch 做為自訂指標。CloudWatch 的自訂指標[費用](https://aws.amazon.com/cloudwatch/pricing/)適用所有指標，免費的 `EnvironmentHealth` 除外。

**Windows 平台備註**  
當您在 Windows Server 環境上啟用增強式運作狀態報告時，請不要變更 [IIS 記錄日誌組態](https://docs.microsoft.com/en-us/iis/manage/provisioning-and-managing-iis/configure-logging-in-iis)。若要讓增強式運作狀態監控正常運作，IIS 記錄日誌必須使用 **W3C** 格式和 **ETW event only (僅 ETW 事件)** 或 **Both log file and ETW event (日誌檔案與 ETW 事件)** 日誌事件目標進行設定。  
此外，請不要停用或停止任何您環境執行個體上的 [Elastic Beanstalk 運作狀態代理程式](#health-enhanced-agent) Windows 服務。若要收集和報告執行個體的增強式運作狀態資訊，此服務必須處於啟用及執行中的狀態。

第一次建立環境時，Elastic Beanstalk 會提示您建立所需的角色，並預設啟用增強型運作狀態報告。請繼續閱讀以了解增強型運作狀態報告的運作方式詳細資訊，或參閱 [啟用 Elastic Beanstalk 增強型運作狀態報告](health-enhanced-enable.md) 以立即開始使用。

**Topics**
+ [Elastic Beanstalk 運作狀態代理程式](#health-enhanced-agent)
+ [判斷執行個體和環境運作狀態的因素](#health-enhanced-factors)
+ [運作狀態檢查規則自訂](#health-enhanced.rules)
+ [增強型運作狀態角色](#health-enhanced-roles)
+ [增強的運作狀態授權](#health-enhanced-authz)
+ [增強型運作狀態事件](#health-enhanced-events)
+ [更新、部署和擴展期間的增強式運作狀態報告行為](#health-enhanced-effects)
+ [啟用 Elastic Beanstalk 增強型運作狀態報告](health-enhanced-enable.md)
+ [使用環境管理主控台來進行增強型健全狀態監控](health-enhanced-console.md)
+ [運作狀態顏色和狀態](health-enhanced-status.md)
+ [執行個體指標](health-enhanced-metrics.md)
+ [設定環境的增強型健康狀況規則](health-enhanced-rules.md)
+ [為環境發佈 Amazon CloudWatch 自訂指標](health-enhanced-cloudwatch.md)
+ [將增強型運作狀態報告與 Elastic Beanstalk API 搭配使用](health-enhanced-api.md)
+ [增強型運作狀態日誌格式](health-enhanced-serverlogs.md)
+ [通知與故障診斷](environments-health-enhanced-notifications.md)
+ [AI 驅動的環境分析](health-ai-analysis.md)

## Elastic Beanstalk 運作狀態代理程式
<a name="health-enhanced-agent"></a>

Elastic Beanstalk 運作狀態代理程式是一種精靈程序 (或在 Windows 環境上的服務)，該程序會在您環境中的每個 Amazon EC2 執行個體上執行，監控作業系統和應用程式層級的運作狀態指標，並向 Elastic Beanstalk 報告問題。自每個平台的版本 2.0 起，所有平台版本均隨附運作狀態代理程式。

運作狀態代理程式會報告類似於 Amazon EC2 Auto Scaling 和 Elastic Load Balancing [發佈至 CloudWatch](using-features.healthstatus.md#monitoring-basic-cloudwatch) 的指標，做為[基礎型運作狀態報告](using-features.healthstatus.md)的一部分，其中包括 CPU 負載、HTTP 代碼和延遲。然而，運作狀態代理程式直接向 Elastic Beanstalk 報告的精細度和頻率，高於基礎型運作狀態報告。

基礎型運作狀態每 5 分鐘會發佈一次這些指標，並可於環境管理主控台以圖表監控。透過增強型運作狀態，Elastic Beanstalk 運作狀態代理程式每 10 秒會向 Elastic Beanstalk 報告指標。Elastic Beanstalk 會使用運作狀態代理程式提供的指標，判斷環境中各個執行個體的運作狀態，同時結合其他[因素](#health-enhanced-factors)，判定環境的整體運作狀態。

環境的整體運作狀態可在 Elastic Beanstalk 主控台的環境概觀頁面中即時檢視，Elastic Beanstalk 也會每 60 秒將其發佈至 CloudWatch。您可以在 [EB CLI](eb-cli3.md) 中使用 [**eb health**](health-enhanced-ebcli.md) 命令，即時檢視運作狀態代理程式報告的詳細指標。

若支付額外費用，您也可以選擇每 60 秒將個別執行個體和環境層級指標發佈至 CloudWatch。發佈至 CloudWatch 的指標之後可用來在[環境管理主控台](environments-console.md)中建立[監控圖表](environment-health-console.md#environment-health-console-customize)。

增強型運作狀態報告只在您選擇將增強型運作狀態指標發佈至 CloudWatch 時，才會產生費用。當您使用增強型運作狀態時，即使您選擇不要發佈增強型運作狀態指標，仍可免費發佈基礎型運作狀態指標。

如需運作狀態代理程式報告指標的詳細資訊，請參閱 [執行個體指標](health-enhanced-metrics.md)。如需將增強型運作狀態指標發佈至 CloudWatch 的詳細資訊，請參閱[為環境發佈 Amazon CloudWatch 自訂指標](health-enhanced-cloudwatch.md)。

## 判斷執行個體和環境運作狀態的因素
<a name="health-enhanced-factors"></a>

除了基本運作狀態報告系統檢查之外 (包含 [Elastic Load Balancing 運作狀態檢查](using-features.healthstatus.md#using-features.healthstatus.understanding) 和[資源監控](using-features.healthstatus.md#monitoring-basic-additionalchecks))，Elastic Beanstalk 增強型運作狀態報告還會收集您環境中執行個體狀態的其他資料。這包含作業系統指標、伺服器日誌及正在進行的環境操作狀態 (例如部署和更新)。Elastic Beanstalk 運作狀態報告服務會結合所有可用來源的資訊，並加以分析以判斷環境的整體運作狀態。



### 操作和命令
<a name="health-enhanced-factors-operations"></a>

當您在環境上執行操作時 (例如部署新的應用程式版本)，Elastic Beanstalk 會進行幾項影響您環境運作狀態的變更。

例如，當您將新的應用程式版本部署至執行多個執行個體的環境時，您可能會在[使用 EB CLI](health-enhanced-ebcli.md) 監控環境的運作狀態時，看到與以下內容相似的訊息。

```
  id             status     cause
    Overall      Info       Command is executing on 3 out of 5 instances
  i-bb65c145     Pending    91 % of CPU is in use. 24 % in I/O wait
                            Performing application deployment (running for 31 seconds)
  i-ba65c144     Pending    Performing initialization (running for 12 seconds)
  i-f6a2d525     Ok         Application deployment completed 23 seconds ago and took 26 seconds
  i-e8a2d53b     Pending    94 % of CPU is in use. 52 % in I/O wait
                            Performing application deployment (running for 33 seconds)
  i-e81cca40     Ok
```

在此範例中，環境整體狀態為 `Ok`，而成因是 *Command is executing on 3 out of 5 instances (5 個執行個體中，命令正於其中 3 個上執行)*。環境的三個執行個體狀態為 *Pending (待定)*，表示操作正在進行。

操作完成後，Elastic Beanstalk 會報告操作的其他資訊。例如，Elastic Beanstalk 會顯示下列有關執行個體已更新應用程式版本的資訊：

```
i-f6a2d525     Ok         Application deployment completed 23 seconds ago and took 26 seconds
```

執行個體運作狀態資訊亦包含環境中每個執行個體最近部署的詳細資訊。各個執行個體都會報告部署 ID 和狀態。部署 ID 為整數，每次部署新的應用程式版本或變更執行個體上組態選項的設定 (如環境變數) 時，此整數會加一。[滾動部署](using-features.rolling-version-deploy.md)失敗後，您可使用部署資訊來辨識執行錯誤應用程式版本的執行個體。

在原因欄中，Elastic Beanstalk 包含的參考訊息包括成功操作及多次運作狀態檢查的其他正常運作狀態資訊，但這些項目無法永久保存。環境運作狀態不良的成因會加以保存，直到環境回傳良好運作狀態。

### 命令逾時
<a name="health-enhanced-factors-timeout"></a>

Elastic Beanstalk 在操作開始時會套用命令逾時，讓執行個體轉換為良好運作狀態。您可於環境更新及部署組態 ([aws:elasticbeanstalk:command](command-options-general.md#command-options-general-elasticbeanstalkcommand) 命名空間中) 設定此命令逾時，預設為 10 分鐘。

在滾動更新期間，Elastic Beanstalk 會在操作的各個批次套用不同的逾時。您可於環境的滾動更新組態 ([aws:autoscaling:updatepolicy:rollingupdate](command-options-general.md#command-options-general-autoscalingupdatepolicyrollingupdate) 命名空間中) 設定此逾時。若批次中的所有執行個體在滾動更新逾時內都維持良好運作狀態，操作會繼續進行下一批次。否則，操作會失敗。

**注意**  
若您的應用程式並未通過運作狀態檢查 (即未處於**良好 (OK)** 狀態)，但以另一層級而言仍屬穩定，您可以設定 [`HealthCheckSuccessThreshold`](command-options-general.md#command-options-general-elasticbeanstalkcommand) 中的 `aws:elasticbeanstalk:command namespace` 選項，來變更 Elastic Beanstalk 將執行個體視為運作狀態良好的層級。

欲讓 Web 伺服器環境視為良好運作狀態，環境或批次中每個執行個體都必須在 2 分鐘內連續通過 12 個運作狀態檢查。針對工作者層環境，每個執行個體都必須通過 18 項運作狀態檢查。在命令逾時前，Elastic Beanstalk 不會在運作狀態檢查失敗時降低環境的運作狀態。若環境中的執行個體在命令逾時內恢復良好運作狀態，操作即為成功。

### HTTP 請求
<a name="health-enhanced-factors-requests"></a>

環境未進行操作時，執行個體和環境運作狀態的主要資訊來源為各個執行個體的 Web 伺服器日誌。為了判斷執行個體和環境整體的運作狀態，Elastic Beanstalk 會考量請求數目、每次請求結果，以及每次請求的解決速度。

在 Linux 類型的平台上，Elastic Beanstalk 會讀取並剖析 Web 伺服器日誌來取得 HTTP 請求的資訊。在 Windows Server 平台上，Elastic Beanstalk 會[直接從 IIS Web 伺服器](health-enhanced-metrics-server-iis.md)接收此資訊。

您的環境可能沒有作用中的 web 伺服器。例如，多容器 Docker 平台便不包含 web 伺服器。其他平台則會包含 web 伺服器，但您的應用程式可能會停用它。在這些情況下，您的環境便需要額外的組態，才能以其轉送資訊至 Elastic Beanstalk 服務時所需要的格式，提供 [Elastic Beanstalk 運作狀態代理程式](#health-enhanced-agent)日誌。如需詳細資訊，請參閱「[增強型運作狀態日誌格式](health-enhanced-serverlogs.md)」。

### 作業系統指標
<a name="health-enhanced-factors-healthcheck"></a>

Elastic Beanstalk 會監控運作狀態代理程式報告的作業系統指標，以辨識系統資源始終不足的執行個體。

如需運作狀態代理程式報告指標的詳細資訊，請參閱 [執行個體指標](health-enhanced-metrics.md)。

## 運作狀態檢查規則自訂
<a name="health-enhanced.rules"></a>

Elastic Beanstalk 增強型運作狀態報告倚賴一組規則，以確定您環境的運作狀態。這些的部分規則可能不適用於您的特定應用程式。常用案例是一種應用程式，其會傳回設計上經常性 HTTP 4xx 錯誤。Elastic Beanstalk 使用其中一個預設規則，獲得出現差錯的結論，然後將您環境的運作狀態從正常變更為警告、降級或嚴重，視錯誤率而定。若要正確處理這種情況下，Elastic Beanstalk 可讓您設定此規則，並忽略應用程式 HTTP 4xx 錯誤。如需詳細資訊，請參閱[設定環境的增強型健康狀況規則](health-enhanced-rules.md)。

## 增強型運作狀態角色
<a name="health-enhanced-roles"></a>

增強型運作狀態報告需要兩個角色：Elastic Beanstalk 的服務角色和環境的執行個體描述檔。服務角色可讓 Elastic Beanstalk 代表您與其他 AWS 服務互動，以收集您環境中資源的相關資訊。執行個體描述檔可讓您環境中的執行個體將日誌檔案寫入 Amazon S3，並將增強的運作狀態資訊傳送至 Elastic Beanstalk 服務。

當您使用 Elastic Beanstalk 主控台或 EB CLI 建立 Elastic Beanstalk 環境時，Elastic Beanstalk 會建立預設服務角色，並將必要的受管理政策附加至您環境的預設執行個體描述檔。

如果您使用 API、 SDK 或 AWS CLI 來建立環境，則必須事先建立這些角色，並在環境建立期間指定這些角色，以使用增強型運作狀態。如需為您環境建立適當角色的說明，請參閱[Elastic Beanstalk Service 角色、執行個體描述檔和使用者政策](concepts-roles.md)。

建議您針對執行個體描述檔和服務角色使用*受管理政策*。受管政策是 Elastic Beanstalk 維護的 AWS Identity and Access Management (IAM) 政策。使用受管理政策可確保您的環境擁有正常運作所需的所有許可。

對於執行個體描述檔，您可以分別針對 [Web 伺服器層](concepts-webserver.md)或[工作者階層](concepts-worker.md)環境使用 `AWSElasticBeanstalkWebTier` 或 `AWSElasticBeanstalkWorkerTier` 受管理的策略。如需這兩個受管理執行個體描述檔政策的詳細資訊，請參閱 [管理 Elastic Beanstalk 執行個體描述檔](iam-instanceprofile.md)。

## 增強的運作狀態授權
<a name="health-enhanced-authz"></a>

Elastic Beanstalk 執行個體描述檔受管的政策包含 `elasticbeanstalk:PutInstanceStatistics` 動作的許可。此動作不屬於 Elastic Beanstalk API 的一部分。環境執行個體在內部使用的是不同 API 的一部分，會將增強的運作狀態資訊傳達給 Elastic Beanstalk 服務。您不會直接呼叫這個 API。

建立新環境時，授權 `elasticbeanstalk:PutInstanceStatistics` 動作預設為啟用。若要增加環境的安全性，並協助防止運作狀態資料假冒您的身分進行詐騙，建議您讓此動作的授權保持啟用狀態。如果您為執行個體描述檔使用受管政策，這項功能可供您新環境使用，無需任何進一步設定。如果您使用*自訂執行個體描述檔*而非*受管政策*，您的環境可能顯示**無資料**運作狀態。發生這種情況是因為執行個體未經授權，無法將增強型運作狀態資料傳送至服務。

若要授權此動作，請在您的執行個體描述檔中包含下列陳述式。

```
    {
      "Sid": "ElasticBeanstalkHealthAccess",
      "Action": [
        "elasticbeanstalk:PutInstanceStatistics"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticbeanstalk:*:*:application/*",
        "arn:aws:elasticbeanstalk:*:*:environment/*"
      ]
    }
```

如果您目前不想使用增強型運作狀態授權，請將 [aws:elasticbeanstalk:healthreporting:system](command-options-general.md#command-options-general-elasticbeanstalkhealthreporting) 命名空間的 `EnhancedHealthAuthEnabled` 選項設定為 `false`，加以停用。如果停用此選項，就不需要先前說明的許可。您可以為您應用程式和環境的[最低權限存取](security-best-practices.md#security-best-practices.preventive.least-priv)，從執行個體描述檔中移除這些許可。

**注意**  
之前 `EnhancedHealthAuthEnabled` 預設設定為 `false`，導致 `elasticbeanstalk:PutInstanceStatistics` 動作的授權也預設為停用。若要為現有環境啟用此動作，請將 [aws:elasticbeanstalk:healthreporting:system](command-options-general.md#command-options-general-elasticbeanstalkhealthreporting) 命名空間的 `EnhancedHealthAuthEnabled` 選項設定為 `true`。您可以使用[組態檔案](ebextensions.md)中的[選項設定](ebextensions-optionsettings.md)來設定此選項。

## 增強型運作狀態事件
<a name="health-enhanced-events"></a>

環境轉換狀態時，增強型運作狀態系統會產生事件。以下範例顯示了在**資訊 (Info)**、**良好 (OK)** 及**嚴重 (Severe)** 狀態間轉換的環境事件輸出。

![Elastic Beanstalk 主控台的 Elastic Beanstalk 環境概觀頁面，其中顯示增強的運作狀態最近事件](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/enhanced-health-events.png)


當轉換成較嚴重的狀態時，增強式運作狀態事件會包含指出轉換原因的訊息。

並非所有執行個體層級的變更都會使 Elastic Beanstalk 發出事件。為了避免錯誤的警示，Elastic Beanstalk 只會在問題持續出現在多次檢查中時產生運作狀態相關的事件。

環境層級的即時運作狀態資訊 (包括狀態、顏色和原因) 都可在 Elastic Beanstalk 主控台的[環境概觀](environments-dashboard.md)頁面和 [EB CLI](eb-cli3.md) 取得。透過將 EB CLI 連接至您的環境並執行 [**eb health**](health-enhanced-ebcli.md) 命令，您也可以檢視環境中各個執行個體的即時狀態。

## 更新、部署和擴展期間的增強式運作狀態報告行為
<a name="health-enhanced-effects"></a>

啟用增強型運作狀態報告會影響您的環境在組態更新和部署期間的行為。Elastic Beanstalk 在直到所有執行個體皆一致通過運作狀態檢查之前，都不會完成更新批次。此外，因為增強式運作狀態報告會套用運作狀態的更高標準並監控更多因素，通過基本運作狀態報告 [ELB 運作狀態檢查](using-features.healthstatus.md#using-features.healthstatus.understanding)的執行個體，不一定會同時通過增強式運作狀態報告。如需運作狀態檢查如何影響更新程序的詳細資訊，請參閱[滾動組態更新](using-features.rollingupdates.md)和[滾動部署](using-features.rolling-version-deploy.md)的主題。

增強型運作狀態報告亦可強調 Elastic Load Balancing 須設定適當的[運作狀態檢查 URL](environments-cfg-clb.md#using-features.managing.elb.healthchecks) 之需求。當您的環境為滿足需求而擴展，新的執行個體一通過 ELB 運作狀態檢查就會開始處理請求。若未設定運作狀態檢查 URL，執行個體接受 TCP 連線後 20 秒即可開始。

在負載平衡器宣告環境運作狀態良好前，若您的應用程式尚未完成啟動以接收流量，將出現大量失敗的請求，而您環境的運作狀態檢查會開始失敗。命中由您應用程式所提供路徑的運作狀態檢查 URL 可避免此問題。在直到向運作狀態檢查 URL 發出的 GET 請求傳回 200 狀態代碼前，ELB 運作狀態檢查都不會通過。