CREATE NOTIFIER
创建基于推送的通知程序,以从 Vertica 发送事件通知和消息。
语法
CREATE NOTIFIER [ IF NOT EXISTS ] notifier‑name ACTION 'notifier‑type'
[ ENABLE | DISABLE ]
[ MAXPAYLOAD 'max‑payload‑size' ]
MAXMEMORYSIZE 'max‑memory‑size'
[ TLSMODE 'tls‑mode' ]
[ CA BUNDLE bundle‑name [ CERTIFICATE certificate‑name ] ]
[ IDENTIFIED BY 'uuid' ]
[ [NO] CHECK COMMITTED ]
[ PARAMETERS 'adapter‑params' ]
参数
IF NOT EXISTS
如果存在同名对象,请不要创建它并继续。如果忽略此选项且对象存在,Vertica 将生成 ROLLBACK 错误消息。在上述两种情况下,如果对象已经存在,则不会创建它。
IF NOT EXISTS
子句适用于以下 SQL 脚本:可在某个对象不存在时创建该对象。请参阅 ON_ERROR_STOP 了解相关信息。
- notifier‑name
- 此通知程序的唯一标识符。
-
ACTION 'notifier‑type'
- 字符串,通知程序的类型,为以下之一:
-
URL,具有以下格式,用于标识一个或多个目标 Kafka 服务器:
kafka://kafka-server-ip-address:port-number
要在 Kafka 服务器不可用时启用故障转移,请在逗号分隔的列表中指定其他主机。例如:
kafka://192.0.2.0:9092,192.0.2.1:9092,192.0.2.2:9092
-
syslog
:通知会发送到 syslog。要使用这种类型的通知程序,您必须设置SyslogEnabled
参数:=> ALTER DATABASE DEFAULT SET SyslogEnabled = 1
此通知程序类型监视的事件不会记录到 MONITORING_EVENTS 或
vertica.log
。
-
ENABLE | DISABLE
- 指定启用还是禁用通知程序。
默认值:
ENABLE
。 MAXPAYLOAD
- 消息的最大大小,最多 10^9 字节,以 KB 或 MB 为单位指定,如下所示:
MAXPAYLOAD integer{K|M}
存在以下限制:
-
MAXPAYLOAD
不能大于MAXMEMORYSIZE
。 -
如果您将 syslog 配置为将消息发送到远程目标,请确保
MaxMessageSize
(in/etc/rsyslog
forrsyslog
) 大于或等于MAXPAYLOAD
。
默认值:
-
Kafka:1M
-
syslog:1M
-
MAXMEMORYSIZE
- 内部通知程序的最大大小,最大为 2 TB,以 KB、MB、GB 或 TB 为单位指定,如下所示:
MAXMEMORYSIZE integer{K|M|G|T}
MAXMEMORYSIZE
必须大于MAXPAYLOAD
。如果消息队列的大小超过
MAXMEMORYSIZE
,通知程序将删除多余的消息。 -
TLSMODE 'tls‑mode'
指定通知程序和端点之间的连接类型,可以是以下类型之一:
-
disable
(默认值):明文连接。 -
verify-ca
:加密连接,且服务器的证书已经验证为由受信任的 CA 签名。
如果通知程序
ACTION
为'syslog'
,则该参数无效;您必须为 TLS 配置 syslog 才能为这些 Vertica syslog 通知程序启用加密。-
-
CA BUNDLE bundle‑name
指定 CA 捆绑包。如果
TLSMODE
需要,捆绑包中的证书可用于验证 Kafka 服务器的证书。如果为当前使用
disable
的通知程序指定了 CA 捆绑包,而不会验证 Kafka 服务器的证书,则在连接到 Kafka 服务器时,将不使用该捆绑包。除非将TLSMODE
更改为验证服务器证书行为,否则此行为会持续存在。对 CA 捆绑包内容的更改,在通知程序后禁用并重新启用或在数据库重新启动后生效。但是,对通知程序所用的 CA 捆绑包的更改会立即生效。
如果通知程序
ACTION
为'syslog'
,则该参数无效;您必须为 TLS 配置 syslog 才能为这些 Vertica syslog 通知程序启用加密。-
CERTIFICATE certificate‑name
指定一个供端点验证的客户端证书。
如果通知程序
ACTION
为'syslog'
,则该参数无效;您必须为 TLS 配置 syslog 才能为这些 Vertica syslog 通知程序启用加密。-
IDENTIFIED BY uuid
- 指定通知程序的唯一标识符。如果设置,则此通知程序发布的所有消息都具有此属性。
[NO] CHECK COMMITTED
- 指定在发送队列中的下一条消息之前等待传递确认。
某些消息传递系统(如 syslog)不支持传递确认。
-
PARAMETERS 'adapter‑params'
- 指定以字符串形式传递给适配器的一个或多个可选适配器参数。适配器参数仅适用于与通知程序关联的适配器。
对于 Kafka 通知程序,请参阅 Kafka 和 Vertica 配置设置。
对于 syslog 通知程序,使用
eventSeverity=severity
指定事件的严重性,其中 severity 为以下之一:-
0
:紧急 -
1
:警报 -
2
:严重 -
3
:错误 -
4
:警告 -
5
:注意 -
6
:信息 -
7
:Debug
默认情况下,大多数 syslog 实现不记录严重级别为 7 的事件。您必须配置 syslog 来记录这些类型的事件。
-
特权
超级用户SASL_SSL Kafka 配置的加密通知程序
按照此步骤,为使用 SASL_SSL 的 Kafka 端点创建或更改通知程序。请注意,每当您更改给定通知程序的 TLSMODE、证书或 CA 捆绑包时,都必须重复此步骤。
-
在设置 TLSMODE、证书和 CA 捆绑包时,使用 CREATE 或 ALTER 以禁用通知程序。
=> ALTER NOTIFIER encrypted_notifier DISABLE TLSMODE 'verify-ca' CA BUNDLE ca_bundle2;
-
更改通知程序并为 SASL_SSL 设置适合的 rdkafka 适配器参数。
=> ALTER NOTIFIER encrypted_notifier PARAMETERS 'sasl.username=user;sasl.password=password;sasl.mechanism=PLAIN;security.protocol=SASL_SSL';
-
启用通知程序。
=> ALTER NOTIFIER encrypted_notifier ENABLE;
示例
Kafka 通知程序
创建 Kafka 通知程序:
=> CREATE NOTIFIER my_dc_notifier
ACTION 'kafka://172.16.20.10:9092'
MAXMEMORYSIZE '1G'
IDENTIFIED BY 'f8b0278a-3282-4e1a-9c86-e0f3f042a971'
NO CHECK COMMITTED;
使用特定于适配器的参数创建通知程序:
=> CREATE NOTIFIER my_notifier
ACTION 'kafka://127.0.0.1:9092'
MAXMEMORYSIZE '10M'
PARAMETERS 'queue.buffering.max.ms=1000';
创建使用加密连接并使用提供的 CA 捆绑包验证 Kafka 服务器证书的通知程序:
=> CREATE NOTIFIER encrypted_notifier
ACTION 'kafka://127.0.0.1:9092'
MAXMEMORYSIZE '10M'
TLSMODE 'verify-ca'
CA BUNDLE ca_bundle;
Syslog 通知程序
以下示例创建了一个通知程序,当
数据收集器 (DC) 组件 LoginFailures
更新时,它会向 syslog 写入一条消息:
-
为当前数据库启用 syslog 通知程序:
=> ALTER DATABASE DEFAULT SET SyslogEnabled = 1;
-
创建并启用系统日志通知程序
v_syslog_notifier
:=> CREATE NOTIFIER v_syslog_notifier ACTION 'syslog' ENABLE MAXMEMORYSIZE '10M' IDENTIFIED BY 'f8b0278a-3282-4e1a-9c86-e0f3f042a971' PARAMETERS 'eventSeverity = 5';
-
配置 syslog 通知程序
v_syslog_notifier
以更新具有 SET_DATA_COLLECTOR_NOTIFY_POLICY 的LoginFailures
DC 组件:=> SELECT SET_DATA_COLLECTOR_NOTIFY_POLICY('LoginFailures','v_syslog_notifier', 'Login failed!', true);
当用户未能以用户 Bob 身份进行身份验证时,此通知程序将以下消息写入 syslog(默认位置:/var/log/messages):
Apr 25 16:04:58 vertica_host_01 vertica: Event Posted: Event Code:21 Event Id:0 Event Severity: Notice [5] PostedTimestamp: 2022-04-25 16:04:58.083063 ExpirationTimestamp: 2022-04-25 16:04:58.083063 EventCodeDescription: Notifier ProblemDescription: (Login failed!) { "_db":"VMart", "_schema":"v_internal", "_table":"dc_login_failures", "_uuid":"f8b0278a-3282-4e1a-9c86-e0f3f042a971", "authentication_method":"Reject", "client_authentication_name":"default: Reject", "client_hostname":"::1", "client_label":"", "client_os_user_name":"dbadmin", "client_pid":523418, "client_version":"", "database_name":"dbadmin", "effective_protocol":"3.8", "node_name":"v_vmart_node0001", "reason":"REJECT", "requested_protocol":"3.8", "ssl_client_fingerprint":"", "ssl_client_subject":"", "time":"2022-04-25 16:04:58.082568-05", "user_name":"Bob" }#012 DatabaseName: VMart Hostname: vertica_host_01
有关 syslog 通知程序的详细信息,请参阅为 syslog 配置报告。