ByteHouse 云数仓版为您提供 SQL 审计能力,为您提供界面化查看 SQL 执行日志的功能,同时为您提供详细 SQL 日志表,打开详细日志开关后即可查看对应详细 SQL 日志表数据进一步查看更细致的日志数据。本文为您介绍 ByteHouse SQL 审计能力。
通过 ByteHouse 控制台 > 审计日志 > SQL 审计页面,您可以查询到执行 SQL 的历史日志。
注意
详细日志 非公开功能,需要加白使用。
当我们为您的账号加白后,您可以在 SQL 审计页面的右上角打开开启详细日志开关,打开后,ByteHouse 会为您在系统中创建一个 query_log 的表,用于写入详细的 SQL 执行日志数据。
打开开启详细日志开关。
打开详细日志按钮后,我们将获得您的授权,在您的【租户-环境】下创建一个 bh_system 的数据库,和一张 query_log 表,您拥有这个库和表的全部权限。
bh_system.query_log 表默认数据生命周期只有 7 天, 如果需要保留更长周期,请参考以下命令按需删除 TTL 或修改 TTL 时间。
# 查看 bh_system.query_log 表当前生命周期 show create table bh_system.query_log; # 删除 TTL ALTER TABLE bh_system.query_log REMOVE TTL; # 将默认 TTL 从 7 天改为 180 天(需管理员权限执行) ALTER TABLE bh_system.query_log MODIFY TTL event_time + INTERVAL 180 DAY;
该表在打开后立即生效并开始积攒数据,您需要重新与 ByteHouse 建立连接,旧连接将无法成功写入日志数据。
注意
查看 query_log 表。以使用 SQL 工作表为例为,您可以在 SQL 工作表的左侧数据对象中看到 query_log 表。
列名 | 数据类型 | 字段描述 |
---|---|---|
type | Enum8,枚举值包括:
| 查询事件类型:
|
event_date | Date | 事件发生的日期 |
event_time | DateTime | 事件发生的精确时间戳 |
event_time_microseconds | DateTime64(6) | 事件时间戳(微秒精度) |
query_start_time | DateTime | 查询开始时间 |
query_start_time_microseconds | DateTime64(6) | 查询开始时间(微秒精度) |
query_duration_ms | UInt64 | 查询总耗时(毫秒) |
read_rows | UInt64 | 查询的所有表和表函数读取的总行数 |
read_bytes | UInt64 | 查询的所有表和表函数读取的总字节数 |
written_rows | UInt64 | 写入的行数(仅INSERT操作) |
written_bytes | UInt64 | 写入的字节数(仅INSERT操作) |
result_rows | UInt64 | 返回结果的行数 |
result_bytes | UInt64 | 返回结果的字节数 |
memory_usage | UInt64 | 查询在每个worker,每个segment上使用的最高内存用量 |
current_database | String | 当前数据库 |
query | String | 完整的查询语句 |
normalized_query_hash | UInt64 | 规范化查询哈希值 |
query_kind | String | 查询类型(如 |
databases | Array(String) | 查询涉及到的数据库 |
tables | Array(String) | 查询涉及到的数据表 |
columns | Array(String) | 查询涉及到的数据表字段 |
partition_ids | Array(String) | 分区 |
projections | Array(String) | 查询涉及的投影(Projection)名称列表 |
materialized_views | Array(String) | 查询涉及的物化视图名称列表 |
exception_code | Int32 | 异常代码(仅当 |
exception | String | 异常信息(错误消息) |
stack_trace | String | 异常堆栈跟踪信息(需配置 |
is_initial_query | UInt8 | 是否为初始查询(0:子查询;1:用户直接发起的查询) |
user | String | 用户名 |
query_id | String | 查询ID |
interface | UInt8 | 发起查询的接口. 可能的值:
|
os_user | String | 运行客户端的操作系统用户 |
client_hostname | String | 客户端主机名 |
client_name | String | 客户端名称 |
client_revision | UInt32 | 客户端版本 |
client_version_major | UInt32 | 客户端主版本 |
client_version_minor | UInt32 | 客户端次版本号 |
client_version_patch | UInt32 | 客户端补丁版本 |
http_method | UInt8 | 发起查询的HTTP方法. 可能值: |
http_user_agent | String | 客户端的User-Agent信息 |
http_referer | String | HTTP 来源信息 |
forwarded_for | String | HTTP代理链中的客户端IP |
quota_key | String | 配额键 |
revision | UInt32 | |
ProfileEvents | Map(String, UInt64) | PrunedPartitions:实际读取到的partition数量。 注意 TotalCPUTimeMS 列仅在 ByteHouse CDW 引擎 v2.3.x 及以上版本中支持,使用前请确认引擎版本。您可登录 ByteHouse 控制台,单击顶部租户管理,在基础信息页面中查看您使用的引擎版本。 |
Settings | Map(String, String) | 查询生效的配置参数(覆盖默认值的部分) |
log_comment | String | 日志注释 |
thread_ids | Array(UInt64) | 参与查询的线程ID列表 |
used_aggregate_functions | Array(String) | 使用的聚合函数 |
used_aggregate_function_combinators | Array(String) | 使用的聚合函数 |
used_database_engines | Array(String) | 使用的表引擎 |
used_data_type_families | Array(String) | 使用的数据类型 |
used_dictionaries | Array(String) | 使用的字典表 |
used_formats | Array(String) | 使用数据格式参数(如:FORMAT CSV) |
used_functions | Array(String) | 使用的函数 |
used_storages | Array(String) | 使用的存储 |
used_table_functions | Array(String) | 使用的表函数 |
virtual_warehouse | String | 查询使用的计算组 |
query_plan | String | 查询的执行计划 |