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