天天看點

Kibana 最常見的“啟動報錯”的故障原因及解決方案彙總

作者:Elastic開源社群

1、引言

新手最常見的 Kibana 服務不可用的問題解答,此類問題如非有經驗積累,可能耗費大量時間還不能解決,是以我特此整理了新手常見的 Kibana連不上叢集或啟動報錯的問題及解決方案。

可能會有遺漏,如果你遇到的問題不在此清單,請私信提問,我會在此補充。

2、問題彙總

2.1 Kibana server is not ready yet

  • Kibana 服務正在啟動中
  • 解決方案:Kibana 啟動需要一定時間,耐心等待 Kibana服務啟動完成,這是最常見的原因。
  • Kibana 和 Elasticsearch 的版本不相容。
  • 問題描述,Kibana 和 Elasticsearch 需保證所用版本互相相容。
  • 解決方案:檢查版本相容性,參考:相容性清單。
  • Elasticsearch 的服務位址和 Kibana 中配置的 elasticsearch.hosts 不比對
  • 問題描述:如下圖所示,Kibana 配置檔案中配置的服務清單和實際啟動叢集中節點資訊不一緻,這裡可以少配置,但是不能錯誤配置
  • 解決方案:修改配置檔案,保證配置檔案中和叢集服務的節點資訊一緻
  • Elasticsearch中禁止跨域通路
  • 解決方案:在 ES 的服務節點中加入以下兩行配置
  • http.cors.enabled: true http.cors.allow-origin: "*"
    • 1
    • 2
  • Elasticsearch服務所在㐏磁盤剩餘空間不足85%
  • 問題描述:當伺服器剩餘磁盤空間不足 85% 的時候,ES會阻止資料的持續寫入,可能會導緻分片不可用。

    解決方案:清理磁盤空間,保證剩餘使用空間大于 15%

  • ES 服務的健康狀态異常

    健康狀态

  • 綠色:所有分片都可用

    黃色:至少有一個副本不可用,但是所有主分片都可用

    紅色:至少有一個主分片不可用,資料不完整

  • 健康值檢查
  • GET _cat/health GET _cluster/health
    • 1
    • 2
  • 節點未成功加入叢集
  • 問題描述:這是最常見的 Kibana 連不上ES叢集服務的原因,即:叢集服務不可用,這種情況有可能單獨通路每個節點都是沒問題的,但是通過_cat/nodes輸出叢集節點資訊就會報錯。
  • 解決方案:删除每個節點的 data 目錄(開發環境),重新開機每個節點
  • 開啟security之後,登入角色未配置kibana user角色,注意kibana system不行
  • 問題描述:當開啟 Serurity 之後,通路遠端叢集需要提供SSL證書,不管是叢集之間通信還是用戶端通路都是一樣
  • 解決方案:給 Kibana 配置Security功能,配置賬戶名密碼,賬戶需要具有kibana_user角色,而不是kibana_sysem或者kibana_admin

2.2 服務無法通路

Kibana 最常見的“啟動報錯”的故障原因及解決方案彙總
  • 防火牆阻止了指定端口的通路
  • 關閉本地防火牆(CentOS 7):
  • //臨時關閉 systemctl stop firewalld //禁止開機啟動 systemctl disable firewalld
    • 1
    • 2
    • 3
    • 4
  • 雲伺服器關閉防火牆:
  • 需要登入雲伺服器提供商背景管理系統,打開控制台,選擇防火牆,開放指定端口

2.3 [.kibana] Action failed with ‘search_phase_execution_exception’. Retrying attempt 6 in 64 seconds.

解決方案:先檢查叢集狀态是否正常,不僅僅是分片是否可用,還要檢查叢集是否選主成功。使用_cat/nodes檢視每個節點是否的正常輸出,如果不正常,課删除每個節點的data目錄,重新開機每個節點服務。

2.4 Unable to retrieve version information from Elasticsearch nodes

報錯是無法擷取Elasticsearch叢集的版本資訊,原因有兩種

  • 叢集服務不可用
  • Kibana 權限不夠
  • Kibana 中 ES 叢集服務位址配置錯誤

2.5 unable to complete saved object migrations for the [.kibana_task_manager] index.

Kibana 最常見的“啟動報錯”的故障原因及解決方案彙總

由于Kibana的一些索引也是需要儲存在ES叢集中給的,造成此報錯的原因大機率是 Kibana 無法将資料儲存至急群中,可能的原因有以下幾種

  • Kibana 目前運作執行個體登入的賬号沒有寫入權限
  • 解決辦法:檢查登入賬号是否包含 kibana_user 的角色。或者是否通過 RBAC 限制了寫入權限。此原因為小機率發生的事件
  • Elastc 叢集健康狀況異常,導緻索引資料無法寫入。
  • 解決辦法:首先檢查叢集健康狀态,
  • [外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-CvXV4YEA-1650954718829)(/Users/wulei/Library/Application Support/typora-user-images/image-20220426134809076.png)]
  • 可通過 _cat/health 或_cluster/health 檢查,如果叢集中包含未配置設定狀态的分片,
  • [外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-IVGYvl38-1650954718830)(/Users/wulei/Library/Application Support/typora-user-images/image-20220426134737460.png)]
  • 可通過``GET _cluster/allocation/explain`查分片未配置設定原因

3、生産和開發環境的不同處理政策

針對開發環境删除data目錄解決ES服務無法啟動的方法,如遇生産環境如何解決?

提問

前提條件:已搭建好的es叢集:

node1為主節點,node2是從節點,兩者都沒有設定node. roles角色,且在叢集已存在資料分片

現象

現在修改叢集配置node2為初始主節點

,并配置node1 node. roles為data和master,node2的角色為master,重新開機叢集node1啟動成功,node2節點啟動時報錯不允許啟動,原因是已存在資料分片但又沒有data角色,删除node2的資料後node2能啟動成功

此時的問題是按配置node2為主節點沒有問題,但是檢查叢集節點狀況就隻有一個node2,并為主節點,node1并沒有加入到叢集成為從節點,是什麼原因呢?

解決:删除了node1的資料後重新開機node1,node1成功加入叢集,但是生産應該不能這麼操作,該怎麼解決?

解答

首先生産環境是有嚴格的上線步驟的,不允許你随意啟動和關閉服務以及随意修改配置檔案,就比如你一開始啥都不配置啟動叢集,然後一個節點一個節點的修改配置檔案單個節點重新開機這種行為肯定是不允許的。生産環境在對叢集的任何修改之前都有詳細的計劃,包括資料的備份遷移以及事故發生後如何復原。

一但生産環境出現上述問題,首先node1因為有舊的叢集狀态資訊而導緻無法加入叢集,那麼就需要登入node1所在叢集删除其沖突資料,并做好業務資料的備份工作,然後重新啟動節點加入新叢集。叢集狀态資訊有單獨的索引儲存,

繼續閱讀