Elasticsearch官方文件翻譯-慢日誌
本系列文章翻譯ES官方8.0版本文件。本章對應內容地址Slow Log
因為水平有限,翻譯內容難免存在錯漏,歡迎大家指出
慢日誌
查詢慢日誌
分片級別的慢查詢(可分為查詢節點和獲取階段)日誌可用寫入特定的檔案,可用針對不同的階段設定閾值,如下
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
上訴所有的配置都是可用為每個索引進行動態配置的,如下
PUT /my-index-000001/_settings { "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" }
預設值為-1,也就是未開啟。
日誌作用於分片級別,也就是日誌記錄的是特定分片的操作日誌,並不是這個查詢的全部耗時,因為請求可能會被廣播給多個或所有分片進行查詢。這樣做的好處是記錄的時間除了與查詢條件有關也和特定機器的效能有關。
找到慢查詢的原因
確定是什麼導致的慢查詢通常是必要且有益的,如果一個請求攜帶了X-Opaque-ID請求頭,那麼在記錄的日誌中未新增一個id欄位,內容為該請求頭,如下
{ "type": "index_search_slowlog", "timestamp": "2030-08-30T11:59:37,786+02:00", "level": "WARN", "component": "i.s.s.query", "cluster.name": "distribution_run", "node.name": "node-0", "message": "[index6][0]", "took": "78.4micros", "took_millis": "0", "total_hits": "0 hits", "stats": "[]", "search_type": "QUERY_THEN_FETCH", "total_shards": "1", "source": "{\"query\":{\"match_all\":{\"boost\":1.0}}}", "id": "MY_USER_ID", "cluster.uuid": "Aq-c-PAeQiK3tfBYtig9Bw", "node.id": "D7fUYfnfTLa2D7y-xw6tZg" }
寫入操作的慢日誌
寫入操作的慢日誌作用類似與查詢查詢的慢日誌,log日誌的檔名以_index_indexing_slowlog.json結尾。日誌記錄的閾值設定類似於查詢操作的設定,如下
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.source: 1000
上述所有的設定都可以通過更新API介面動態設定,如下
PUT /my-index-000001/_settings { "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.source": "1000" }
預設情況下,Elasticsearch 會記錄_source的前1000個字元到慢日誌檔案,可用通過配置項index.indexing.slowlog.source來修改欄位長度,設定為false或0會不記錄該項,設定為true則會記錄完整的資料。_source資料將會被重新格式化以便在一行顯示,如果必須要保留原始的格式,那麼可以設定index.indexing.slowlog.reformat為false。日誌採用log4j2.properties配置檔案。
慢日誌級別
可以通過設定日誌的級別來關閉一些長而無用的日誌,如我們現在需要index.indexing.slowlog.level = INFO 以上級別的日誌,那麼我們可以設定index.indexing.slowlog.threshold.index.debug和index.indexing.slowlog.threshold.index.trace為-1