Cloud SQL 日志记录

本页介绍如何查找和使用 Cloud Logging 以查看和查询 Cloud SQL 实例的日志。

Cloud SQL 使用 Cloud Logging。如需了解完整信息,请参阅 Cloud Logging 文档并查看 Cloud SQL 示例查询

查看日志

通过启用 general_log 标志并将 log_output 标志设置为 FILE,您可以在常规日志文件中查看对数据库实例执行的 SQL 查询,包括由最终用户直接执行的 SQL 查询。

如需查看 Cloud SQL 实例日志条目的日志,请执行以下操作:

控制台

  1. 在 Google Cloud Console 中,转到 Cloud Logging 页面。

    转到 Cloud Logging

  2. 在页面顶部选择一个现有 Cloud SQL 项目。
  3. 在查询构建器中,添加以下内容:
    • 资源:选择 Cloud SQL 数据库。在该对话框中,选择一个 Cloud SQL 实例。
    • 日志名称:滚动到 Cloud SQL 部分,并为您的实例选择相应的日志文件。例如:
      • cloudsql.googleapis.com/mysql-general.log
      • cloudsql.googleapis.com/mysql.err
    • 严重程度:选择一个日志级别。
    • 时间范围:选择预设范围或创建自定义范围。

gcloud

使用 gcloud logging 命令查看日志条目。 在下面的示例中,替换 PROJECT_IDlimit 标志是一个可选参数,用于指示要返回的最大条目数。

gcloud logging read "resource.type=cloudsql_database" \
--project=PROJECT-ID \
--limit=10 \
--format=json

查看实例操作日志

您可以在操作窗格中查看实例的日志。操作窗格会将对实例执行的所有操作记录到日志中,并包含以下信息:

  • 操作完成的时间,按照您的本地时区报告。
  • 操作的类型。
  • 操作的状态。
  • 说明操作结果的消息。

如果操作失败,您可以使用该消息来排查问题。

如需查看实例操作日志,请执行以下操作

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 点击操作切换到显示操作日志的窗格。
注意:操作日志不包含使用外部管理工具(如 mysql 客户端)执行的操作。只有使用 Google Cloud Console、gcloud 命令行工具或 Cloud SQL Admin API 执行的用户管理和密码更改操作才会出现在操作日志中。

查看应用日志

连接到 Cloud SQL 的应用会将其日志存储在不同位置。

App Engine(柔性环境)

计算 > App Engine > 服务中:

  • 在服务列表中,找到您的服务。
  • 点击工具下拉列表。
  • 选择日志

在 Google Cloud Console 的操作 > Logging > 日志浏览器部分,使用以下查询:

resource.type="gae_app"
resource.labels.module_id="default"

Cloud Run

在 Google Cloud Console 的 Cloud Run 日志浏览器部分查看日志。请注意,Cloud Run 仅报告来自 Cloud SQL 身份验证代理的错误消息。使用如下所示的查询:

resource.type="cloud_run_revision"
resource.labels.service_name="$SERVICE_NAME"
resource.labels.revision_name="$REVISION_NAME"

Cloud SQL Auth 代理

操作 > Logging > 日志浏览器中,使用以下查询:

log_id("appengine.googleapis.com/cloud_sql_proxy")

问题排查

问题 问题排查
Logging 会占用 Cloud SQL 实例上的大量 CPU 和内存。 Logging 需要进行调整。

log_statement 标志可以设置为“none”,logging_collector 标志可以设置为“off”。如果仍在进行日志记录,则可能存在其他与日志相关的标志可以调整。您可以修改实例来改动这些标志。

未找到审核日志。 只有当操作是经过身份验证的用户进行的 API 调用(用于创建、修改或读取用户创建的数据),或者操作访问配置文件或资源元数据时,才会写入数据访问日志。
在日志中找不到操作信息。 您想要详细了解某项操作。

例如,用户已被删除,但您找不到谁执行了此操作。日志显示操作已开始,但未提供任何更多信息。您必须为要记录的详细个人身份信息 (PII) 等启用审核日志记录

某些日志是从 Cloud SQL for SQL Server 实例的 error.log 日志进行过滤。 过滤后的日志包括不带时间戳的 AD 日志,以及 Login failed for user 'x'. Reason: Token-based server access validation failed with an infrastructure error. Login lacks connect endpoint permission. [CLIENT: 127.0.0.1]。这些日志会进行过滤,因为它们可能会引起混乱。
Logging 占用了大量磁盘空间。 有三种类型的日志文件占用磁盘空间:重做日志、常规日志和二进制日志。

连接到数据库并运行以下命令以获取每种类型的详细信息:


SHOW VARIABLES LIKE 'innodb_log_file%';

SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2),2)
AS GB from mysql.general_log;

SHOW BINARY LOGS;
    
日志文件难以读取。 最好以 json 或文本形式查看日志。您可以使用 gcloud logging read 命令以及 Linux 后处理命令来下载日志。

如需将日志下载为 JSON,请执行以下操作:


gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d" \
> downloaded-log.json
    

如需将日志下载为 TEXT,请执行以下操作:


gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format text \
--project=PROJECT_ID \
--freshness="1d"| jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) \
| .textPayload' \
> downloaded-log.txt