clickhouse配置query_log查詢記錄


配置針對的是集群中所有機器,注意保持集群各個服務器設置日志保持統一。

一、配置步驟
1.打開clickhouse的users.xml文件,在profiles中加入<log_queries>1</log_queries>

 

 

2.打開config.xml文件,在yandex中加入query_log的配置

<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>toYYYYMM(event_date)</partition_by>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>

 

 

如添加上述參數之后表不自動創建,重啟clickhouse-server服務即可。
partition_by表示查詢日志表的分區列,語法與普通建表時相同,默認按月分區。flush_interval_milliseconds則表示日志刷入表中的周期,默認7.5秒,可以根據取數時效自己調節。

3.配置一個分布式表,用來外部查詢

CREATE TABLE IF NOT EXISTS system.query_log_all ON CLUSTER yk_ck_cluster AS system.query_log ENGINE = Distributed(yk_ck_cluster,system,query_log,rand())

 

4.配置過期TTL
由於query_log表沒有自動清理功能,為了防止日志表過大占用太多的內存,設置一個自動清理表數據的TTL。

ALTER TABLE system.query_log on cluster yk_ck_cluster MODIFY TTL event_date + INTERVAL 15 DAY

 

二、query_log內容介紹
1.system.query_log注冊了兩種查詢:

1)由客戶端直接運行的初始查詢。
2)由其他查詢發起的子查詢(分布式查詢執行)。對於這些類型的查詢,有關父查詢的信息顯示在initial_*列中。
2.每個查詢會在query_log表中創建1-2行,取決於查詢的狀態:

1)如果查詢執行成功,將創建兩個類型為1和2的事件(參考type列)。
2)如果查詢處理過程中發生錯誤,將創建兩個類型為1和4的事件。
3)如果查詢運行前發生錯誤,將只創建一個類型為3的事件。
3.默認情況下,每隔7.5秒向表添加一次日志。可以在query_log服務器設置中設置這個時間間隔(參考flush_interval_milliseconds參數)。要將日志從內存緩沖區強制刷新到表中,可以使用SYSTEM FLUSH LOGS。

列信息介紹:

type (Enum8) — 執行查詢時發生的事件類型。
‘QueryStart’ = 1 — 查詢執行成功開始。
‘QueryFinish’ = 2 — 查詢執行成功結束。
‘ExceptionBeforeStart’ = 3 — 在開始執行查詢之前發生異常。
‘ExceptionWhileProcessing’ = 4 — 查詢執行期間的異常。
event_date (Date) — 查詢開始日期。
event_time (DateTime) — 查詢開始時間。
query_start_time (DateTime) — 查詢執行開始時間。
query_duration_ms (UInt64) — 查詢執行持續時間。
read_rows (UInt64) — 讀取的行數。
read_bytes (UInt64) — 讀取的字節數。
written_rows (UInt64) — 對於插入查詢,寫入的行數。對於其他查詢,值為0。
written_bytes (UInt64) — 對於插入查詢,寫入的字節數。對於其他查詢,值為0。
result_rows (UInt64) — 結果中的行數。
result_bytes (UInt64) — 結果中的字節數。
memory_usage (UInt64) — 查詢消耗的內存。
query (String) — 查詢字符串。
exception (String) — 異常信息。
stack_trace (String) — 堆棧調用信息(在發生錯誤之前調用的方法列表)。如果查詢成功完成,則為空字符串。
is_initial_query (UInt8) — 查詢類型。可能的取值:
1 — 查詢由客戶端發起。
0 — 查詢由另一個查詢發起,用於分布式查詢執行。
user (String) — 發起當前查詢的用戶的名稱。
query_id (String) — 查詢ID。
address (IPv6) — 發起查詢的IP地址。
port (UInt16) —發起行查詢的客戶端端口。
initial_user (String) — 運行初始查詢的用戶名(用於分布式查詢執行)。
initial_query_id (String) — 初始查詢的ID(用於分布式查詢執行)。
initial_address (IPv6) — 啟動父查詢的IP地址。
initial_port (UInt16) — 發起父查詢的客戶端端口。
interface (UInt8) — 發起查詢的接口。可能的取值:
1 — TCP
2 — HTTP
os_user (String) — 運行clickhouse-client的操作系統的用戶名。
client_hostname (String) — 運行clickhouse-client或另一個TCP客戶端的客戶端機器的主機名。
client_name (String) — clickhouse-client或另一個TCP客戶端名稱。
client_revision (UInt32) — clickhouse-client或另一個TCP客戶端的修訂版。
client_version_major (UInt32) — lickhouse-client或另一個TCP客戶端的主要版本。
client_version_minor (UInt32) — lickhouse-client或另一個TCP客戶端的小版本。
client_version_patch (UInt32) — clickhouse-client或另一個TCP客戶端版本的補丁組件。
http_method (UInt8) — 發起查詢的HTTP方法。可能的取值:
0 — 查詢是從TCP接口啟動的。
1 — 使用GET方法。
2 — 采用POST方法。
http_user_agent (String) —在HTTP請求中傳遞的UserAgent請求頭。
quota_key (String) — 配額設置中指定的配額鍵。
revision (UInt32) — ClickHouse 修訂版。
thread_numbers (Array(UInt32)) — 參與查詢執行的線程數。
ProfileEvents.Names (Array(String)) — 測量不同指標的機器數。它們的描述可以在system.events表中找到
ProfileEvents.Values (Array(UInt64)) — 在ProfileEvents.Names 列中列出的指標值。
Settings.Names (Array(String)) — 客戶端運行查詢時更改的設置的名稱。要啟用對設置的日志記錄,將log_query_settings參數設置為1。
Settings.Values (Array(String)) —Settings.Names列中列出的設置的值。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM