zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

[ Azure - Database ] 在 Azure Database for MySQL 中配置 binlog Auditing 并进行实际监控使用

mysqlDatabase监控配置 for 进行 实际 Binlog
2023-09-14 09:16:31 时间

在这里插入图片描述

传统 MySQL 的二进制日志 binlog 可以说是MySQL最重要的日志,它记录了所有的DDLDML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间。本文会讲解微软云 Azure Database for MySQL 的 binlog 以及其 Auditing 的相关知识。

Azure Database for MySQL 的 binlog

对于微软云 Azure 的 Azure Database for MySQL 中,二进制日志是始终启用的状态(即,将 log_bin 参数设置为 ON)。 如果你想使用触发器,则会收到如下错误:

你没有 SUPER 权限且二进制日志记录已启用(你可能需要使用安全性更低的 log_bin_trust_function_creators 变量)。

在命令行登入进入到MySQL执行 show variables like '%log_bin%'; 验证并查看上述 Azure 数据库的 binlog 相关信息:

在这里插入图片描述

从结果中可以发现两点

  1. Azure Database for MySQL的 binlog 默认是开启状态。
  2. 默认的 Azure Database for MySQL - Single Server 是安装微软在 Windows 服务器的。

如何查看 Azure Database for MySQL 的 binlog

在上述已经查看到,Azure Database for MySQL的 binlog 是默认开启,但是 Azure 的数据库是 PaaS 服务,你无法像传统 MySQL 那样直接访问 binlog。如果你想查看Azure Database for MySQL 的事务日志等怎么办?需要使用Azure portal中的一个服务:Auditing。


1. 配置使用 Azure 门户配置 Auditing log

在所要设置的数据库中,依次进入设置Setting、选择菜单设置参数Server parameters.

开启 Azure Database for MySQL 的 Audit 日志,依次进入服务器参数设置,依次根据下图更改:audit_log_enabledaudit_log_events,注意更改audit_log_events的 log 事件可以根据自身所需选择 DCLDDL、或者 DML 等。

在这里插入图片描述


2. 设置诊断 Diagnostics

在左侧菜单Monitoring下, 选择Diagnostic settings,点击添加诊断按钮。如图所示:

在这里插入图片描述

设置诊断内容,如下图所示:

在这里插入图片描述


3. 使用 Log Analytics 查看审核日志

完成上述操作后,即可查询配置的 log 日志,在 Monitoring 菜单下,选择 Logs 菜单,关闭弹出的新窗口(Queries 提示窗口)。

执行 audit 查询语句如下:

AzureDiagnostics
    |where Category =='MySqlAuditLogs' 
    |project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s ,ip_s , sql_text_s 
    |summarize count() by event_class_s,event_subclass_s 
    |order by event_class_s

在这里插入图片描述


Azure Monitor 日志的示例查询语句

  1. 列出特定服务器上的 GENERAL 事件
AzureDiagnostics
| where LogicalServerName_s == '<your server name>'
| where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
| project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
| order by TimeGenerated asc nulls last
  1. 列出特定服务器上的 CONNECTION 事件
AzureDiagnostics
| where LogicalServerName_s == '<your server name>'
| where Category == 'MySqlAuditLogs' and event_class_s == "connection_log"
| project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
| order by TimeGenerated asc nulls last
  1. 汇总特定服务器上的已审核事件
AzureDiagnostics
| where LogicalServerName_s == '<your server name>'
| where Category == 'MySqlAuditLogs'
| project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
| summarize count() by event_class_s, event_subclass_s, user_s, ip_s
  1. 绘制特定服务器上的审核事件类型分布图
AzureDiagnostics
| where LogicalServerName_s == '<your server name>'
| where Category == 'MySqlAuditLogs'
| project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
| summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
| render timechart
  1. 列出已为审核日志启用诊断日志的所有 MySQL 服务器上的已审核事件
AzureDiagnostics
| where Category == 'MySqlAuditLogs'
| project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
| order by TimeGenerated asc nulls last

参考文献

https://learn.microsoft.com/zh-cn/azure/mysql/single-server/concepts-audit-logs
https://learn.microsoft.com/en-us/azure/mysql/flexible-server/tutorial-configure-audit


:本文原创由 bluetata 发布于: https://bluetata.blog.csdn.net/ 转载请务必注明出处。