数据库日志 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

数据库日志

MySQL 和 MariaDB 数据库会生成日志,您可以访问这些日志进行审计和问题排查。这些日志是:

  • 审计:审计跟踪记录是一组记录服务器活动的记录。对于每个客户端会话,它都会记录谁连接到服务器(用户名和主机)、运行了哪些查询、访问了哪些表以及更改了哪些服务器变量。

  • 错误:此日志包含服务器的(mysqld)启动和关闭时间,以及诊断消息,例如在服务器启动和关闭期间以及服务器运行时发生的错误、警告和注意事项。

  • 常规:此日志记录 mysqld 的活动,包括每个客户端的连接和断开连接活动,以及从客户端接收的 SQL 查询。当您怀疑出现错误并想确切了解客户端向 mysqld 发送了什么内容时,常规查询日志可能非常有用。

  • 慢速查询:此日志记录了花费很长时间才执行的 SQL 查询。

作为最佳实践,您应该将数据库日志从 Amazon RDS 发布到 Amazon CloudWatch Logs。通过 CloudWatch Logs,您可以对日志数据进行实时分析,将数据存储在高持久性存储中,并使用 CloudWatch Logs 代理管理数据。您可以从 Amazon RDS 控制台访问和查看您的数据库日志。您还可以使用 CloudWatch Logs Insights,通过交互方式搜索并分析 CloudWatch Logs 中的日志数据。以下示例说明了对审计日志的查询,该查询会检查 CONNECT 事件在日志中出现的次数、谁连接以及这些事件是从哪个客户端(IP 地址)连接的。审计日志中的摘录可能如下所示:

20221201 14:07:05,ip-10-22-1-51,rdsadmin,localhost,821,0,CONNECT,,,0,SOCKET 20221201 14:07:05,ip-10-22-1-51,rdsadmin,localhost,821,0,DISCONNECT,,,0,SOCKET 20221201 14:12:20,ip-10-22-1-51,rdsadmin,localhost,822,0,CONNECT,,,0,SOCKET 20221201 14:12:20,ip-10-22-1-51,rdsadmin,localhost,822,0,DISCONNECT,,,0,SOCKET 20221201 14:17:35,ip-10-22-1-51,rdsadmin,localhost,823,0,CONNECT,,,0,SOCKET 20221201 14:17:35,ip-10-22-1-51,rdsadmin,localhost,823,0,DISCONNECT,,,0,SOCKET 20221201 14:22:50,ip-10-22-1-51,rdsadmin,localhost,824,0,CONNECT,,,0,SOCKET 20221201 14:22:50,ip-10-22-1-51,rdsadmin,localhost,824,0,DISCONNECT,,,0,SOCKET

示例 Log Insights 查询显示,rdsadmin 每 5 分钟从 localhost 连接到数据库一次,总共连接了 22 次,如下图所示。这些结果表明,该活动源自内部 Amazon RDS 流程,例如监控系统本身。

Log Insights 报告

日志事件通常包含您想要统计的重要消息,例如有关与 MySQL 和 MariaDB 数据库实例关联的操作的警告或错误。例如,如果操作失败,则可能会发生错误并将其记录到错误日志文件中,如下所示:ERROR 1114 (HY000): The table zip_codes is full。您可能需要监控这些条目以了解错误发生趋势。您可以使用筛选条件从 Amazon RDS 日志创建自定义 CloudWatch 指标,以启用对 Amazon RDS 数据库日志的自动监控,从而监控特定日志中的特定模式,并在出现违反预期行为时生成告警。例如,为日志组 /aws/rds/instance/database-1/error 创建一个指标筛选条件,用于监控错误日志并搜索特定模式,例如 ERROR。将筛选模式设置为 ERROR,将指标值设置为 1。筛选条件将检测每条包含关键字 ERROR 的日志记录,并会将每个包含“ERROR”的日志事件的计数增加 1。创建筛选条件后,您可以设置告警,以在 MySQL 或 MariaDB 错误日志中检测到错误时通知您。

要详细了解如何通过创建 CloudWatch 控制面板并使用 CloudWatch Logs Insights 来监控慢速查询日志和错误日志,请参阅博客文章 Creating an Amazon CloudWatch dashboard to monitor Amazon RDS and Amazon Aurora MySQL