【ElasticSearch】給ElasticSearch資料庫配置慢查詢日誌
給ElasticSearch引擎配置慢查詢日誌,可以實時監控搜索過慢的日誌。雖然ElasticSearch以快速搜索而出名,但隨著數據量的進一步增大或是伺服器的一些性能問題,會有可能出現慢查詢的情況。慢查詢日誌可以幫助你快速定位到是什麼 Index 和 語句 過慢。甚至還可以用Opster Search Log Analyzer分析你的慢查詢日誌,Opster Search Log Analyzer還會針對你的慢查詢日誌提供專門的優化建議。
默認情況下,慢查詢日誌列印功能是關閉的。你可以通過設置查詢的threshold值來設置,通過如下的命令查看當前設置的值。下面以mytask索引為例:
curl -XGET "//<your elastic host>:9200/mytask/_settings"
上面查詢了mytask當前設置的值,如果你想輸出所有索引的設置資訊,那麼只需要將mytask改為_all就可以了 /_all/_settings .
如果輸出的資訊中,如果沒有threadhold值那麼就還沒有進行設置。需要分別設置 搜索部分 和 索引部分 兩部分。
搜索部分
curl -XPUT "//<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 "//<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 "//<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 "//<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緊張等造成的暫時現象)。但如果出現大片幅度的慢查詢日誌記錄,就需要進行針對性的優化。