Postgres 代理

Postgres 代理过滤器对 Postgres 客户端(下游)和 Postgres 服务器(上游)之间的线协议进行解码。解码后的信息用于生成 Postgres 级别的统计信息,例如会话、执行的语句或事务等。Postgres 代理过滤器解析 QueryParse 消息中承载的 SQL 查询。当 SQL 查询成功解析后,会创建 元数据,其他过滤器(如 RBAC)可以使用该元数据。当 Postgres 过滤器检测到会话已加密时,会忽略消息,不会进行解码。更多信息

注意

postgres_proxy 过滤器是实验性的,目前仍在积极开发中。功能将随着时间的推移而扩展,配置结构可能会发生变化。

警告

postgreql_proxy 过滤器仅在 Postgres 前端/后端协议版本 3.0 上进行了测试,该版本在 Postgres 7.4 中引入。因此不支持早期版本。测试仅限于非 EOL 版本。

配置

Postgres 代理过滤器应与 TCP 代理链接,如下面的配置示例所示

filter_chains:
- filters:
  - name: envoy.filters.network.postgres_proxy
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.network.postgres_proxy.v3alpha.PostgresProxy
      stat_prefix: postgres
  - name: envoy.tcp_proxy
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
      stat_prefix: tcp
      cluster: postgres_cluster

统计信息

每个配置的 Postgres 代理过滤器都具有以 postgres.<stat_prefix> 为根的统计信息,包含以下统计信息

名称

类型

描述

errors

计数器

服务器以 ERROR 消息回复的次数

errors_error

计数器

服务器以 ERROR 消息回复且严重级别为 ERROR 的次数

errors_fatal

计数器

服务器以 ERROR 消息回复且严重级别为 FATAL 的次数

errors_panic

计数器

服务器以 ERROR 消息回复且严重级别为 PANIC 的次数

errors_unknown

计数器

服务器以 ERROR 消息回复,但解码器无法解析的次数

messages

计数器

过滤器处理的消息总数

messages_backend

计数器

过滤器检测到的后端消息总数

messages_frontend

计数器

过滤器检测到的前端消息数量

messages_unknown

计数器

过滤器成功解码消息但不知道如何处理的次数

sessions

计数器

成功登录的总数

sessions_encrypted

计数器

过滤器检测到并向上游传递加密会话的次数

sessions_terminated_ssl

计数器

过滤器终止 SSL 会话的次数

sessions_unencrypted

计数器

指示未加密成功登录的消息数量

sessions_upstream_ssl_success

计数器

过滤器建立上游 SSL 连接的次数

sessions_upstream_ssl_failed

计数器

过滤器无法建立上游 SSL 连接的次数

statements

计数器

SQL 语句总数

statements_delete

计数器

DELETE 语句的数量

statements_insert

计数器

INSERT 语句的数量

statements_select

计数器

SELECT 语句的数量

statements_update

计数器

UPDATE 语句的数量

statements_other

计数器

除 DELETE、INSERT、SELECT 或 UPDATE 之外的语句数量

statements_parsed

计数器

成功解析的 SQL 查询数量

statements_parse_error

计数器

未成功解析的 SQL 查询数量

transactions

计数器

SQL 事务总数

transactions_commit

计数器

COMMIT 事务的数量

transactions_rollback

计数器

ROLLBACK 事务的数量

notices

计数器

NOTICE 消息总数

notices_notice

计数器

NOTICE 消息数量,子类型为 NOTICE

notices_log

计数器

NOTICE 消息数量,子类型为 LOG

notices_warning

计数器

NOTICE 消息数量,严重级别为 WARNING

notices_debug

计数器

NOTICE 消息数量,严重级别为 DEBUG

notices_info

计数器

NOTICE 消息数量,严重级别为 INFO

notices_unknown

计数器

无法识别的 NOTICE 消息数量

动态元数据

Postgres 过滤器根据 QueryParse 消息中承载的 SQL 语句发出动态元数据。 statements_parsed 统计信息计数器跟踪成功解析 SQL 语句和创建元数据的次数。元数据以以下格式发出

名称

类型

描述

<table.db>

字符串

以 *table.db* 格式表示的资源名称。

[]

列表

一个字符串列表,表示对资源执行的操作。操作可以是以下之一:insert/update/select/drop/delete/create/alter/show。

注意

当前使用的解析器无法成功解析所有 SQL 语句,因此无法保证所有 SQL 查询都能成功生成动态元数据。目前,从 SQL 查询创建动态元数据是尽力而为的。如果解析 SQL 查询失败,则会增加 statements_parse_error 计数器,创建日志消息,不会生成动态元数据,但 Postgres 消息仍会转发到上游 Postgres 服务器。

可以通过将 enable_sql_parsing 设置为 false 来禁用解析 SQL 语句和发出动态元数据。