你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

监视 Azure Database for MySQL 灵活服务器

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

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

使用 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 支持的所有数据的列表,请参阅:

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 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 时,此参数生效

重要

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

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

访问慢查询日志

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

注释

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

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

财产 说明
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 用户名
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

注释

对于 sql_text_s,如果日志超过 2048 个字符,则会截断日志。

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

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

配置审核日志

重要

建议仅记录审核目的所需的事件类型和用户。 此方法有助于确保服务器的性能不会受到严重影响,并且收集了最少的数据量。

默认情况下,审核日志处于禁用状态。 若要启用它们,请将 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 结尾的所有用户都从审核日志条目中排除。 此外,允许在模式中使用问号 (?) 作为通配符。

注释

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

事件 说明
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 门户中启用诊断设置,请参阅审核日志门户文章

注释

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

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

连接:

财产 说明
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 空白
ip_s 连接到 MySQL 的客户端的 IP 地址
user_s 执行查询的用户的名称
db_s 连接的数据库的名称
\_ResourceId 资源 URI
status_d CONNECTIONS_V2 事件的连接错误代码条目。

常规:

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

注释

对于 sql_text_s,如果日志超过 2048 个字符,则会截断日志。

财产 说明
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 空白
ip_s 连接到 MySQL 的客户端的 IP 地址
user_s 执行查询的用户的名称
sql_text_s 完整查询文本
\_ResourceId 资源 URI

表访问权限:

注释

对于 sql_text_s,如果日志超过 2048 个字符,则会截断日志。

财产 说明
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 灵活服务器的“监视”窗格,然后选择“工作簿”

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

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

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

使用 Azure Monitor 工具分析数据

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

  • 某些 Azure 服务在 Azure 门户中具有内置的监视仪表板。 这些仪表板称为 见解,可以在 Azure 门户中的 Azure Monitor Insights 部分中找到它们。

  • 指标浏览器 可以让您查看和分析 Azure 资源的指标。 有关详细信息,请参阅使用 Azure Monitor 指标资源管理器分析指标

  • Log Analytics 允许您使用 Kusto 查询语言 (KQL)查询和分析日志数据。 有关详细信息,请参阅 Azure Monitor 日志查询入门

  • Azure 门户包含用于对活动日志执行查看和基本搜索的用户界面。 若要执行更深入的分析,将数据路由到 Azure Monitor 日志,并在 Log Analytics 中运行更复杂的查询。

  • Application Insights 监视 Web 应用程序的可用性、性能和使用情况,这样就可以识别和诊断错误,而无需等待用户报告错误。
    Application Insights 包括与各种开发工具的连接点,并与 Visual Studio 集成以支持 DevOps 进程。 有关详细信息,请参阅应用服务的应用程序监控

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

  • 仪表板,它支持将不同类型的数据合并到 Azure 门户的单个窗格中。
  • 工作簿、可在 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中的 日志查询。

可以使用慢查询日志来查找可以进行优化的候选项。 慢查询日志通过诊断日志传输到 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 Logs 后,可以对已审核的事件进行进一步分析。 这些示例查询可帮助你入门。 请确保使用您的服务器名称更新它们。

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

    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 资源常见警报的示例,请参阅示例日志警报查询

大规模部署警报系统

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

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

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

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