• ProxySQL 审计


    1、审计日志

    ProxySQL 2.0.5 引入了审计日志。此功能允许跟踪某些连接活动。要启用此功能,需要配置变量 mysql-auditlog_filename,也就是审计日志的文件名。此变量的默认值为空,也就是默认情况下不启用日志记录。

    启用后,将记录以下事件:

    在 MySQL 模块上:
    
        成功认证
        认证失败
        正常断开
        封闭连接
        更改架构(COMINITDB)
    
    在管理模块上:
    
        成功认证
        认证失败
        正常断开
        封闭连接
    

    变量

    • mysql-auditlog_filename:此变量定义记录审核事件的审计日志的基本名称。日志文件的文件名将是基本名称,后跟一个 8 位数的逐行编号。 默认值为空字符串()。
    • mysql-auditlog_filesize :此变量定义关闭当前文件并创建新文件时审计日志的最大文件大小。 默认值为 104857600(100MB)。

    记录格式

    当前实现仅支持一种日志记录格式:JSON。

    属性:

    • client_addr :连接到 ProxySQL 的客户端的地址(IP:port)
    • proxy_addr :ProxySQL 正在侦听的绑定接口的地址(IP:端口)(仅适用于 MySQL 模块)
    • event:事件类型。当前可能的值:
      • MySQLClientConnect_OK :成功连接到 MySQL 模块
      • MySQLClientConnect_ERR :与 MySQL 模块的连接失败
      • MySQLClientClose :MySQL 会话被关闭
      • MySQLClientQuit:客户端向 COM_QUITMySQL 模块发送显式信息
      • MySQLClientInitDB:客户端向 COMINIT_DBMySQL 模块发送显式信息
      • AdminConnectOK :成功连接到管理模块
      • AdminConnectERR :与管理模块的连接失败
      • Admin_Close :管理员会话已关闭
      • AdminQuit:客户端向 COMQUIT 管理模块发送显式信息
    • time :事件发生时的人类可读时间,以毫秒为单位
    • timestamp :纪元时间(以毫秒为单位)
    • ssl :布尔值,指定是否使用 SSL
    • schemaname:用于成功建立连接的当前模式
    • username:客户的用户名
    • threadid:分配给客户端的 threadid(会话 ID)
    • creation_time :创建会话时,信息仅在会话关闭时可用
    • duration :创建会话以来的时间(以毫秒为单位),此信息仅在会话关闭时可用
    • extra_info:提供其他信息的属性。当前仅用于描述会话在代码的哪一部分关闭。

    审计日志示例

    以下是一些审计日志示例。

    {\"client_addr\":\"10.0.200.179:51543\",\"event\":\"MySQL_Client_Connect_OK\",\"proxy_addr\":\"0.0.0.0:6033\",\"schemaname\":\"information_schema\",\"ssl\":false,\"thread_id\":8,\"time\":\"2020-08-13 16:08:24.960\",\"timestamp\":1597306104960,\"username\":\"dbmgr\"}
    

    2、通用操作日志

    ProxySQL 能够记录通过它的 SQL 语句。并将其记录在日志中

    管理员账户登录 ProxySQL:

    mysql> SET mysql-eventslog_filename='all_queries.log';
    mysql> LOAD MYSQL VARIABLES TO RUNTIME;
    mysql> SAVE MYSQL VARIABLES TO DISK;
    

    日志存储路径是:/var/lib/proxysql

    接下来,创建查询规则以匹配需要记录的日志记录。如果需要记录所有,则一个简单的规则就可以:

    mysql\> INSERT INTO mysql_query_rules (rule_id, active, match_digest, log,apply) VALUES (1,1,\'.\',1,0);
    

    请注意,并不是所有查询都由查询处理器处理。一些特殊,比如:commit、rollback 和 set autocommit 都是在查询处理器之前被处理的。如果要记录此类查询操作,则需要启用全局记录。

    mysql> SET mysql-eventslog_default_log=1;
    mysql> LOAD MYSQL VARIABLES TO RUNTIME;
    mysql> SAVE MYSQL VARIABLES TO DISK;
    

    精确记录

    记录 web_opr 这个账户的所有操作记录

      mysql\> INSERT INTO mysql_query_rules (rule_id, active, username, log, apply) VALUES (1, 1, \'web_opr\', 1, 0);
    

    记录对 T2 表的所有 INSERT 语句:

      INSERT INTO mysql_query_rules (rule_id, active, match_digest, log, apply) VALUES (1, 1, \'INSERT.\*t2, 1, 0);
    

    记得要让规则生效,需要载入 RUNTIME,要保存就要 SAVE 到磁盘

     LOAD MYSQL QUERY RULES TO RUNTIME;
     SAVE MYSQL QUERY RULES TO DISK;   
    

    记录格式

    在 2.0.6 版中,新变量 mysql-eventslog_format 控制查询日志的记录格式:

    变量值:

    1:默认值:查询记录在二进制格式文件 请注意,在 2.0.6 版本更好的支持下,引入了一种预处理语句,记录 rowsaffected 和 rowssent。因此,需要使用更新的版本 eventslogreadersample 来读取这些文件。 2 :查询以 JSON 格式记录。

    JSON 格式记录

    要启用 JSON 格式的日志记录,需要设置 mysql-eventslog_format=2。

    SET mysql-eventslog_format=2;
    LOAD MYSQL VARIABLES TO RUNTIME;
    SAVE MYSQL VARIABLES TO DISK;
    

    示例:

    {"client":"127.0.0.1:6966","digest":"0x0CA2979885DD8D2A","duration_us":26126,"endtime":"2020-08-13 15:34:05.674394","endtime_timestamp_us":1597304045674394,"event":"COM_QUERY","hostgroup_id":10,"query":"insert into hrttest.t2 values (123123)","rows_affected":1,"rows_sent":0,"schemaname":"information_schema","server":"10.0.53.210:3307","starttime":"2020-08-13 15:34:05.648268","starttime_timestamp_us":1597304045648268,"thread_id":6,"username":"web_opr"}
    
    {"client":"127.0.0.1:6966","digest":"0x0CA2979885DD8D2A","duration_us":2235,"endtime":"2020-08-13 15:34:15.999281","endtime_timestamp_us":1597304055999281,"event":"COM_QUERY","hostgroup_id":10,"query":"insert into hrttest.t2 values (456456)","rows_affected":1,"rows_sent":0,"schemaname":"information_schema","server":"10.0.53.210:3307","starttime":"2020-08-13 15:34:15.997046","starttime_timestamp_us":1597304055997046,"thread_id":6,"username":"web_opr"}
    

    在目前的版本,这些日志还无法实现保存在数据库表中,但是官方已经计划在后期的版本中实现,期待功能更多更强大的 ProxySQL!

    操作总结

    mysql> SET mysql-eventslog_filename='all_queries.log';  # 可以指定日志存储绝对路径: set mysql-eventslog_filename='/data/ProxySQL/log/sql.log';
    mysql> SET mysql-eventslog_default_log=1;
    mysql> SET mysql-eventslog_format=2;
    
    mysql> LOAD MYSQL VARIABLES TO RUNTIME;
    mysql> SAVE MYSQL VARIABLES TO DISK;
    


  • 相关阅读:
    阿里云SQL Server远程连接配置
    RSA签名验证无法通过,检查以下部分
    windows开机自动登录
    c# 进程调用exe
    JavaScript console控制台调试 post
    Tesseract-OCR 训练教程(二) 合并新的训练文件
    获取手机唯一标识
    sqlserver 日期与字符串之间的转换
    linq根据英文首字母姓名排序
    js调用浏览器下载
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16394114.html
Copyright © 2020-2023  润新知