

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

# Amazon OpenSearch Service 疑難排解
<a name="handling-errors"></a>

本主題說明如何辨識和解決常見的 Amazon OpenSearch Service​ 問題。聯絡 [AWS 支援](https://aws.amazon.com/premiumsupport/)之前，先參閱本節資訊。

## 無法存取 OpenSearch Dashboards
<a name="troubleshooting-dashboards-configure-anonymous-access"></a>

OpenSearch Dashboards 端點不支援已簽署的請求。如果網域的存取控制政策只對特定 IAM 角色授予存取權，而且您尚未設定 [Amazon Cognito 身分驗證](cognito-auth.md)，當您嘗試存取 Dashboards 時可能會收到以下錯誤：

```
"User: anonymous is not authorized to perform: es:ESHttpGet"
```

如果您的 OpenSearch Service 網域使用 VPC 存取，您可能不會收到此錯誤，但請求可能逾時。如要進一步了解有關修正此問題和各種可用組態選項的詳細資訊，請參閱[控制對 Dashboards 的存取](dashboards.md#dashboards-access)、[關於 VPC 網域上的存取政策](vpc.md#vpc-security)以及 [Amazon OpenSearch Service 中的 Identity and Access Management](ac.md)。

## 無法存取 VPC 網域
<a name="troubleshooting-vpc-domain"></a>

請參閱 [關於 VPC 網域上的存取政策](vpc.md#vpc-security) 和 [測試 VPC 網域](vpc.md#vpc-test)。

## 叢集處於唯讀狀態
<a name="troubleshooting-read-only-cluster"></a>

與較早的 Elasticsearch 版本相比，OpenSearch 和彈性搜索 7.*x* 使用不同的系統進行叢集協調。在這個新系統中，當叢集遺失仲裁，在您採取動作之前，叢集將無法使用。遺失仲裁有兩種形式：
+ 如果您的叢集使用專用主節點，當一半或更多個節點無法使用時，會發生仲裁遺失。
+ 如果您的叢集使用專用主節點，當一半或更多個資料節點無法使用時，會發生仲裁遺失。

如果發生仲裁遺失，而且您的叢集有多個節點，則 OpenSearch Service 會還原仲裁並將叢集置於唯讀狀態。您有兩種選擇：
+ 移除唯讀狀態，並依原狀使用叢集。
+ [從快照還原叢集或個別索引](managedomains-snapshot-restore.md)。

如果您偏好依原樣使用叢集，請使用下列請求來驗證叢集運作狀態為綠色：

```
GET _cat/health?v
```

如果叢集運作狀態為紅色，建議從快照還原叢集。您也可以參閱 [紅色叢集狀態](#handling-errors-red-cluster-status) 以取得疑難排解步驟。如果叢集運作狀態為綠色，請使用下列請求來檢查所有預期索引是否存在：

```
GET _cat/indices?v
```

然後執行一些搜尋來驗證預期的資料存在。如果存在，您可以使用下列請求來移除唯讀狀態：

```
PUT _cluster/settings
{
  "persistent": {
    "cluster.blocks.read_only": false
  }
}
```

如果發生仲裁遺失，而且您的叢集只有一個節點，則 OpenSearch Service 會取代節點，並且*不會*使叢集進入唯讀狀態。否則，您的選項會是相同的：依原樣使用叢集或從快照還原。

在這兩種情況下，OpenSearch Service 都會傳送兩個事件到您的 [Health 儀板表](https://phd.aws.amazon.com/phd/home#/)。第一個會通知您遺失仲裁。第二個會在 OpenSearch Service 成功還原仲裁後發生。如需使用 的詳細資訊 Health 儀板表，請參閱[AWS Health 《 使用者指南》](https://docs.aws.amazon.com/health/latest/ug/)。

## 紅色叢集狀態
<a name="handling-errors-red-cluster-status"></a>

紅色叢集狀態表示至少有一個主要碎片及其複本不會分配到節點。OpenSearch Service 會一直嘗試拍攝所有索引的自動快照，不論其狀態為何，但在紅色叢集狀態存在時，快照會失敗。

紅色叢集狀態的最常見原因是[叢集節點失敗](#handling-errors-failed-cluster-nodes)，而 OpenSearch 程序會因為持續的繁重處理負載而造成當機。

**注意**  
無論叢集狀態為何，OpenSearch Service 都會將自動快照存放 14 天。因此，如果紅色叢集狀態持續超過兩週，將會刪除最後一個狀況良好的自動快照，而您可能永遠遺失叢集資料。如果您的 OpenSearch Service 網域進入紅色叢集狀態， 支援 可能會與您聯絡，詢問您是否要自行解決問題，還是希望支援團隊提供協助。您可以[設定 CloudWatch 警示](cloudwatch-alarms.md)，以便在發生紅色叢集狀態時通知您。

最後，紅色碎片會導致紅色叢集，而紅色索引會造成紅色碎片。OpenSearch 有一些實用的 API，用來識別造成紅色叢集狀態的索引。
+ `GET /_cluster/allocation/explain` 選擇第一個發現的未指派碎片，並說明為何無法將它分配到節點：

  ```
  {
      "index": "test4",
      "shard": 0,
      "primary": true,
      "current_state": "unassigned",
      "can_allocate": "no",
      "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes"
  }
  ```
+ `GET /_cat/indices?v` 顯示每個索引的良好運作狀態、文件數量和磁碟使用方式：

  ```
  health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
  green  open   test1            30h1EiMvS5uAFr2t5CEVoQ   5   0        820            0       14mb           14mb
  green  open   test2            sdIxs_WDT56afFGu5KPbFQ   1   0          0            0       233b           233b
  green  open   test3            GGRZp_TBRZuSaZpAGk2pmw   1   1          2            0     14.7kb          7.3kb
  red    open   test4            BJxfAErbTtu5HBjIXJV_7A   1   0
  green  open   test5            _8C6MIXOSxCqVYicH3jsEA   1   0          7            0     24.3kb         24.3kb
  ```

刪除紅色索引能以最快速度修正紅色叢集狀態。根據紅色叢集狀態的原因不同，您可能會擴展 OpenSearch Service 網域以使用較大的執行個體類型、更多執行個體或更多 EBS 型儲存，並嘗試重新建立有問題的索引。

若無法刪除有問題的索引，您可以[還原快照](managedomains-snapshot-restore.md)、從索引刪除文件、變更索引設定、減少複本數量，或刪除其他索引以釋出更多可用磁碟空間。重要步驟是在重新設定 OpenSearch Service 網域*之前*先解決紅色叢集狀態問題。重新設定具紅色叢集狀態的網域可能使問題複雜化，進而導致網域停滯在 **Processing (處理中)** 的設定狀態，直到您解決狀態問題為止。

### 紅色叢集的自動修復
<a name="handling-errors-red-cluster-status-auto-recovery"></a>

如果叢集的狀態一直為紅色且持續超過一小時，OpenSearch Service 會嘗試藉由重新路由未分配的碎片或從過去的快照中復原來自動修復該問題。

如果無法修復一個或多個紅色索引，且叢集狀態保持紅色總共 14 天，則僅在叢集滿足*至少一個*以下準則時，OpenSearch Service 才會採取進一步的動作：
+ 只有一個可用區域
+ 沒有專用主節點
+ 包含爆量執行個體類型 (T2 或 T3)

此時，如果您的叢集滿足這些條件之一，OpenSearch Service 會在接下來的 7 天每天向您發送[通知](managedomains-notifications.md)，說明如果您不修復這些索引，則將會刪除所有未指派的碎片。如果您的叢集狀態在 21 天後仍為紅色，則 OpenSearch Service 會刪除所有紅色索引上的未指派碎片 (儲存和運算)。您會在 OpenSearch Service 主控台的 **Notifications** (通知) 面板中收到每個這些事件的通知。如需詳細資訊，請參閱[叢集運作狀態事件](monitoring-events.md#monitoring-events-cluster-health)。

### 從持續繁重的處理負載中復原
<a name="handling-errors-red-cluster-status-heavy-processing-load"></a>

若要判斷紅色叢集狀態是否是資料節點上的持續繁重處理負載所造成，可監控以下叢集指標。


| 相關指標 | Description | 復原 | 
| --- | --- | --- | 
| JVMMemoryPressure |  指定用於叢集中所有資料節點的 Java heap 的百分比。檢視此指標的**最大**統計資料來獲知這項指標，並且檢視當 Java 垃圾回收器無法回收足夠記憶體，進而造成記憶體越來越小的壓力。此模式可能是因為複雜的查詢或大型資料欄位所造成。 x86 執行個體類型使用 Conconnect Mark Sweep (CMS) 廢棄項目收集器，與應用程式執行緒一起執行，將暫停可能情況降到短暫。如果 CMS 在一般收集期間無法回收足夠的記憶體，會觸發完整的廢棄項目收集，導致長時間應用程式暫停和影響叢集穩定性。 ARM 型 Graviton 執行個體類型使用 Garbage-First (G1) 廢棄項目收集器，它類似於 CMS，但使用額外的短暫暫停和堆積磁碟重組，進一步減少對完整廢棄項目收集的需求。 在任何一種情況下，如果記憶體使用量持續增長，超出廢棄項目收集器在完整廢棄項目收集期間的回收量，OpenSearch 會因記憶體不足錯誤而損毀。在所有執行個體類型上，最好的經驗法則是將使用量保持低於 80%。 `_nodes/stats/jvm`API 提供有用的 JVM 統計資料摘要、記憶體集區使用量，以及垃圾回收資訊： <pre>GET domain-endpoint/_nodes/stats/jvm?pretty</pre>  |  設定 JVM 的記憶體斷路器。如需詳細資訊，請參閱[JVM OutOfMemoryError](#handling-errors-jvm_out_of_memory_error)。 如果問題仍存在，請刪除不需要的索引、減少對網域的請求數或複雜度、新增執行個體，或使用較大的執行個體類型。  | 
| CPUUtilization | 指定用於叢集中的資料節點的 CPU 資源百分比。檢視此指標的最大統計資料，尋找持續的高用量模式。 | 新增資料節點，或增加現有資料節點之執行個體類型的大小。 | 
| 節點 | 指定叢集中的節點數。檢視此指標的最小統計資料。當服務為叢集部署新的執行個體時，這個值會有所變動。 | 新增資料節點。 | 

## 黃色叢集狀態
<a name="handling-errors-yellow-cluster-status"></a>

黃色叢集狀態表示已將所有索引的主要碎片分配給叢集中的節點，但至少有一個索引的複本碎片未獲分配。單一節點叢集在初始化時一定會呈現黃色叢集狀態，因為這時沒有其他節點可供 OpenSearch Service 指派複本。為了達到綠色叢集狀態，請增加節點數。如需詳細資訊，請參閱[調整 Amazon OpenSearch Service 網域的大小](sizing-domains.md)。

建立新索引或發送節點故障後，多節點叢集可能會短暫呈現黃色叢集狀態。當 OpenSearch 在整個叢集中複寫資料時，此狀態會自我解析。[磁碟空間不足](#handling-errors-watermark)也可能導致黃色叢集狀態；如果節點擁有容納它們的磁盤空間，叢集只能分配複本分片。

## ClusterBlockException
<a name="troubleshooting-cluster-block"></a>

您可能會接收到 `ClusterBlockException` 錯誤，原因如下。

### 缺少可用儲存空間
<a name="handling-errors-watermark"></a>

如果叢集中的一或多個節點的儲存空間小於 1) 20% 的可用儲存空間，或 2) 20 GiB 的儲存空間，則新增文件和建立索引等基本寫入操作可能會開始失敗。 [計算儲存需求](bp-storage.md)會提供 OpenSearch Service 如何使用磁碟空間的摘要。

為了避免問題，請在 OpenSearch Service 主控台中監控 `FreeStorageSpace` 指標，並[建立 CloudWatch 警示](cloudwatch-alarms.md)以便在 `FreeStorageSpace` 下降到特定閾值時觸發。`GET /_cat/allocation?v` 也提供有用的碎片分配和磁碟用量的摘要。若要解決缺乏儲存空間的相關問題，可擴展 OpenSearch Service 網域以使用較大的執行個體類型、更多執行個體或更多 EBS 型儲存體。

### 高 JVM 記憶體壓力
<a name="handling-errors-block-disks"></a>

當 **JVMMemoryPressure** 指標超過 30 分鐘的 92% 時，OpenSearch Service 會觸發保護機制，封鎖所有寫入操作，以預防叢集達到紅色狀態。若保護已啟動，則當寫入操作失敗且出現 `ClusterBlockException` 錯誤時，新的索引將無法建立，並會擲出 `IndexCreateBlockException` 錯誤。

當 ** JVMMemoryPressure ** 指標傳回 88% 或更低達五分鐘之久，會關閉保護機制，並取消封鎖叢集的寫入操作。

高 JVM 記憶體壓力可能是因為叢集的請求數量猛增、節點之間的碎片配置不均衡、叢集中的碎片太多、欄位資料或索引映射激增，或無法處理傳入負載的執行個體類型所致。它也可能是由於在查詢中使用彙總、萬用字元或寬泛的時間範圍造成的。

若要減少叢集的流量並解決高 JVM 記憶體壓力問題，請嘗試執行下列其中一個或多個動作：
+ 擴展網域，使每個節點的堆積大小上限為 32 GB。
+ 透過刪除舊的或未使用的索引來減少碎片數量。
+ 使用 `POST index-name/_cache/clear?fielddata=true` API 操作清除資料快取。請注意，清除快取可能會中斷進行中的查詢。

一般而言，為了避免將來出現高 JVM 記憶體壓力，請遵循下列最佳實務：
+ 避免彙總文字欄位，或將您的索引的[映射類型](https://opensearch.org/docs/latest/opensearch/mappings/#dynamic-mapping)變更為 `keyword`。
+ 透過[選擇正確的碎片數量](bp-sharding.md)來優化搜尋和索引請求。
+ 設定索引狀態管理 (ISM) 政策以定期[移除未使用的索引](bp.md#bp-stability-remove)。

## 使用待命遷移至異地同步備份時發生錯誤
<a name="troubleshooting-multi-az-standby"></a>

當您將現有網域遷移至具有待命的異地同步備份時，可能會發生下列問題。

### 從沒有待命的網域遷移到有待命的網域期間建立索引、索引範本或 ISM 政策
<a name="index"></a>

如果您在使用待命從異地同步備份遷移網域至異地同步備份時建立索引，且索引範本或 ISM 政策未遵循建議的資料複製準則，這可能會導致資料不一致，且遷移可能會失敗。若要避免這種情況，請使用資料複製計數 （包括主節點和複本） 為三的倍數建立新的索引。您可以使用 `DescribeDomainChangeProgress` API 檢查遷移進度。如果您遇到複本計數錯誤，請修正錯誤，然後聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/) 重試遷移。

### 不正確的資料副本數量
<a name="data-copy"></a>

如果您的網域中沒有正確數量的資料副本，遷移到具有待命的異地同步備份將會失敗。

## JVM OutOfMemoryError
<a name="handling-errors-jvm_out_of_memory_error"></a>

JVM `OutOfMemoryError` 通常表示達到以下其中一個 JVM 斷路器。


| 斷路器 | Description | 叢集設定屬性 | 
| --- | --- | --- | 
| 上層中斷器 | 可用於所有斷路器的 JVM 堆積記憶體總百分比。預設值為 95%。 | indices.breaker.total.limit | 
| 欄位資料中斷器 | 可讓 JVM 堆積記憶體將單一資料欄位載入到記憶體的百分比。預設值為 40%。如果您上傳具大型欄位的資料，您可能需要提高此限制。 | indices.breaker.fielddata.limit | 
| 請求中斷器 | 允許資料結構用於回應的服務請求的 JVM 堆積記憶體百分比。預設值為 60%。如果您的服務請求涉及計算彙總，您可能需要提高此限制。 | indices.breaker.request.limit | 

## 叢集節點失敗
<a name="handling-errors-failed-cluster-nodes"></a>

Amazon EC2 執行個體可能遇到意外終止和重新啟動。一般來說，OpenSearch Service 會為您重新啟動節點。不過，OpenSearch 叢集中的一個或多個節點可能依然處於失敗狀況。

若要查看此情況，請在 OpenSearch Service 主控台上開啟您的網域儀表板。前往 **Cluster health** (叢集運作狀態) 標籤，然後找到 **Total nodes** (總節點) 指標。查看回報節點數是否少於您為叢集設定的數量。如果指標顯示一個或多個節點未運作一天以上，請聯絡 [AWS 支援](https://aws.amazon.com/premiumsupport/)。

您也可以[設定 CloudWatch 警示](cloudwatch-alarms.md)，以便在發生此問題時收到通知。

**注意**  
叢集組態變更以及服務的例行維護期間，**總節點**指標不準確。此行為在預期當中。該指標很快就會報告正確的叢集節點數量。如需詳細資訊，請參閱 [在 Amazon OpenSearch Service 中進行組態變更](managedomains-configuration-changes.md)。

為了預防您的叢集發生意外的節點終止和重新啟動情況，在 OpenSearch Service 網域中為每個索引至少建立一個複本。

## 超出最大碎片限制
<a name="troubleshooting-shard-limit"></a>

OpenSearch 以及 7.*x* 版本的 Elasticsearch 具有的預設設定為每個節點不超過 1,000 個碎片。如果請求 (例如建立新索引) 會導致您超出此限制，則 OpenSearch/Elasticearch 會擲出錯誤。如果您遇到此錯誤，您有幾個選項：
+ 將更多資料節點新增至叢集。
+ 增加 `_cluster/settings/cluster.max_shards_per_node` 設定。
+ 使用 [\$1shrink API](supported-operations.md#version_api_notes-shrink) 來減少節點上的碎片數目。

## 網域卡在處理狀態
<a name="stuck-in-processing"></a>

當您的 OpenSearch Service 網域在進行[組態變更](managedomains-configuration-changes.md)時，將會進入「處理中」狀態。當您啟動組態變更時，網域狀態會變更成「處理中」，而 OpenSearch Service 會建立一個新環境。在新的環境中，OpenSearch Service 將啟動一組新的適用節點 (如資料、主要節點或 UltraWarm)。遷移完成後，舊節點將會終止。

如果發生下列其中一種情況，叢集可能會卡在「處理中」狀態：
+ 一組新的資料節點無法啟動。
+ 將碎片遷移至新的資料節點集不成功。
+ 驗證檢查失敗並顯示錯誤。

如需有關上述每種情況下的詳細解決方案步驟，請參閱[為什麼我的 Amazon OpenSearch Service 網域卡在「處理中」狀態？](https://aws.amazon.com/premiumsupport/knowledge-center/opensearch-domain-stuck-processing/)。

## 低 EBS 爆量餘額
<a name="handling-errors-low-ebs-burst"></a>

當您其中一個一般用途 (SSD) 磁碟區上的 EBS 爆量餘額低於 70% 時，OpenSearch Service 會向您傳送主控台通知；如果餘額低於 20%，則會傳送後續通知。若要解決此問題，您可以縱向擴展叢集，或減少讀取和寫入 IOPS，以便記入爆量餘額。對於具有 gp3 磁碟區類型的網域，以及具有磁碟區大小高於 1000 GiB 之 gp2 磁碟區的網域，爆量餘額會保持在 0。如需詳細資訊，請參閱[一般用途 SSD 磁碟區 (gp2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html#EBSVolumeTypes_gp2)。您可以使用 `BurstBalance` CloudWatch 指標監控 EBS 爆量餘額。

## 在磁碟區調整大小期間增加 EBS 指標
<a name="troubleshooting-ebs-volume-update-spikes"></a>

修改 Amazon Elastic Block Store 磁碟區大小時，您可能會發現各種 EBS 指標暫時增加，例如 `Write Throughput`、`Write Throughput Micro bursting`、 `Disk Queue Depth`和 `IOPS`。這是調整大小操作期間的預期行為，通常持續幾秒鐘。不過，持續時間可能會根據修改的磁碟區大小而有所不同。

為了避免延遲問題和請求拒絕，只有在叢集運作狀態良好且網路流量低時，才能執行 EBS 磁碟區調整大小。

## 無法啟用稽核日誌
<a name="troubleshooting-audit-logs-error"></a>

當您嘗試使用 OpenSearch Service 主控台啟用稽核日誌發佈時，可能會遇到下列錯誤：

為 CloudWatch Logs 日誌群組指定的資源存取政策沒有為 Amazon OpenSearch Service 授予足夠的許可來建立日誌串流。請檢查資源存取政策。

如果您遇到此錯誤，請確認政策的 `resource` 元素包含正確的日誌群組 ARN。如果有，請遵循以下步驟：

1. 等候幾分鐘。

1. 在 Web 瀏覽器中重新整理該頁面。

1. 選擇 **Select existing group** (選擇現有群組)。

1. 對於 **Existing log group** (現有日誌群組)，選擇您在收到錯誤訊息之前建立的日誌群組。

1. 在存取政策區段中，選擇 **Select existing policy** (選取現有政策)。

1. 對於 **Existing policy** (現有政策)，選擇您在收到錯誤訊息之前建立的政策。

1. 選擇**啟用**。

如果在重複此程序數次後仍然存在錯誤，請連絡 [AWS Support](https://aws.amazon.com/premiumsupport/)。

## 無法關閉索引
<a name="troubleshooting-close-api"></a>

OpenSearch Service 僅支援適用於 OpenSearch 和 Elasticsearch 版本 7.4 及更新版本的 [https://opensearch.org/docs/latest/api-reference/index-apis/close-index/](https://opensearch.org/docs/latest/api-reference/index-apis/close-index/) API。如果正在使用較舊版本並從快照中恢復索引，您可以刪除現有索引 (在重新編製索引前後)。

## 用戶端授權檢查
<a name="troubleshooting-license"></a>

Logstash 和 Beats 的預設發行版包括專有授權檢查，並且無法連接到 OpenSearch 的開源版本。確保您搭配使用這些用戶端的 Apache 2.0 (OSS) 發行版與 OpenSearch Service。

## 請求調節
<a name="troubleshooting-throttle-api"></a>

如果您收到持續的 `403 Request throttled due to too many requests` 或 `429 Too Many Requests` 錯誤，請考慮垂直擴展。如果承載會導致記憶體使用量超過 Java 堆積的大小上限，則 Amazon OpenSearch Service 會調節請求。

## 無法對節點執行 SSH
<a name="troubleshooting-ssh"></a>

您無法使用 SSH 在 OpenSearch 叢集中存取任何節點，並且無法直接修改 `opensearch.yml`。反之，請使用 主控台 AWS CLI或 SDKs 來設定您的網域。您也可以使用 OpenSearch REST API 指定幾個叢集層級的設定。如需進一步了解，請參閱 [Amazon OpenSearch Service API 參考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)和 [Amazon OpenSearch Service 中支援的操作](supported-operations.md)。

如果您需要深入了解叢集的效能，您可以[將錯誤日誌和慢速日誌發佈至 CloudWatch](createdomain-configure-slow-logs.md)。

## 「無效的物件存放區類別」快照錯誤
<a name="troubleshooting-glacier-snapshots"></a>

OpenSearch Service 快照不支援 Amazon Glacier 儲存類別。如果您的 S3 儲存貯體包含將物件轉換為 Amazon Glacier 儲存類別的生命週期規則，當您嘗試列出快照時，可能會遇到此錯誤。

如果您需要從儲存貯體還原快照，請從 Amazon Glacier 還原物件、將物件複製到新儲存貯體，並將[新儲存貯體註冊](managedomains-snapshot-registerdirectory.md)為快照儲存庫。

## 無效主機標頭
<a name="troubleshooting-host-header"></a>

​OpenSearch Service 要求用戶端在請求標頭中指定 `Host`。有效的 `Host`​ 值是不含 `https://` 的網域端點，例如：

```
Host: search-my-sample-domain-ih2lhn2ew2scurji.us-west-2.es.amazonaws.com
```

如果您在提出請求時收到 `Invalid Host Header` 錯誤，請檢查您的用戶端或代理在 `Host` 標頭中包含 OpenSearch Service 網域端點 (而不是其 IP 地址 (舉例來說))。

## 無效的 M3 執行個體類型
<a name="m3-instance-types"></a>

OpenSearch Service 不支援對執行 OpenSearch 或 Elasticsearch 6.7 版和更新版本的現有網域新增或修改 M3 執行個體。您可以繼續搭配 Elasticsearch 6.5 或較舊版本使用 M3 執行個體。

建議您選擇較新的執行個體類型。對於執行 OpenSearch 或 Elasticsearch 6.7 和更新版本的網域，下列限制適用：
+ 如果現有網域不使用 M3 執行個體，則無法再變更為它們。
+ 如果您將現有網域從 M3 執行個體類型變更為其他執行個體類型，則無法切換回原本的執行個體類型。

## 熱查詢在啟用 UltraWarm 後停止運作
<a name="troubleshooting-uw"></a>

當您在網域上啟用 UltraWarm 時，如果 `search.max_buckets` 設定沒有預先存在的複寫，則 OpenSearch Service 會自動將值設定為 `10000`，以防止記憶體大量查詢充滿暖節點。如果您的熱查詢使用超過 10,000 個儲存貯體，當您啟用 UltraWarm 時，它們可能會停止運作。

由於 Amazon OpenSearch Service 的受管特性而無法修改此設定，因此您需要開啟支援案例來增加限制。增加限制不需要高級支援訂閱。

## 升級後無法降級
<a name="troubleshooting-upgrade-snapshot"></a>

[就地升級](version-migration.md)是無法復原的作業，但您仍可連絡 [AWS 支援](https://aws.amazon.com/premiumsupport/)；支援人員可協助您在新網域上還原自動、預先升級的快照。例如，如果您將網域從 Elasticsearch 5.6 升級到 6.4， AWS Support 可協助您在新的 Elasticsearch 5.6 網域上還原預先升級快照。如果已經製作原有網域的手動快照，則您可以[自行執行該步驟](managedomains-snapshots.md)。

## 需要所有 的網域摘要 AWS 區域
<a name="troubleshooting-domain-summary"></a>

下列指令碼使用 Amazon EC2 [describe-regions](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-regions.html) AWS CLI 命令來建立可使用 OpenSearch Service 的所有區域的清單。接著，它會為個別區域呼叫 [list-domain-names](https://docs.aws.amazon.com/cli/latest/reference/es/list-domain-names.html)：

```
for region in `aws ec2 describe-regions --output text | cut -f4`
do
    echo "\nListing domains in region '$region':"
    aws opensearch list-domain-names --region $region --query 'DomainNames'
done
```

接著，您會收到下列個別區域的輸出：

```
Listing domains in region:'us-west-2'...
[
  {
    "DomainName": "sample-domain"
  }
]
```

不提供 OpenSearch Service 的區域會傳回「Could not connect to the endpoint URL (無法連接到端點 URL)」。

## 使用 OpenSearch Dashboards 時發生瀏覽器錯誤
<a name="troubleshooting-dashboards-debug-browser-errors"></a>

當您使用 Dashboards 來檢視 OpenSearch Service 網域中的資料時，您的瀏覽器會在 HTTP 回應物件中包裝服務錯誤訊息。您可以使用 Web 瀏覽器中的常用開發人員工具，例如 Chrome 中的開發人員模式，來檢視基本服務錯誤和協助您的偵錯工作。

**若要檢視 Chrome 中的服務錯誤**

1. 從 Chrome 頂部選單列中，選擇 **View** (檢視)、**Developer** (開發人員)、**Developer Tools** (開發人員工具)。

1. 選擇**網路**標籤。

1. 在 **Status (狀態)** 欄中，選擇任何狀態為 500 的 HTTP 工作階段。

**若要檢視 Firefox 中的服務錯誤**

1. 從選單中，選擇 **Tools (工具)**、**Web Developer (Web 開發人員)**、**Network (網路)**。

1. 選擇狀態為 500 的任何 HTTP 工作階段。

1. 選擇 **Response (回應)** 索引標籤，以檢視服務回應。

## 節點碎片和儲存扭曲
<a name="handling-errors-node-skew"></a>

節點*碎片扭曲*是指叢集中的一個或多個節點具有比其他節點更多的碎片。節點*儲存扭曲*是指叢集中的一個或多個節點具有比其他節點更多的儲存空間 (`disk.indices`)。雖然這兩種情況都可能暫時發生，例如當網域已替換節點並仍對其分配碎片，如果它們持續存在，則應進行解決。

若要識別這兩種類型的扭曲，請執行 [\$1cat/allocation](https://opensearch.org/docs/latest/opensearch/rest-api/cat/cat-allocation/) API 操作並比較回應中的 `shards` 和 `disk.indices` 條目：

```
 shards    | disk.indices  | disk.used  | disk.avail   | disk.total   | disk.percent |  host     | ip       | node
    264    |      465.3mb  |   229.9mb  |      1.4tb   |      1.5tb   |            0 |  x.x.x.x  | x.x.x.x  | node1
    115    |        7.9mb  |    83.7mb  |     49.1gb   |     49.2gb   |            0 |  x.x.x.x  | x.x.x.x  | node2
    264    |      465.3mb  |   235.3mb  |      1.4tb   |      1.5tb   |            0 |  x.x.x.x  | x.x.x.x  | node3
    116    |        7.9mb  |    82.8mb  |     49.1gb   |     49.2gb   |            0 |  x.x.x.x  | x.x.x.x  | node4
    115    |        8.4mb  |      85mb  |     49.1gb   |     49.2gb   |            0 |  x.x.x.x  | x.x.x.x  | node5
```

雖然一些儲存扭曲是正常的，但超過平均值 10% 需引起注意。當碎片分配扭曲時，CPU、網絡和磁碟頻寬使用率也可能會變得扭曲。由於更多的資料通常意味著更多的索引和搜尋操作，負載最重的節點也往往是資源最緊張的節點，而負載較輕的節點表示未充分利用的容量。

**修補**：使用數倍於資料節點計數的碎片計數，以確保每個索引均勻分佈在資料節點間。

## 索引碎片和儲存扭曲
<a name="handling-errors-index-skew"></a>

索引*碎片扭曲*是指一個或多個節點比其他節點持有更多的索引碎片。索引*儲存扭曲*是指一個或多個節點持有不成比例的大量索引總儲存空間。

索引扭曲比節點扭曲更難識別，因為它需要對 [\$1cat/shards](https://opensearch.org/docs/latest/opensearch/rest-api/cat/cat-shards/) API 輸出結果進行一些處理。如果叢集或節點指標中出現一些扭曲跡象，請調查索引扭曲。以下是索引扭曲的常見跡象：
+ 在資料節點的子集上發生 HTTP 429 錯誤
+ 跨資料節點的索引或搜尋操作佇列不均勻
+ 資料節點間的 JVM 堆積和/或 CPU 利用率不均勻

**修補**：使用數倍於資料節點計數的碎片計數，以確保每個索引均勻分佈在資料節點間。如果仍然會看到索引儲存或碎片扭曲，則可能需要強制重新分配碎片，OpenSearch Service 網域的每次[藍/綠部署](managedomains-configuration-changes.md)都會發生這種情況。

## 在選取 VPC 存取後未經授權的操作
<a name="vpc-permissions"></a>

當您使用 OpenSearch Service 主控台建立新網域時，您有選項可選擇 VPC 或公有存取。如果您選取 **VPC access** (VPC 存取)，OpenSearch Service 會查詢 VPC 資訊，且如果您沒有適當的許可則會失敗。

```
You are not authorized to perform this operation. (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation
```

若要啟用此查詢，您必須有權存取 `ec2:DescribeVpcs`、`ec2:DescribeSubnets` 及 `ec2:DescribeSecurityGroups` 操作。此需求僅適用於主控台。如果您使用 AWS CLI 建立和設定具有 VPC 端點的網域，則不需要存取這些操作。

## 在建立 VPC 網域後載入停滯
<a name="vpc-sts"></a>

建立使用 VPC 存取的新網域後，網域的 **Configuration state (組態狀態)** 的進度可能永不會超出 **Loading (載入)**。如果發生此問題，您的區域可能會*停用* AWS Security Token Service (AWS STS)。

若要將 VPC 端點新增到您的 VPC，OpenSearch Service 需要擔任 `AWSServiceRoleForAmazonOpenSearchService` 角色。因此， AWS STS 必須啟用 ，才能在指定區域中建立使用 VPC 存取的新網域。若要進一步了解啟用和停用 AWS STS，請參閱 [IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。

## 對 OpenSearch API 的請求遭拒
<a name="troubleshooting-tbac"></a>

引入 OpenSearch API 的標籤型存取控制，您可能會開始看到以前沒看過的存取遭拒錯誤。這可能是因為您的一或多個存取政策包含使用 `ResourceTag` 條件的 `Deny`，且目前遵守這些條件。

例如，以下政策僅用於網域具有標籤 `environment=production` 時，拒絕從組態 API 存取 `CreateDomain` 動作。即使動作清單同時包含 `ESHttpPut`，拒絕陳述式也不會套用於該動作或任何其他 `ESHttp*` 動作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Action": [
      "es:CreateDomain",
      "es:ESHttpPut"
    ],
    "Effect": "Deny",
    "Resource": "*",
    "Condition": {
      "ForAnyValue:StringEquals": {
        "aws:ResourceTag/environment": [
          "production"
        ]
      }
    }
  }]
}
```

------

為 OpenSearch HTTP 方法新支援標籤，如上所示的 IAM 身分型政策將導致連接的使用者遭拒絕存取 `ESHttpPut` 動作。之前在沒有標籤驗證的情況下，連接的使用者仍可傳送 PUT 請求。

如果您在將網域更新至服務軟體 R20220323 或更新版本後，開始看到存取遭拒錯誤，請查看身分型存取政策，了解是否是這種情況，並在必要時加以更新以允許存取。

## 無法從 Alpine Linux 連線
<a name="troubleshooting-alpine"></a>

Alpine Linux 會將 DNS 回應大小限制在 512 位元組。如果您嘗試從 Alpine Linux 3.18.0 版或更低版本連線到 OpenSearch Service 網域，如果網域位於 VPC 中且具有超過 20 個節點，DNS 解析可能會失敗。如果您使用的 Alpine Linux 版本高於 3.18.0，您應該能夠解析超過 20 個主機。如需詳細資訊，請參閱 [Alpine Linux 3.18.0 版本備註。](https://alpinelinux.org/posts/Alpine-3.18.0-released.html)

如果您的網域位於 VPC，我們建議使用其他 Linux 發行版本 (如 Debian、Ubuntu、CentOS、Red Hat Enterprise Linux 或 Amazon Linux 2) 來連線到該網域。

## 搜尋背壓的請求過多
<a name="troubleshooting-search-backpressure"></a>

CPU 型許可控制是一種閘道機制，可根據節點目前的容量主動限制對節點的請求數量，包括流量的有機增加和尖峰。過多的請求會在拒絕時傳回 HTTP 429「太多請求」狀態碼。此錯誤表示叢集資源不足、資源密集型搜尋請求，或工作負載中意外尖峰。

搜尋背壓提供拒絕的原因，這有助於微調資源密集型搜尋請求。對於流量尖峰，我們建議使用指數退避和抖動進行用戶端重試。

## 使用開發套件時發生憑證錯誤
<a name="troubleshooting-certificates"></a>

由於 AWS SDKs使用來自您電腦的 CA 憑證，因此當您嘗試使用 SDK 時，伺服器上憑證的變更 AWS 可能會導致連線失敗。錯誤訊息會不同，但通常包含以下文字：

```
Failed to query OpenSearch
...
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
```

您可以將電腦的 CA 憑證和作業系統保持在最新版本以避免此類作業失敗。如果您在企業環境中遇到此問題，且並無管理使用專屬的電腦，則您可能需要尋求管理員協助更新程序。

以下清單列出作業系統及 Java 版本的最低版本需求：
+ 具備自 2005 年 1 月起之更新的 Microsoft Windows 版本，或更新版本 (其信任清單中需包含至少其中一項所需的 CA)。
+ Mac OS X 10.4 搭配適用於 Mac OS X 10.4 發行版本 5 (2007 年 2 月) 的 Java，Mac OS X 10.5 (2007 年 10 月) 和更新版本 (其信任清單中需包含至少其中一項所需的 CA)。
+ Red Hat Enterprise Linux 5 (2007 年 3 月)、6 和 7 以及 CentOS 5、6 和 7，全部均需在其預設信任 CA 清單中包含至少其中一項所需的 CA。
+ Java 1.4.2\$112 (2006 年 5 月)、5 更新版本 2 (2005 年 3 月) 及所有更新版本，包括 Java 6 (2006 年 12 月)、7 和 8 (其預設信任 CA 清單中需包含至少其中一項所需的 CA)。

三個憑證授權機構如下：
+ Amazon 根 CA 1
+ Starfield Services 根憑證認證機構：G2
+ Starfield 類別 2 憑證認證機構

前兩個授權機構的根憑證可以從 [Amazon 信任服務](https://www.amazontrust.com/repository/)取得，但是將電腦保持在最新狀態是更直接的解決方案。若要進一步了解 ACM 提供的憑證，請參閱 [AWS Certificate Manager 常見問答集](https://aws.amazon.com/certificate-manager/faqs/#certificates)。

**注意**  
目前，us-east-1 區域中的 OpenSearch Service 網域使用不同授權機構的憑證。我們計劃更新區域，於近期使用這些新的憑證授權機構。

## 由於版本相容性，自訂外掛程式安裝失敗
<a name="troubleshooting-custom-plugins"></a>

**問題**：外掛程式安裝失敗，因為外掛程式與執行中的 OpenSearch 執行個體之間的版本不相符。系統會傳回下列錯誤：

```
PluginValidationFailureReason : The provided plugin could not be loaded.
```

**原因**：已針對 OpenSearch \$1*\$1MAJOR\$1*.\$1 編譯外掛程式*\$1MINOR\$1.\$1PATCH\$1*，但您的環境正在執行 OpenSearch \$1*\$1MAJOR\$1*.\$1*\$1MINOR\$1*.0。基於穩定性和安全性考量，OpenSearch 需要外掛程式與核心 OpenSearch 安裝之間的確切版本相符。

**可能修正**：使用 OpenSearch 版本 \$1*\$1MAJOR\$1*.\$1 建置外掛程式*\$1MINOR\$1*.0 以符合您的叢集版本。

**驗證和更新 OpenSearch 的版本**

1. 使用叢集的 API 或儀表板來執行下列命令。將*預設預留位置值*取代為您自己的資訊。

   **API 請求：**

   ```
   curl -X GET your-opensearch-endpoint/
   ```

   **儀表板中的開發工具主控台：**

   ```
   GET /
   ```

   命令會以下列格式傳回資訊。

   ```
   {
     "name": "node-id",
     "cluster_name": "account-id:domain-name",
     "cluster_uuid": "cluster-uuid",
     "version": {
       "distribution": "opensearch",
       "number": "2.17.0",
       "build_type": "tar",
       "build_hash": "unknown",
       "build_date": "2024-12-17T11:00:09.799828091Z",
       "build_snapshot": false,
       "lucene_version": "9.11.1",
       "minimum_wire_compatibility_version": "7.10.0",
       "minimum_index_compatibility_version": "7.0.0"
     },
     "tagline": "The OpenSearch Project: https://opensearch.org/"
   }
   ```

1. 如果版本號碼不是 \$1*\$1MAJOR\$1*.\$1*\$1MINOR\$1*.0，執行下列動作來重建外掛程式：

   1. 更新外掛程式的 `descriptor.properties`以指定版本 \$1*\$1MAJOR\$1*.\$1*\$1MINOR\$1*.0。

   1. 為您的專案類型使用 命令重建外掛程式。

   1. 使用新建置`.zip`的檔案執行 [update-package](https://docs.aws.amazon.com/cli/latest/reference/opensearch/update-package.html) 命令。

   1. 執行 [associate-package](https://docs.aws.amazon.com/cli/latest/reference/opensearch/associate-package.html) 命令，將您在上一個步驟中執行`update-package`命令時建立的最新外掛程式版本建立關聯。