为 syslog 配置报告
Syslog 是一个网络日志记录实用程序,用于发出、存储和处理日志消息。这是一种将异构数据放入单个数据存储库的有用方法。
要将事件记录到 syslog 中,请为希望记录的每个单独事件启用事件报告。默认情况下,消息会记录到 /var/log/messages
中。
配置报告给 syslog 的事件包括以下步骤:
-
允许 Vertica 为 syslog 捕获事件。
-
定义 Vertica 为 syslog 捕获哪些事件。
Vertica 强烈建议您捕获“陈旧检查点 (Stale Checkpoint)”事件。
-
定义要使用的 syslog 程序模块。
允许 Vertica 为 syslog 捕获事件
要为 syslog 启用事件捕获功能,请发出以下 SQL 命令:
=> ALTER DATABASE DEFAULT SET SyslogEnabled = 1;
要为 syslog 禁用事件捕获功能,请发出以下 SQL 命令:
=> ALTER DATABASE DEFAULT SET SyslogEnabled = 0;
定义要为 syslog 捕获的事件
要定义用来生成 syslog 条目的事件,请发出以下 SQL 命令,命令下方的列表中所述的一个事件:
=> ALTER DATABASE DEFAULT SET SyslogEvents = 'events-list';
其中 events-list 是以逗号分隔的事件列表,其中包含下面的一项或多项:
-
磁盘空间不足
-
只读文件系统
-
K-Safety 丢失
-
当前容错能力处于临界水平
-
ROS 容器过多
-
节点状态更改
-
恢复故障
-
恢复错误
-
恢复锁定错误
-
恢复投影检索错误
-
刷新错误
-
刷新锁定错误
-
Tuple Mover 错误
-
计时器服务任务错误
-
陈旧检查点
以下示例会为低磁盘空间和恢复故障生成一个 syslog 条目:
=> ALTER DATABASE DEFAULT SET SyslogEvents = 'Low Disk Space, Recovery Failure';
定义要用于报告的 SyslogFacility
Syslog 机制可以对日志记录消息进行多种不同的常规分类,这称为程序模块。通常,所有与身份验证相关的消息都使用 auth
(或 authpriv
)程序模块记录。这些消息预期是安全的并且未经授权的人员无法查看。普通的操作消息使用 daemon
程序模块记录,该程序模块可接收并视情况存储消息。
SyslogFacility 指令可将所有日志记录消息定向到默认设置以外的其他不同程序模块。使用此指令时,所有日志记录操作都将使用指定的程序模块(身份验证(安全)等等)来完成。
要定义 Vertica 使用哪个 SyslogFacility,请发出以下 SQL 命令:
=> ALTER DATABASE DEFAULT SET SyslogFacility = 'Facility_Name';
其中程序模块级别实参 <Facility_Name>
为以下项目之一:
-
auth
-
authpriv(仅限 Linux)
-
cron
-
uucp(UUCP 子系统)
-
daemon
-
ftp(仅限 Linux)
-
lpr(行式打印机子系统)
-
mail(邮件系统)
-
news(网络新闻子系统)
-
user(默认系统)
-
Local0(本地使用 0)
-
local1(本地使用 1)
-
local2(本地使用 2)
-
local3(本地使用 3)
-
local4(本地使用 4)
-
local5(本地使用 5)
-
local6(本地使用 6)
-
local7(本地使用 7)
捕获其他事件类型
要捕获除上面列出的事件之外的事件,请创建一个 syslog 通知程序并允许它使用 SET_DATA_COLLECTOR_NOTIFY_POLICY 捕获所需的事件。
此通知程序类型监视的事件不会记录到
MONITORING_EVENTS 或 vertica.log
。
以下示例创建了一个通知程序,当
数据收集器 (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