【ElasticSearch】給ElasticSearch資料庫配置慢查詢日誌

HDWK 發表於 2021-06-18
資料庫 ElasticSearch

給ElasticSearch引擎配置慢查詢日誌,可以實時監控搜尋過慢的日誌。雖然ElasticSearch以快速搜尋而出名,但隨著資料量的進一步增大或是伺服器的一些效能問題,會有可能出現慢查詢的情況。慢查詢日誌可以幫助你快速定位到是什麼 Index 和 語句 過慢。甚至還可以用Opster Search Log Analyzer分析你的慢查詢日誌,Opster Search Log Analyzer還會針對你的慢查詢日誌提供專門的優化建議。

 

預設情況下,慢查詢日誌列印功能是關閉的。你可以通過設定查詢的threshold值來設定,通過如下的命令檢視當前設定的值。下面以mytask索引為例:

curl -XGET "http://<your elastic host>:9200/mytask/_settings"

上面查詢了mytask當前設定的值,如果你想輸出所有索引的設定資訊,那麼只需要將mytask改為_all就可以了  /_all/_settings .

 

如果輸出的資訊中,如果沒有threadhold值那麼就還沒有進行設定。需要分別設定 搜尋部分  和 索引部分 兩部分。

搜尋部分

curl -XPUT "http://<your elastic host>:9200/mytask/_settings" -H 'Content-Type: application/json' -d'
{
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.query.debug": "2s",
"index.search.slowlog.threshold.query.trace": "500ms",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.search.slowlog.threshold.fetch.info": "800ms",
"index.search.slowlog.threshold.fetch.debug": "500ms",
"index.search.slowlog.threshold.fetch.trace": "200ms",
"index.search.slowlog.level": "info"
}'

上面給Elastic Search搜尋(Search)設定了慢查詢日誌輸出分界線為info級。上面有設定query和fetch兩部分,query表示獲取文件(Documents)的時間,fetch表示獲取實際資料來源(Source)的時間。

 

索引部分

curl -XPUT "http://<your elastic host>:9200/mytask/_settings" -H 'Content-Type: application/json' -d'
{
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "2s",
"index.indexing.slowlog.threshold.index.trace": "500ms",
"index.indexing.slowlog.level": "info",
"index.indexing.slowlog.source": "1000"
}'

上面給Elastic Search索引(Indexing)設定了慢查詢日誌輸出的分界線為info級,並且每條資料最多輸出源資料(Source)的前1000個字元。

 

然後你可以再通過命令 mytask/_settings 來檢查設定是否生效。如果設定沒有問題了,那麼你接下來就可以在日誌目錄中觀察到你的慢日誌檔案了。

獲取日誌輸出目錄

curl -XGET "http://<your elatic host>:9200/_nodes/settings?pretty=true"

在settings.path.logs下找到列印日誌的目錄。預設情況,慢日誌檔名格式為:

<cluster_name>_index_search_slowlog.log 
<cluster_name>_index_indexing_slowlog.log

 

 

由於ElasticSearch的處理速度非常的快,所以很有可能沒有慢查詢的日誌。你可以通過如下的操作,將所有的查詢和索引都記錄到日誌中。

curl -XPUT "http://<your elatic host>:9200/task/_settings" -H 'Content-Type: application/json' -d'
{
"index.search.slowlog.threshold.query.trace": "0ms",
"index.search.slowlog.threshold.fetch.trace": "0ms",
"index.search.slowlog.level": "trace",
"index.indexing.slowlog.threshold.index.trace": "0ms",
"index.indexing.slowlog.level": "trace"
}'

上面將列印日誌的級別設定為trace, 並且將trace的相應的時間設定為0ms,這樣就會列印所有的操作記錄了。注意:這樣的設定僅用於測試!

上面都是以mytask索引為例展示資料的索引,你也可以將mytask替換為其他索引名稱,或者使用_all給所有索引設定慢查詢日誌(不建議這樣設定).

 

慢查詢日誌 對於ElasticSearch引擎的效能 非常地重要,同時也能給你的系統提供一層監控,以便你及時優化出現的慢查詢。 通常情況下,可能會偶爾出現慢查詢的語句,這種情況無需要做針對性的處理(有可能是垃圾回收或CPU緊張等造成的暫時現象)。但如果出現大片幅度的慢查詢日誌記錄,就需要進行鍼對性的優化。

相關文章