

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

# Application Load Balancer 目標群組的運作狀態檢查
<a name="target-group-health-checks"></a>

Application Load Balancer 會定期將請求傳送到已註冊的目標來測試其狀態。這些測試稱為*運作狀況檢查*。

每個負載平衡器節點只會將請求路由至負載平衡器已啟用可用區域內運作狀態良好的目標。每個負載平衡器節點會使用各目標註冊所屬目標群組的運作狀態檢查設定，檢查該目標的運作狀態。目標註冊後，必須通過一次運作狀態檢查，才算運作狀態良好。每次運作狀態檢查完成後，負載平衡器節點即會關閉其為執行運作狀態檢查而建立的連線。

如果目標群組只包含運作狀態不佳的已註冊目標，負載平衡器會將請求路由至所有這些目標，而不論這些目標的運作狀態為何。這表示如果所有已啟用可用區域中的所有目標同時都未通過運作狀態檢查，則負載平衡器會故障開啟。故障開啟的結果是系統會根據負載平衡演算法，允許流量傳輸到所有已啟用可用區域中的所有目標，無論這些目標的運作狀態為何。

運作狀態檢查不支援 WebSocket。

如需詳細資訊，請參閱[目標群組運作狀態](load-balancer-target-groups.md#target-group-health)。

您可以使用運作狀態檢查日誌來擷取對負載平衡器已註冊目標執行的運作狀態檢查詳細資訊，並將其儲存為 Amazon S3 中的日誌檔案。您可以使用這些運作狀態檢查日誌來疑難排解目標的問題。如需詳細資訊，請參閱[運作狀態檢查日誌](load-balancer-health-check-logs.md)。

**Topics**
+ [運作狀態檢查設定](#health-check-settings)
+ [目標運作狀態](#target-health-states)
+ [運作狀態檢查原因代碼](#target-health-reason-codes)
+ [檢查目標運作狀態](check-target-health.md)
+ [更新運作狀態檢查設定](modify-health-check-settings.md)

## 運作狀態檢查設定
<a name="health-check-settings"></a>

您需要按下表中的描述為目標群組中的目標設定運作狀態檢查。表中使用的設定名稱是 API 中使用的名稱。負載平衡器會使用指定的連接埠、通訊協定和運作狀態檢查路徑，每隔 **HealthCheckIntervalSeconds** 秒將運作狀態檢查請求傳送至每個已註冊的目標。每個運作狀態檢查請求是各自獨立，且在整個間隔內持續保持此結果。目標回應所花的時間不影響下次運作狀態檢查請求的間隔。如果運作狀態檢查連續失敗超過 **UnhealthyThresholdCount** 次，負載平衡器會停用該目標。當運作狀態檢查連續成功超過 **HealthyThresholdCount** 次時，負載平衡器重新啟用該目標。

請注意，當您取消註冊目標時，這會減少 **HealthyHostCount**，但不會增加 **UnhealthyHostCount**。


| 設定 | Description | 
| --- | --- | 
| **HealthCheckProtocol** | 負載平衡器對目標執行運作狀態檢查時使用的通訊協定。對於 Application Load Balancer，可能的通訊協定為 HTTP 和 HTTPS。預設為 HTTP 通訊協定。<br />這些通訊協定會使用 HTTP GET 方法，來傳送運作狀態檢查請求。 | 
| **HealthCheckPort** | 負載平衡器對目標執行運作狀態檢查時使用的連接埠。預設為使用每個目標從負載平衡器接收流量的連接埠。 | 
| **HealthCheckPath** | 目標上運作狀態檢查的目的地。<br />*如果通訊協定版本是 HTTP/1.1 或 HTTP/2，請指定有效的 URI (/path*?*query*)。預設為 /.<br />如果通訊協定版本是 gRPC，則使用 `/package.service/method` 格式指定自訂運作狀態檢查方法的路徑。預設值為 `/AWS.ALB/healthcheck`。 | 
| **HealthCheckTimeoutSeconds** | 以秒為單位的時間量，若目標在此期間內毫無回應即表示運作狀態檢查失敗。範圍介於 2 到 120 秒之間。如果目標類型是 `instance` 或 `ip`，則預設為 5 秒，如果是 `lambda`，則預設為 30 秒。 | 
| **HealthCheckIntervalSeconds** | 個別目標每次執行運作狀態檢查的大約間隔時間量，以秒為單位。範圍介於 5–300 秒之間。如果目標類型是 `instance` 或 `ip`，則預設為 30 秒，如果是 `lambda`，則預設為 35 秒。 | 
| **HealthyThresholdCount** | 將運作狀態不佳的目標視為運作狀態良好之前，運作狀態檢查需連續成功的次數。範圍介於 2–10 之間。預設值為 5。 | 
| **UnhealthyThresholdCount** | 將目標視為運作狀態不佳之前，運作狀態檢查需連續失敗的次數。範圍介於 2–10 之間。預設為 2。 | 
| **Matcher** | 檢查是否收到來自目標的成功回應時所使用的代碼。這些在主控台中稱為**成功代碼**。<br />如果通訊協定版本是 HTTP/1.1 或 HTTP/2，則值範圍是 200 到 499。您可以指定多個值 (例如，"200,202") 或值範圍 (例如，"200-299")。預設值為 200。<br />如果通訊協定版本是 gRPC，則值範圍是 0 到 99。您可以指定多個值 (例如，"0,1") 或值範圍 (例如，"0-5")。預設值為 12。 | 

## 目標運作狀態
<a name="target-health-states"></a>

在負載平衡器向目標傳送運作狀態檢查請求之前，您必須向目標群組註冊該目標，由接聽程式規則中指定其目標群組，並確保負載平衡器已啟用該目標的可用區域。目標必須通過初次運作狀態檢查，才能從負載平衡器收到請求。在目標通過初次運作狀態檢查後，它的狀態是 `Healthy`。

下表說明已註冊目標的運作狀態可能的值。


| Value | Description | 
| --- | --- | 
| `initial` | 負載平衡器正在註冊目標或對目標執行初始運作狀態檢查。<br />相關原因代碼： `Elb.RegistrationInProgress` \| `Elb.InitialHealthChecking` | 
| `healthy` | 目標的運作狀態良好。<br />相關原因代碼：無 | 
| `unhealthy` | 目標未回應運作狀態檢查或未通過運作狀態檢查。<br />相關原因碼：`Target.ResponseCodeMismatch` \| `Target.Timeout` \| `Target.FailedHealthChecks` \| `Elb.InternalError` | 
| `unused` | 目標未向目標群組註冊、未在接聽程式規則中使用目標群組、目標位於未啟用的可用區域，或目標處於已停止或已終止狀態。<br />相關原因碼：`Target.NotRegistered` \| `Target.NotInUse` \| `Target.InvalidState` \| `Target.IpUnusable` | 
| `draining` | 目標正在取消註冊，連接耗盡作業進行中。<br />相關原因碼：`Target.DeregistrationInProgress` | 
| `unavailable` | 目標群組的運作狀態檢查已停用。<br />相關原因碼：`Target.HealthCheckDisabled` | 

## 運作狀態檢查原因代碼
<a name="target-health-reason-codes"></a>

如果目標的狀態是 `Healthy` 以外的任何值，API 將傳回問題的原因代碼和描述，而且主控台會顯示同樣的描述。開頭為 `Elb` 的原因代碼源自負載平衡器端，而開頭為 `Target` 的原因代碼源自目標端。如需運作狀態檢查失敗可能原因的詳細資訊，請參閱 [Troubleshooting](load-balancer-troubleshooting.md#target-not-inservice)。


| 原因代碼 | Description | 
| --- | --- | 
| `Elb.InitialHealthChecking` | 初始運作狀態檢查正進行中 | 
| `Elb.InternalError` | 運作狀態檢查由於內部錯誤而失敗 | 
| `Elb.RegistrationInProgress` | 目標註冊正進行中 | 
| `Target.DeregistrationInProgress` | 目標取消註冊正進行中 | 
| `Target.FailedHealthChecks` | 運作狀態檢查失敗 | 
| `Target.HealthCheckDisabled` | 運作狀態檢查已停用 | 
| `Target.InvalidState` | 目標處於停止狀態<br />目標處於終止狀態<br />目標處於終止或停止狀態<br />目標處於無效狀態 | 
| `Target.IpUnusable` | IP 地址不能做為目標，因為負載平衡器正在使用它 | 
| `Target.NotInUse` | 目標群組未設定為接收來自負載平衡器的流量<br />目標位於負載平衡器未啟用的可用區域 | 
| `Target.NotRegistered` | 目標未向目標群組註冊 | 
| `Target.ResponseCodeMismatch` | 運作狀態檢查失敗，顯示以下代碼：[*code*] | 
| `Target.Timeout` | 請求逾時 | 