此部分包含用于使用和管理通知程序的函数。
通知程序函数
1 - GET_DATA_COLLECTOR_NOTIFY_POLICY
列出在 数据收集器组件上设置的所有通知策略。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
GET_DATA_COLLECTOR_NOTIFY_POLICY('component')
- component
- 要检查其通知策略的数据收集器组件的名称。
查询系统表 DATA_COLLECTOR 的组件名称。例如:
=> SELECT DISTINCT component, description FROM data_collector WHERE component ilike '%Depot%' ORDER BY component; component | description ----------------+------------------------------- DepotEvictions | Files evicted from the Depot DepotFetches | Files fetched to the Depot DepotUploads | Files Uploaded from the Depot (3 rows)
示例
=> SELECT GET_DATA_COLLECTOR_NOTIFY_POLICY('LoginFailures');
GET_DATA_COLLECTOR_NOTIFY_POLICY
----------------------------------------------------------------------
Notifiable; Notifier: vertica_stats; Channel: vertica_notifications
(1 row)
以下示例显示了当组件未设置通知策略时函数的输出:
=> SELECT GET_DATA_COLLECTOR_NOTIFY_POLICY('LoginFailures');
GET_DATA_COLLECTOR_NOTIFY_POLICY
----------------------------------
Not notifiable;
(1 row)
另请参阅
2 - NOTIFY
向 NOTIFIER 发送指定消息。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
NOTIFY ( 'message', 'notifier', 'target‑topic' )
参数
- message
- 要发送到端点的消息。
- notifier
- NOTIFIER 的名称。
- target‑topic
- 基于 notifier 类型指定以下内容之一的字符串:
-
Kafka:消息的现有目标 Kafka 主题的名称。
注意
如果主题尚不存在,您可以将 Kafka 代理配置为自动创建指定主题。有关详细信息,请参阅 Kafka 文档。 -
Syslog:
ProblemDescription
主题和channel
值。
-
超级用户
示例
发送消息以确认 ETL 作业已完成:
=> SELECT NOTIFY('ETL Done!', 'my_notifier', 'DB_activity_topic');
3 - SET_DATA_COLLECTOR_NOTIFY_POLICY
为 数据收集器组件创建/启用通知策略。当某些事件发生时,通知策略会自动向指定的 NOTIFIER 发送消息。
要查看数据收集器组件上的现有通知策略,请参阅 GET_DATA_COLLECTOR_NOTIFY_POLICY。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SET_DATA_COLLECTOR_NOTIFY_POLICY('component','notifier', 'topic', enabled)
- component
- 将通过通知程序报告其更改的组件的名称。
查询系统表 DATA_COLLECTOR 的组件名称。例如:
=> SELECT DISTINCT component, description FROM data_collector WHERE component ilike '%Depot%' ORDER BY component; component | description ----------------+------------------------------- DepotEvictions | Files evicted from the Depot DepotFetches | Files fetched to the Depot DepotUploads | Files Uploaded from the Depot (3 rows)
- notifier
- 将发送消息的通知程序的名称。
- topic
- 以下几项之一:
-
Kafka:将接收通知消息的 Kafka 主题的名称。
注意
如果主题尚不存在,您可以将 Kafka 代理配置为自动创建指定主题。有关详细信息,请参阅 Kafka 文档。 -
Syslog:字段
ProblemDescription
的主题。
-
- enabled
- 布尔值,指定是否启用此策略。设置为 TRUE 表示启用报告组件更改。设置为 FALSE 表示禁用通知程序。
示例
Kafka 通知程序
要在登录尝试失败时收到通知,您可以创建一个通知程序,使其在 DC 组件 LoginFailures
更新时发送通知。TLSMODE
'verify-ca’ 将验证服务器的证书是否由受信任的 CA 签名。
=> CREATE NOTIFIER vertica_stats ACTION 'kafka://kafka01.example.com:9092' MAXMEMORYSIZE '10M' TLSMODE 'verify-ca';
CREATE NOTIFIER
=> SELECT SET_DATA_COLLECTOR_NOTIFY_POLICY('LoginFailures','vertica_stats', 'vertica_notifications', true);
SET_DATA_COLLECTOR_NOTIFY_POLICY
----------------------------------
SET
(1 row)
以下示例显示如何禁用在上一个示例中创建的策略:
=> SELECT SET_DATA_COLLECTOR_NOTIFY_POLICY('LoginFailures','vertica_stats', 'vertica_notifications', false);
SET_DATA_COLLECTOR_NOTIFY_POLICY
----------------------------------
SET
(1 row)
=> SELECT GET_DATA_COLLECTOR_NOTIFY_POLICY('LoginFailures');
GET_DATA_COLLECTOR_NOTIFY_POLICY
----------------------------------
Not notifiable;
(1 row)
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