解決Kibana(OpenSearch)某些欄位無法搜尋問題

2023-04-27 18:01:48

背景

最近在OpenSearch檢視線上紀錄檔的時候,發現某個索引下有些欄位無法直接在介面上篩選,搜尋到也不高亮,非常的不方便,就像下面這樣

欄位左側兩個篩選按鈕禁用了無法點選,提示

Unindexed fields can not be searched

右側則有感嘆號提示

No cached mapping for this field. Refresh field list from the Management > Index Patterns page

淺析

索引模式(Index Pattern)是用於定義OpenSearch中索引的後設資料資訊的。它包含了索引中包含的所有欄位的名稱、資料型別、分析器、儲存方式等資訊。當用戶進行搜尋或聚合操作時,Kibana需要根據欄位對映資訊來解析查詢請求,以便正確地查詢並返回結果。

"No cached mapping for this field"提示意味著無法找到欄位對映資訊,而"Unindexed fields can not be searched"則是由於沒有正確的欄位對映資訊導致無法搜尋未索引欄位。這通常發生在索引模式被修改後,但是快取還沒有更新時,或者在新索引被建立但是還沒有重新整理欄位列表時。

解決這個問題的方法是在Kibana的管理頁面中重新整理欄位列表,以確保所有欄位的對映資訊都是最新的。在這個頁面中,Kibana會快取對映資訊以提高效能,如果新加入了一個欄位,則需要重新整理欄位列表才能使其可搜尋。

解決

在OpenSeach裡,從Stack Management進入 Index patterns頁面,找到對應的索引模式,點選右上角重新整理按鈕

大部分情況重新整理完問題就解決了,但是實際上也可能會引入新的問題,比如下面這樣直接搜尋報錯:

F12檢視請求,可以看到opensearch返回了400

錯誤資訊:

Trying to retrieve too many docvalue_fields. Must be less than or equal to: [100] but was [215]. This limit can be set by changing the [index.max_docvalue_fields_search] index level setting

由於我們重新整理了欄位列表,導致搜尋的欄位超過了預設100的上限,最簡單的方法是在【Dev Tools】裡用下面REST API上調該索引模式的max_docvalue_fields_search

PUT /your-index-*/_settings
{
  "index" : {
    "max_docvalue_fields_search" : 300
  }
}

成功後會返回"acknowledged" : true

這些做完之後,在OpenSearch上檢視、篩選紀錄檔就一切正常了:)

參考

https://github.com/elastic/kibana/issues/22897