【Apache Doris】审计日志插件 | 快速体验

【Apache Doris】审计日志插件 | 快速体验

  • 一、 环境信息
    • 1.1 硬件信息
    • 1.2 软件信息
  • 二、 审计日志插件介绍
  • 三、 快速 体验
    • 3.1 AuditLoader 配置
      • 3.1.1 下载 Audit Loader 插件
      • 3.1.2 解压安装包
      • 3.1.3 修改 plugin.conf
    • 3.2 创建库表
    • 3.3 初始化
    • 3.4 验证

一、 环境信息

1.1 硬件信息

  1. CPU :48C
  2. CPU型号:x86_64
  3. 内存 :185GB

1.2 软件信息

  1. 系统 :CentOS
  2. Apahce Doris版本 :2.0.2
  3. JAVA版本:1.8.0

二、 审计日志插件介绍

Doris默认装了是审计日志,即会将执行的SQL都记录到fe/log/fe.audit.log日志里,但如果需要映射到表、通过SQL的方式去查询解析这些日志的话,则需要安装配置审计日志插件。

Doris 的审计日志插件是在 FE 的插件框架基础上开发的,是一个可选插件。用户可以在运行时安装或卸载这个插件。

审计日志插件可以将 FE 的审计日志定期的导入到指定 Doris 集群中,以方便用户通过 SQL 对审计日志进行查看和分析。

在这里插入图片描述

三、 快速 体验

3.1 AuditLoader 配置

3.1.1 下载 Audit Loader 插件

Audit Loader 插件在 Doris 的发行版中默认提供,通过官网下载 Doris 安装包解压并进入目录后即可在 extensions/audit_loader 子目录下找到 auditloader.zip 文件。

3.1.2 解压安装包

unzip auditloader.zip

解压生成如下3个文件:

  • auditloader.jar:插件代码包。
  • plugin.properties:插件属性文件。
  • plugin.conf:插件配置文件。

在这里插入图片描述

3.1.3 修改 plugin.conf

以下配置可供修改:

  • frontend_host_port:FE 节点 IP 地址和 HTTP 端口,格式为 <fe_ip>:<fe_http_port>。 默认值为 127.0.0.1:8030。
  • database:审计日志库名,默认即可、需要与上一步的【创建库表】一致。
  • audit_log_table:审计日志表名,默认即可、需要与上一步的【创建库表】一致。
  • slow_log_table:慢查询日志表名,默认即可、需要与上一步的【创建库表】一致。
  • enable_slow_log:是否开启慢查询日志导入功能。默认值为 false。
  • user:集群用户名。该用户必须具有对应表的 INSERT 权限。
  • password:集群用户密码。

在这里插入图片描述

3.2 创建库表

在 Doris 中,需要创建审计日志的库和表,表结构如下:

若需开启慢查询日志导入功能,还需要额外创建慢表 doris_slow_log_tbl__,其表结构与 doris_audit_log_tbl__ 一致。

其中 dynamic_partition 属性根据自己的需要,选择审计日志保留的天数。

create database doris_audit_db__;

create table doris_audit_db__.doris_audit_log_tbl__
(
    query_id varchar(48) comment "Unique query id",
    `time` datetime not null comment "Query start time",
    client_ip varchar(32) comment "Client IP",
    user varchar(64) comment "User name",
    catalog varchar(128) comment "Catalog of this query",
    db varchar(96) comment "Database of this query",
    state varchar(8) comment "Query result state. EOF, ERR, OK",
    error_code int comment "Error code of failing query.",
    error_message string comment "Error message of failing query.",
    query_time bigint comment "Query execution time in millisecond",
    scan_bytes bigint comment "Total scan bytes of this query",
    scan_rows bigint comment "Total scan rows of this query",
    return_rows bigint comment "Returned rows of this query",
    stmt_id int comment "An incremental id of statement",
    is_query tinyint comment "Is this statemt a query. 1 or 0",
    frontend_ip varchar(32) comment "Frontend ip of executing this statement",
    cpu_time_ms bigint comment "Total scan cpu time in millisecond of this query",
    sql_hash varchar(48) comment "Hash value for this query",
    sql_digest varchar(48) comment "Sql digest for this query",
    peak_memory_bytes bigint comment "Peak memory bytes used on all backends of this query",
    stmt string comment "The original statement, trimed if longer than 2G"
) engine=OLAP
duplicate key(query_id, `time`, client_ip)
partition by range(`time`) ()
distributed by hash(query_id) buckets 1
properties(
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-30",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "1",
    "dynamic_partition.enable" = "true",
    "replication_num" = "3"
);

create table doris_audit_db__.doris_slow_log_tbl__
(
    query_id varchar(48) comment "Unique query id",
    `time` datetime not null comment "Query start time",
    client_ip varchar(32) comment "Client IP",
    user varchar(64) comment "User name",
    catalog varchar(128) comment "Catalog of this query",
    db varchar(96) comment "Database of this query",
    state varchar(8) comment "Query result state. EOF, ERR, OK",
    error_code int comment "Error code of failing query.",
    error_message string comment "Error message of failing query.",
    query_time bigint comment "Query execution time in millisecond",
    scan_bytes bigint comment "Total scan bytes of this query",
    scan_rows bigint comment "Total scan rows of this query",
    return_rows bigint comment "Returned rows of this query",
    stmt_id int comment "An incremental id of statement",
    is_query tinyint comment "Is this statemt a query. 1 or 0",
    frontend_ip varchar(32) comment "Frontend ip of executing this statement",
    cpu_time_ms bigint comment "Total scan cpu time in millisecond of this query",
    sql_hash varchar(48) comment "Hash value for this query",
    sql_digest varchar(48) comment "Sql digest for this query",
    peak_memory_bytes bigint comment "Peak memory bytes used on all backends of this query",
    stmt string comment "The original statement, trimed if longer than 2G "
) engine=OLAP
duplicate key(query_id, `time`, client_ip)
partition by range(`time`) ()
distributed by hash(query_id) buckets 1
properties(
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-30",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "1",
    "dynamic_partition.enable" = "true",
    "replication_num" = "3"
);

3.3 初始化

INSTALL PLUGIN FROM [source] [PROPERTIES ("key"="value", ...)]

source 支持三种类型:

  • 指向一个 zip 文件的绝对路径。
  • 指向一个插件目录的绝对路径。
  • 指向一个 http 或 https 协议的 zip 文件下载路径

Example:

  1. 安装一个本地 zip 文件插件:
INSTALL PLUGIN FROM "/home/users/doris/auditdemo.zip";
  1. 安装一个本地目录中的插件:
INSTALL PLUGIN FROM "/home/users/doris/auditdemo/";
  1. 下载并安装一个插件:注意需要放置一个和 .zip 文件同名的 md5 文件, 如 http://mywebsite.com/plugin.zip.md5 。其中内容为 .zip 文件的 MD5 值。
INSTALL PLUGIN FROM "http://mywebsite.com/plugin.zip";
  1. 下载并安装一个插件,同时设置了zip文件的md5sum的值:
INSTALL PLUGIN FROM "http://mywebsite.com/plugin.zip" PROPERTIES("md5sum" = "73877f6029216f4314d712086a146570");

执行install成功后会在fe/plugins/目录下自动生成AuditLoader目录

在这里插入图片描述

3.4 验证

执行如下sql验证是否安装注册成功,Status为INSTALLED则说明安装成功

在这里插入图片描述

直接通过sql查询审计日志,快速体验。

select
	*
from
	doris_audit_db__.doris_audit_log_tbl__
where
	time > '2023-11-11 00:00:00'
	and stmt like '%ssb_test.part%'
order by
	time desc
limit 10;

在这里插入图片描述

【Apache Doris】审计日志插件 | 快速体验 分享至此结束,体验过程中若遇到问题欢迎留言交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/144421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习5】无监督学习聚类

相比于监督学习&#xff0c; 非监督学习的输入数据没有标签信息&#xff0c; 需要通过算法模型来挖掘数据内在的结构和模式。 非监督学习主要包含两大类学习方法&#xff1a; 数据聚类和特征变量关联。 1 K均值聚类及优化及改进模型 1.1 K-means 聚类是在事先并不知道任何样…

Vue项目的学习一

1、Vue项目里面的.js文件里面对象添加属性 例如&#xff1a;在对象&#xff1a;row&#xff0c;需要在对象row里面添加一个属性状态&#xff1a;type&#xff0c;使用里面的Vue.set函数 Vue.set(参数1,参数2,参数3) Vue.set(row,type,false)解析&#xff1a; 参数1&#xff1…

不应该被忽视的10个好用的PDF文档修改器

您在寻找最好的免费开源 PDF 编辑器吗&#xff1f;您是否正在寻找免费编辑 PDF 文档的解决方案&#xff1f;如果您正在寻找此类问题的答案。那么&#xff0c;亲爱的朋友&#xff0c;您来对地方了&#xff0c;因为今天&#xff0c;在本文中&#xff0c;我将讨论一些适用于 Windo…

能够导出源代码的低代码平台有哪些?

目录 一、源码的优势 &#xff08;1&#xff09;定制性需求&#xff1a; &#xff08;2&#xff09;适应未来需求变化&#xff1a; &#xff08;3&#xff09;安全和可靠性&#xff1a; &#xff08;4&#xff09;高级功能和集成&#xff1a; 二、支持源代码的厂商 目前国内大多…

数据结构—队列的实现

前言&#xff1a;上次我们已经学习了数据结构中一个重要的线性表—栈&#xff0c;那么我们这一次就来学习另外一个重要的线性表—队列。 目录&#xff1a; 一、 队列的概念 二、 队列的实现&#xff1a; 1.队列的创建 三、 队列的操作 1.初始化队列 2.队尾入队列 3.队头出队列…

Linux中at命令添加一次性任务

1、工作原理 功能&#xff1a;在某个时间点&#xff0c;执行一次命令。 特点&#xff1a;任务是用户隔离的。 条件&#xff1a;必须要保证atd进程存在。 ps -ef |grep atd 原理&#xff1a;atd进程循环遍历队列里的任务&#xff0c;有则按顺序执行任务&#xff0c;没有&#x…

攻略 | 参与Moonbeam Ignite Ecosystem Tour

Moonbeam联合Moonwell和Beamswap一起举办社区链上活动&#xff0c;旨在让社区用户通过任务来探索Moonbeam、Moonwell、Beamswap平台。在了解如何使用的同时&#xff0c;参与任务挑战还有机会分得 1700 USDC 奖池 &#x1f381; 的奖励&#xff01;我已经完成全部任务&#xff0…

React Hooks实战:Web开发与设计

目录 前言 一、React Hooks 简介 二、React Hooks 的基本用法 1. 使用 useState 创建状态 2. 使用 useEffect 添加副作用 3. 使用 useContext 获取上下文 三、React Hooks 的常见问题 1. 循环引用问题 2. 副作用问题 四、React Hooks 实战案例 1. 使用 useState钩子…

数据分析的流程:CRISP-DM方法和SEMMA方法

CRISP-DM方法 SEMMA方法 角色与职责&#xff1a;EDIT数字化模型

【Android】画面卡顿优化列表流畅度五之下拉刷新上拉加载更多组件RefreshLayout修改

之前也写过类似组件的介绍&#xff1a; 地址&#xff1a;下拉刷新&上拉加载更多组件SmartRefreshLayout 本来打算用这个替换的&#xff0c;但在进行仔细研究发现不太合适。功能都很好&#xff0c;但嵌入不了当前的工程体系里。原因就是那啥体制懂的都懂。这样的组件需要改…

11-13 /11-14代理模式 AOP

调用者 代理对象 目标对象 代理对象除了可以完成核心任务&#xff0c;还可以增强其他任务,无感的增强 代理模式目的: 不改变目标对象的目标方法的前提,去增强目标方法 分为:静态代理,动态代理 静态代理 有对象->前提需要有一个类&#xff0c;那么我们可以事先写好一个类&a…

游戏缺失XINPUT1_3.dll的解决方法,一招搞定dll报错问题

当您尝试玩游戏或运行某个软件时&#xff0c;可能会遇到系统报错提示“XINPUT1_3.dll丢失”。这个错误通常是由于缺少或损坏了XINPUT1_3.dll文件导致的。“XINPUT1_3.dll”是一个动态链接库&#xff08;Dynamic Link Libraries&#xff0c;简称DLL&#xff09;文件。它是微软公…

Blazor 附件上传和下载功能

效果图 page "/uploadFile" inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment inject ToastService ToastService inject DownloadService DownloadService<h3>UploadFile</h3><Button OnClick"ButtonClick" C…

Linux虚拟机的安装

文章目录 1. 准备虚拟机2. 安装所需软件3. 上传项目文件4. 配置项目环境5. 安装项目依赖6. 数据库设置7. 启动项目8. 测试项目9. 设置域名和DNS&#xff08;可选&#xff09;10. 定期维护11. 使用反向代理&#xff08;可选&#xff09;12. 安全性加固13. 使用容器化技术&#x…

间歇性工作的时钟波形对行sdc约束怎么写

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 如下图&#xff0c;紫色部分波形间歇式工作&#xff0c;如果要写约束应该怎么写&#xff1f; 答&#xff1a;按照最小周期写即可&#xff0c;只看active的部分&#xff0c;至于…

springboot+maven多环境动态配置,以及编译失败的解决方案

一、前言 在我们的项目开发过程中一般会有多套的环境&#xff0c;比如比较常见的会有三套&#xff1a; dev &#xff08;研发环境&#xff09;&#xff0c;test(测试环境)&#xff0c;prod&#xff08;生产环境&#xff09;。 application.yml 是主配置文件&#xff0c;当在不…

【带头学C++】----- 六、结构体 ---- 6.6 结构体的指针成员

6.5结构体指针变量 结构体的指针变量:本质是变量只是该变量保存的是结构体变量的地址 6.5.1结构体指针变量的定义 通过指针&#xff0c;可以访问到我们结构体变量的值 可以通过 -> 符号 访问到结构体变量 6.5.2 结构体数组元素的指针变量 指针变量保存结构体数组元素…

Vue3弹性布局(Flex)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传width区域总宽度string | number‘auto’falseverticalflex 主轴的方向是否垂直&#xff0c;vertical 使用 flex-direction: columnbooleanfalsefalsewrap设置元素单行显示还是多行显示&#xff1b;参考 flex-wrap…

《线性代数》科教版教材必会习题

出一期比较尴尬的博客——有关线代教材的课后题总结~ 之所以说尴尬&#xff0c;主要有两个主要原因&#xff1a;这本科教版第三版的教材&#xff0c;整体看起来并不是那么舒服&#xff0c;甚至被我们的老师吐槽过&#xff0c;更好地选择时同济版的那本紫书——我们学校的新生这…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(六):FREERTOS移植

前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务。而一个任务主…