从审核日志中深入了解 PostgreSQL 游标:CloudSQL

问题描述 投票:0回答:2

我的云日志控制台中大部分都有来自 cloudsql postgresql 审核日志的审核日志。

{
  "textPayload": "2023-04-27 08:03:17.058 UTC [980077]: [41406-1] db=xyz,user=xyz LOG:  duration: 6166.869 ms  statement: FETCH 10000 FROM c1",
  "insertId": "s=4ae93d4dfabf4fc6b09ckdanknc0f18e2;i=39eexcb;b=eca5cad5acb84ckjndkj9e5a3af5dc7aee47;m=153c87ckac099b;t=5fa4cca00kjbad2ae;x=aa1f7345cca3ckbcjb81d-0-0@a1",
  "resource": {
    "type": "cloudsql_database",
    "labels": {
      "project_id": "xyz",
      "database_id": "xyz:postgres",
      "region": "europe-west9"
    }
  },
  "timestamp": "2023-04-27T08:03:17.059246Z",
  "severity": "INFO",
  "labels": {
    "INSTANCE_UID": "12-d77d8db7-0633-4695-b4c7-0a8cdhdknec9392",
    "LOG_BUCKET_NUM": "38"
  },
  "logName": "projects/xyz/logs/cloudsql.googleapis.com%2Fpostgres.log",
  "receiveTimestamp": "2023-04-30T08:03:20.820646796Z"
}

我尝试查询

pg_cursors
,但由于没有活动连接,所以我没有看到任何数据。

我想跟踪该光标后面的原始查询

c1
或获取有关此
FETCH 10000 FROM c1
查询的更多详细信息。

如何通过使用云日志记录或查询 postgresql 来获取更多详细信息?

postgresql google-cloud-platform google-cloud-sql google-cloud-logging cursors
2个回答
0
投票
您提到的日志中显示的

语句:FETCH 10000 FROM C1是在postgresql中执行的原始(后端)查询。该查询将从游标C1检索接下来的10000行,因为默认情况下没有任何方向,postgresql将方向视为NEXT

请参阅此

链接以获取有关 FETCH 命令的更多详细信息。

如果您想了解有关此

PgAudit 日志的更多详细信息,请尝试通过将 logName 更改为您的 logName 来执行此查询(logName: "projects/xyz/logs/cloudsql.googleapis.com%2Fpostgres.log" )

resource.type="cloudsql_database" logName="projects/<your-project-name>/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
输出将是这样的

{ protoPayload: { @type: "type.googleapis.com/google.cloud.audit.AuditLog" methodName: "cloudsql.instances.query" request: { @type: "type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry" auditClass: "READ" auditType: "SESSION" chunkCount: "1" chunkIndex: "1" command: "SELECT" database: "finance" databaseSessionId: 2209692 parameter: "[not logged]" statement: "SELECT * FROM C1" statementId: 2 substatementId: 1 user: "alice" } } }
这里的

statement值指的是后端执行的查询。此查询将有助于获取有关审核日志的更多详细信息。有关查询和审核日志的更多信息,请参阅此文档

更新:

Cloud SQL for PostgreSQL 中的数据库审核可通过开源

pgAudit 扩展进行。通过使用此扩展,您可以有选择地记录和跟踪针对给定数据库实例执行的 SQL 操作。 该扩展为您提供了审核功能来监视和记录选定的操作子集。

pgAudit 扩展适用于执行的 SQL 命令和查询。相比之下,云审核日志应用于审核在 Cloud SQL 实例上完成的管理和维护操作。

请参阅此

文档来配置 PostgreSQL pgAudit 扩展。


0
投票
我一直在寻找类似的解决方案来找出 FETCH 语句背后的原始查询。有没有办法从 pgauditlogs 做到这一点?

© www.soinside.com 2019 - 2024. All rights reserved.