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 for rsyslog) 大于或等于 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 捆绑包时,都必须重复此步骤。

  1. 在设置 TLSMODE、证书和 CA 捆绑包时,使用 CREATE 或 ALTER 以禁用通知程序。

    => ALTER NOTIFIER encrypted_notifier
        DISABLE
        TLSMODE 'verify-ca'
        CA BUNDLE ca_bundle2;
    
  2. 更改通知程序并为 SASL_SSL 设置适合的 rdkafka 适配器参数。

    => ALTER NOTIFIER encrypted_notifier PARAMETERS
      'sasl.username=user;sasl.password=password;sasl.mechanism=PLAIN;security.protocol=SASL_SSL';
    
  3. 启用通知程序。

    => 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 写入一条消息:

  1. 为当前数据库启用 syslog 通知程序:

    => ALTER DATABASE DEFAULT SET SyslogEnabled = 1;
    
  2. 创建并启用系统日志通知程序 v_syslog_notifier

    => CREATE NOTIFIER v_syslog_notifier ACTION 'syslog'
        ENABLE
        MAXMEMORYSIZE '10M'
        IDENTIFIED BY 'f8b0278a-3282-4e1a-9c86-e0f3f042a971'
        PARAMETERS 'eventSeverity = 5';
    
  3. 配置 syslog 通知程序 v_syslog_notifier 以更新具有 SET_DATA_COLLECTOR_NOTIFY_POLICYLoginFailures 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 配置报告

另请参阅