Compartir a través de

监视 Azure Database for MySQL - 灵活服务器

Azure Monitor从系统收集并聚合指标和日志,以监视可用性、性能和复原能力,并通知你影响系统的问题。 可以使用 Azure 门户、PowerShell、Azure CLI、REST API 或客户端库来设置和查看监视数据。

不同的指标和日志可用于不同的资源类型。 本文介绍可为此服务收集的监视数据类型以及分析这些数据的方法。

监视对于维护Azure Database for MySQL灵活服务器实例的运行状况、性能和安全性至关重要。 Azure Monitor提供了一个全面的解决方案,用于从 MySQL 服务器收集、分析和处理遥测数据。 本文概述了可用的关键监视功能,包括指标、日志、警报和可视化工具,可帮助你主动管理数据库工作负荷。

使用 Azure Monitor 收集数据

下表介绍了如何收集数据来监视服务,以及如何在收集数据后对数据执行哪些操作:

要收集的数据 Description 如何收集和路由数据 在何处查看数据 支持的数据
指标数据 指标是数值,用于描述特定时间点系统的各个方面。 可以使用算法聚合指标,与其他指标进行比较,并针对一段时间内的趋势进行分析。 - 数据定期自动收集。
- 可以将某些平台指标路由到Log Analytics工作区,以与其他数据一起查询。 检查每个指标的“DS 导出”设置,查看是否可以使用诊断设置来路由指标数据
指标探索器 Azure Database for MySQL - 灵活服务器指标由 Azure Monitor 支持
资源日志数据 日志记录有时间戳的系统事件。 日志可以包含不同类型的数据,并且可以结构化或自由格式的文本。 可以将资源日志数据路由到Log Analytics工作区进行查询和分析。 创建诊断设置 以收集和路由资源日志数据。 Log Analytics Azure Database for MySQL - 由 Azure Monitor 支持的灵活服务器资源日志数据
活动日志数据 Azure Monitor活动日志提供有关订阅级别事件的洞察。 活动日志包含信息,例如在修改资源或启动虚拟机时。 - 自动收集。
- 创建诊断设置到 Log Analytics 工作区,无需任何费用。
活动日志

有关Azure Monitor支持的所有数据的列表,请参阅:

已知问题

当服务器 character_set_server 参数设置为 UTF16 时,服务器指标无法生成。 之所以发生这种情况,是因为指标收集任务依赖于 C# MySQL 连接器,该连接器与 UTF16 存在兼容性问题。 建议客户使用备用字符集,并在更新配置后重启服务器以还原指标功能。

Azure Database for MySQL - 灵活服务器的内置监视功能

Azure Database for MySQL - 灵活服务器提供用于监视的内置资源。

服务器日志

在 Azure Database for MySQL 灵活服务器中,用户可以配置和下载服务器日志,以帮助进行故障排除。 启用此功能后,Azure Database for MySQL灵活服务器实例开始捕获所选日志类型的事件并将其写入文件。 然后,可以使用Azure门户和Azure CLI下载文件来处理这些文件。

默认情况下,服务器日志功能处于禁用状态。 有关如何启用服务器日志的信息,请参阅 启用和下载 Azure Database for MySQL 灵活服务器的服务器日志

服务器日志支持启用和下载慢速查询日志错误日志。 若要对数据执行历史分析,请在Azure门户中,在服务器的“诊断设置”窗格中,添加诊断设置,以将日志发送到Log Analytics工作区、Azure 存储或事件中心。 有关详细信息,请参阅设置诊断

为Azure Database for MySQL灵活服务器实例启用日志记录时,日志的创建时间最长为 7 天。 如果可用日志的总大小超过了 7 GB,则会删除最旧的文件,直到有空间可用。 服务器日志的 7-GB 存储空间限制是免费提供的,无法扩展。

日志每隔 24 小时或达到 500 MB 后轮换一次,以先发生为准。

Azure Database for MySQL中的查询日志速度缓慢

在Azure Database for MySQL灵活服务器中,慢速查询日志可供用户配置和访问。 慢查询日志默认禁用,你可启用它来在故障排除期间帮助识别性能性能瓶颈。

有关 MySQL 慢查询日志的详细信息,请参阅 MySQL 引擎文档中的“慢查询日志”部分

配置慢查询日志记录

慢查询日志默认禁用。 若要启用这些日志,请将 slow_query_log 服务器参数设置为 ON。 可以使用Azure门户或Azure CLI配置此参数。

可调整来控制慢查询日志记录行为的其他参数包括:

  • long_query_time:如果查询超过 long_query_time(秒)才完成,则记录该查询。 默认值为 10 秒。 服务器参数 long_query_time 将全局应用于 MySQL 中所有新建立的连接。 但是,它不会影响已连接的线程。 建议从应用程序重新连接到Azure Database for MySQL灵活服务器,或重启服务器以清除具有较旧值 long_query_time 的线程,并应用更新的参数值。
  • log_slow_admin_statements:确定是否记录了管理语句(例如 ALTER_TABLEANALYZE_TABLE)。
  • log_queries_not_using_indexes:确定是否记录没有使用索引的查询。
  • log_throttle_queries_not_using_indexes:限制可写入慢查询日志的非索引查询的数目。 当 log_queries_not_using_indexes 设置为 ON 时,此参数生效

Important

如果您的表未编制索引,设置log_queries_not_using_indexeslog_throttle_queries_not_using_indexes参数为ON可能会影响 MySQL 的性能。 针对这些非索引表运行的所有查询都会写入慢查询日志。

有关慢查询日志参数的完整说明,请参阅 MySQL 慢查询日志文档

访问慢查询日志

慢查询日志与Azure Monitor诊断设置集成。 在 Azure Database for MySQL 灵活服务器实例上启用慢查询日志后,可以将它们发送到 Azure Monitor 日志、事件中心或 Azure 存储。 若要详细了解诊断设置,请参阅诊断日志文档。 若要详细了解如何在 Azure 门户中启用诊断设置,请参阅 slow 查询日志门户文章

Note

如果通过诊断和设置将日志发送到Azure存储,则不支持高级存储帐户。

下表描述了慢查询日志的输出。 根据输出方法,包含的字段以及这些字段出现的顺序可能会有所不同。

Property Description
TenantId 你的租户标识
SourceSystem Azure
TimeGenerated [UTC] 记录日志时的时间戳 (UTC)
Type 日志的类型。 始终为 AzureDiagnostics
SubscriptionId 服务器所属的订阅的 GUID
ResourceGroup 服务器所属的资源组的名称
ResourceProvider 资源提供程序的名称。 始终为 MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId 资源 URI
Resource 服务器名称
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s 服务器名称
start_time_t [UTC] 查询开始时间
query_time_s 执行查询所需的总时间(秒)
lock_time_s 锁定查询的总时间(秒)
user_host_s Username
rows_sent_s 发送的行数
rows_examined_s 检查的行数
last_insert_id_s last_insert_id
insert_id_s 插入 ID
sql_text_s 完整查询
server_id_s 服务器 ID
thread_id_s 线程 ID
\_ResourceId 资源 URI

Note

对于 sql_text_s,如果日志超过 2,048 个字符,则日志将被截断。

使用审核日志跟踪数据库活动

Azure Database for MySQL灵活服务器为用户提供配置审核日志的功能。 还可使用审核日志来跟踪数据库级活动,包括连接、管理、DDL 和 DML 事件。 此类日志通常用于合规性目的。

配置审核日志

Important

  • 建议仅记录审核目的所需的事件类型和用户。 此方法有助于确保服务器的性能不会受到严重影响,并且收集了最少的数据量。
  • 不建议在数据库中存储纯文本密码。 如果选择这样做并通过 SQL 查询插入或访问它们,这些查询可能会显示在审核日志中,可能会公开敏感信息。

默认情况下,审核日志处于禁用状态。 若要启用它们,请将 audit_log_enabled 服务器参数设置为“开启”。 使用Azure门户或Azure CLI启用审核日志。

可调整来控制审核日志记录行为的其他参数包括:

  • audit_log_events:控制要记录的事件。 有关特定审核事件,请参阅下表。
  • audit_log_include_users:MySQL 用户将被包括在日志记录中。 此参数的默认值为空,其中包括用于日志记录的所有用户。 此参数的优先级高于audit_log_exclude_users。 此参数的最大长度为 512 个字符。 例如,通配符值dev*包含以 dev等关键字开头的条目的所有用户。 此示例中包含用户的通配符条目的另一个示例是 *dev,以值“dev”结尾的所有用户(如“stage_dev,prod_dev,user_dev”)均包含在审核日志条目中。 此外,允许在模式中使用问号 (?) 作为通配符。
  • audit_log_exclude_users:将 MySQL 用户排除在日志记录之外。 此参数的最大长度为 512 个字符。 还接受用户的通配符条目以在审核日志中排除用户。 例如,通配符值 stage* 排除所有条目以关键字 stage 开头的用户,例如 stage1,stage_user,stage_2。 排除用户的通配符条目的另一个示例是 *com。 在此示例中,以值 com 结尾的所有用户都从审核日志条目中排除。 此外,允许在模式中使用问号 (?) 作为通配符。

Note

audit_log_include_users 的优先级高于 audit_log_exclude_users。 例如,如果audit_log_include_users = demouseraudit_log_exclude_users = demouser,则用户将被包含在审核日志中,因为audit_log_include_users具有更高的优先级。

Event Description
CONNECTION - 连接启动
- 终止连接
CONNECTION_V2 - 连接启动(成功或失败的尝试错误代码)
- 终止连接
DML_SELECT SELECT 查询
DML_NONSELECT INSERT/DELETE/UPDATE 查询
DML DML(数据操作语言)= DML_SELECT(选择操作)+ DML_NONSELECT(非选择操作)
DDL 类似“DROP DATABASE”的查询
DCL 类似“GRANT PERMISSION”的查询
ADMIN 类似“SHOW STATUS”的查询
GENERAL DML_SELECT、DML_NONSELECT、DML、DDL、DCL 和 ADMIN 中的全部
TABLE_ACCESS - 表读取语句,例如 SELECT 或 INSERT INTO ...SELECT
- 表删除语句,例如 DELETE 或 TRUNCATE TABLE
- 表插入语句,例如 INSERT 或 REPLACE
- 表更新语句,例如 UPDATE

访问审核日志

审核日志与Azure Monitor诊断设置集成。 在灵活服务器上启用审核日志后,可以将这些日志发出到 Azure Monitor 日志、Azure 事件中心 或 Azure 存储。 若要详细了解诊断设置,请参阅诊断日志文档。 若要详细了解如何在 Azure 门户中启用诊断设置,请参阅 audit 日志门户文章

Note

如果通过诊断和设置将日志发送到Azure存储,则不支持高级存储帐户。

根据输出方法,包含的字段以及这些字段出现的顺序可能会有所不同。

Connection:

Property Description
TenantId 你的租户标识
SourceSystem Azure
TimeGenerated [UTC] 记录日志时的时间戳 (UTC)
Type 日志的类型。 始终为 AzureDiagnostics
SubscriptionId 服务器所属的订阅的 GUID
ResourceGroup 服务器所属的资源组的名称
ResourceProvider 资源提供程序的名称。 始终为 MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId 资源 URI
Resource 服务器的名称(采用大写形式)
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s 服务器名称
event_class_s connection_log
event_subclass_s CONNECTDISCONNECTCHANGE USER
connection_id_d MySQL 生成的唯一连接 ID
host_s Blank
ip_s 连接到 MySQL 的客户端的 IP 地址
user_s 执行查询的用户的名称
db_s 连接的数据库的名称
\_ResourceId 资源 URI
status_d CONNECTIONS_V2 事件的连接错误代码条目。

General:

以下架构适用于常规、DML_SELECT、DML_NONSELECT、DML、DDL、DCL 和 ADMIN 事件类型。

Note

对于 sql_text_s,如果日志超过 2,048 个字符,则日志将被截断。

Property Description
TenantId 你的租户标识
SourceSystem Azure
TimeGenerated [UTC] 记录日志时的时间戳 (UTC)
Type 日志的类型。 始终为 AzureDiagnostics
SubscriptionId 服务器所属的订阅的 GUID
ResourceGroup 服务器所属的资源组的名称
ResourceProvider 资源提供程序的名称。 始终为 MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId 资源 URI
Resource 服务器的名称(采用大写形式)
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s 服务器名称
event_class_s general_log
event_subclass_s LOGERRORRESULT(仅适用于 MySQL 5.6)
event_time 查询开始时间(UTC 时间戳)
error_code_d 查询失败时的错误代码。 0 意味着无错误
thread_id_d 执行了查询的线程的 ID
host_s Blank
ip_s 连接到 MySQL 的客户端的 IP 地址
user_s 执行查询的用户的名称
sql_text_s 完整查询文本
\_ResourceId 资源 URI

表访问权限:

Note

对于 sql_text_s,如果日志超过 2,048 个字符,则日志将被截断。

Property Description
TenantId 你的租户标识
SourceSystem Azure
TimeGenerated [UTC] 记录日志时的时间戳 (UTC)
Type 日志的类型。 始终为 AzureDiagnostics
SubscriptionId 服务器所属的订阅的 GUID
ResourceGroup 服务器所属的资源组的名称
ResourceProvider 资源提供程序的名称。 始终为 MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId 资源 URI
Resource 服务器的名称(采用大写形式)
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s 服务器名称
event_class_s table_access_log
event_subclass_s READINSERTUPDATEDELETE
connection_id_d MySQL 生成的唯一连接 ID
db_s 访问的数据库的名称
table_s 访问的表的名称
sql_text_s 完整查询文本
\_ResourceId 资源 URI

使用 Azure Monitor 工作簿

Azure Database for MySQL灵活服务器现已与Azure Monitor工作簿集成。 借助工作簿,你可以获得一个灵活的画布,用于分析数据并在Azure门户中创建丰富的视觉报表。 通过工作簿,你可以利用 Azure 上的多个数据源,并将它们合并成统一的交互式体验。 工作簿模板充当多个用户和团队设计用于灵活重用的特选报表。

打开模板时,将创建一个使用模板内容填充的暂时性工作簿。 通过这种集成,服务器可以连接到工作簿和一些示例模板,这有助于对服务进行大规模监控。 可以编辑这些模板,根据要求对其进行自定义,并将它们固定到仪表板,以创建Azure资源的集中有序视图。

Azure Database for MySQL灵活服务器有三个可用的模板:

  • 概述:显示实例摘要和顶级指标,帮助你以可视化方式了解服务器上的资源利用率。 此模板显示以下视图:

    • 服务器摘要
    • 数据库摘要
    • 连接指标
    • 性能指标
    • 存储指标
  • 审核:显示为服务器收集的审核事件的摘要和详细信息。 此模板显示以下视图:

    • 对服务执行的管理操作
    • 审核摘要
    • 审核连接事件摘要
    • 审核连接事件
    • 表访问摘要
    • 已识别的错误
  • 查询性能见解:显示实例上的查询工作负载、长时间运行的查询、慢查询分析和连接指标等内容的摘要和详细信息。 此模板显示以下视图:

    • 查询负载
    • 活动连接总数
    • 慢查询趋势(查询时间 > 10 秒)
    • 慢查询详细信息
    • 列出前五个最长查询
    • 按最小值、最大值、平均值和标准偏差查询时间汇总慢查询

你还可以编辑这些模板,并根据需求对其进行自定义。 有关详细信息,请参阅 Azure 工作簿

访问工作簿模板

若要查看Azure门户中的模板,请转到Azure Database for MySQL灵活服务器的 Monitoring 窗格,然后选择 Workbooks

屏幕截图显示了“工作簿”窗格中的“概述”、“审核”和“查询性能见解”模板。

你还可以转到“公共模板”窗格来显示模板列表。

示意图:显示“公共模板”窗格中“概述”、“审核”和“查询性能见解”模板。

使用Azure Monitor工具分析数据

Azure门户中提供了这些Azure Monitor工具,可帮助你分析监视数据:

支持更复杂可视化效果的工具包括:

  • Dashboards,使你能够将不同类型的数据合并到Azure门户中的单个窗格中。
  • Workbooks,可以在Azure门户中创建的可自定义报表。 工作簿可以包括文本、指标和日志查询。
  • Grafana 是一个在运维仪表板方面表现出色的开放平台工具。 可以使用 Grafana 创建仪表板,其中包含来自除Azure Monitor以外的多个源的数据。
  • Power BI,这是一项业务分析服务,用于跨各种数据源提供交互式可视化效果。 可以将Power BI配置为从Azure Monitor自动导入日志数据,以利用这些可视化效果。

导出Azure Monitor数据

可以使用以下方法将数据从Azure Monitor导出到其他工具:

若要开始使用 Azure Monitor REST API,请参阅Azure监视 REST API 演练

使用 Kusto 查询来分析日志数据

可以使用 Kusto 查询语言(KQL)分析Azure Monitor日志数据。 有关详细信息,请参阅 Azure Monitor 中的 Log 查询。

可以使用慢查询日志来查找可以进行优化的候选项。 将慢查询日志通过诊断日志传输到 Azure Monitor 日志后,可以进一步分析这些慢查询。 这些示例查询可帮助你入门。 请确保使用您的服务器名称更新它们。

  • 特定服务器上超过 10 秒的查询

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | where query_time_d > 10
    
  • 列出特定服务器上的前五个最长查询

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | order by query_time_d desc
    | take 5
    
  • 按最小、最大、平均和标准偏差查询时间汇总特定服务器上的慢速查询

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by Resource
    
  • 绘制特定服务器上的慢速查询的分布图

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | summarize count() by Resource , bin(TimeGenerated, 5m)
    | render timechart
    
  • 显示所有 Azure Database for MySQL启用了诊断日志的灵活服务器实例中超过 10 秒的查询

    AzureDiagnostics
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | where query_time_d > 10
    

对于审核日志,通过诊断日志将其传递到 Azure Monitor 日志后,您可以进一步分析已审核的事件。 这些示例查询可帮助你入门。 请确保使用您的服务器名称更新它们。

  • 列出特定服务器上的通用事件

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • 列出特定服务器上的 CONNECTION_V2 事件,status_d 列表示在连接时客户端应用程序面临的客户端连接错误代码

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d
    | order by TimeGenerated asc nulls last
    
  • 列出特定服务器上的 CONNECTION 事件

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • 汇总特定服务器上的已审核事件

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | 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, user_s, ip_s
    
  • 绘制特定服务器上的审核事件类型分布图

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | 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 Resource, bin(TimeGenerated, 5m)
    | render timechart
    
  • 列出启用了诊断日志来记录审核日志的所有 Azure Database for MySQL 灵活服务器实例的审核事件。

    AzureDiagnostics
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    

使用 Azure Monitor 警报通知您出现的问题

Azure Monitor警报使你能够识别和解决系统中的问题,并在客户注意到它们之前在监视数据中找到特定条件时主动通知你。 可以在Azure Monitor数据平台中针对任何指标或日志数据源发出警报。 有不同类型的 Azure Monitor 警报,根据您正在监视的服务和收集的监视数据而定。 请参阅选择正确的警报规则类型

有关Azure资源的常见警报示例,请参阅 Sample 日志警报查询

大规模部署警报系统

对于某些服务,可以通过将相同的指标警报规则应用于同一Azure区域中存在的多个同一类型的资源来大规模监视。 Azure Monitor基线警报(AMBA)提供了一种半自动化的方法,用于大规模实现重要的平台指标警报、仪表板和指南。

使用Azure 顾问获取个性化建议

对于某些服务,如果在资源操作期间发生关键条件或迫在眉睫的变化,门户中的服务 “概述” 页上会显示警报。 可以在左侧菜单“监视”下的“顾问建议”中找到警报的详细信息和建议修补程序。 在正常操作期间,不会显示任何顾问建议。

有关Azure 顾问的详细信息,请参阅 Azure 顾问 概述