为了帮助您监控数据库系统,Vertica 捕获并记录如果根本原因未得到解决便会影响数据库性能和功能的重要事件。此部分介绍事件的记录位置、Vertica 记录的事件类型、如何对这些事件作出响应、Vertica 为这些事件提供的信息以及如何配置事件监控。
监控事件
- 1: 事件日志记录机制
- 2: 事件代码
- 3: 事件数据
- 4: 配置事件报告
- 4.1: 为 syslog 配置报告
- 4.2: 为 SNMP 配置报告
- 4.3: 为 SNMP 配置事件陷阱
- 4.4: 验证 SNMP 配置
- 5: 事件报告示例
1 - 事件日志记录机制
Vertica 将事件发布至以下机制:
2 - 事件代码
下表列出了 Vertica 记录到事件系统表的事件代码。
3 - 事件数据
为了帮助您解释并解决触发某一事件的问题,每个事件都提供各种各样的数据,具体视所用的事件日志记录机制而定。
下表介绍事件数据并指出其使用位置。
4 - 配置事件报告
系统为
vertica.log
自动配置事件报告,并将当前事件自动发布至 ACTIVE_EVENTS 系统表。您也可以将 Vertica 配置为将事件发布至 syslog 和 SNMP。
4.1 - 为 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
另请参阅
事件报告示例4.2 - 为 SNMP 配置报告
为 SNMP 配置事件报告包括以下步骤:
-
将 Vertica 配置为启用 SNMP 事件陷阱,如下所述。
-
将 Vertica 管理信息库 (MIB) 文件导入到 SNMP 监控设备中。
利用 Vertica MIB 文件,SNMP 陷阱接收器可以了解其从 Vertica 接收的陷阱,进而使您能够配置其在接收陷阱时采取的操作。
Vertica 支持 SNMP V1 陷阱协议,该协议位于 /opt/vertica/sbin/VERTICA-MIB 中。有关导入 MIB 文件的详细信息,请参阅 SNMP 监控设备文档。
-
配置 SNMP 陷阱接收器处理来自 Vertica 的陷阱。
不同供应商的 SNMP 陷阱接收器配置显著不同。因而,此处介绍的有关配置 SNMP 陷阱接收器处理来自 Vertica 的陷阱的指南为通用指南。
Vertica 陷阱是包含若干信息标识字段的单一通用陷阱。这些字段相当于监控事件中所述的事件数据。但是,字段名称所使用的格式略有不同。在 SNMP 下,字段名称不包含空格。此外,字段名称会预先加上“vert”。例如,事件严重级别变为 vertEventSeverity。
配置陷阱接收器时,请确保使用用于在 Vertica 中配置事件陷阱的相同主机名、端口和社区字符串。
网络管理提供程序示例:
-
IBM Tivoli
-
AdventNet
-
Net-SNMP(开源)
-
Nagios(开源)
-
Open NMS(开源)
4.3 - 为 SNMP 配置事件陷阱
将 Vertica 配置为捕获 SNMP 事件时,默认会捕获以下事件:
-
磁盘空间不足
-
只读文件系统
-
K-Safety 丢失
-
当前容错能力处于临界水平
-
ROS 容器过多
-
节点状态更改
-
恢复故障
-
陈旧检查点
-
CRC 不匹配
要将 Vertica 配置为捕获 SNMP 事件
-
启用 Vertica 以捕获 SNMP 事件。
-
定义 Vertica 发送陷阱的位置。
-
(可选)重新定义 Vertica 捕获哪些 SNMP 事件。
注意
完成上述第 1 步和第 2 步之后,Vertica 会自动捕获默认 SNMP 事件。仅当您希望重新定义捕获哪些 SNMP 事件时,才需执行第 3 步。Vertica 建议捕获Stale Checkpoint
事件,即使您决定减少 Vertica 捕获的 SNMP 事件数也是如此。您所定义的特定设置不会影响已发送到日志的陷阱。所有事件均被捕获到日志中。
要为 SNMP 启用事件陷阱
使用以下 SQL 命令:
=> ALTER DATABASE DEFAULT SET SnmpTrapsEnabled = 1;
要定义 Vertica 发送陷阱的位置
使用以下 SQL 命令,其中 Host_name 和 port 标识 SNMP 所在的计算机,CommunityString 相当于密码,用于控制 Vertica 对服务器的访问:
=> ALTER DATABASE DEFAULT SET SnmpTrapDestinationsList = 'host_name port CommunityString';
例如:
=> ALTER DATABASE DEFAULT SET SnmpTrapDestinationsList = 'localhost 162 public';
也可以指定多个目标,方法是指定以逗号分隔的目标列表:
=> ALTER DATABASE DEFAULT SET SnmpTrapDestinationsList = 'host_name1 port1 CommunityString1, hostname2 port2 CommunityString2';
注意
: 设置多个目标会向列出的所有目标发送任何 SNMP 陷阱通知。要定义 Vertica 捕获的事件
使用以下 SQL 命令,其中 Event_Name
是命令下方列表中的一个事件:
=> ALTER DATABASE DEFAULT SET SnmpTrapEvents = 'Event_Name1, Even_Name2';
-
磁盘空间不足
-
只读文件系统
-
K-Safety 丢失
-
当前容错能力处于临界水平
-
ROS 容器过多
-
节点状态更改
-
恢复故障
-
恢复错误
-
恢复锁定错误
-
恢复投影检索错误
-
刷新错误
-
Tuple Mover 错误
-
陈旧检查点
-
CRC 不匹配
注意
上述值区分大小写。以下示例指定两个事件名称:
=> ALTER DATABASE DEFAULT SET SnmpTrapEvents = 'Low Disk Space, Recovery Failure';
4.4 - 验证 SNMP 配置
要创建一组检查 SNMP 配置的测试事件:
-
将 SNMP 陷阱处理程序设置为捕获 Vertica 事件。
-
使用以下命令测试您的设置:
SELECT SNMP_TRAP_TEST(); SNMP_TRAP_TEST -------------------------- Completed SNMP Trap Test (1 row)
5 - 事件报告示例
Vertica.log
以下示例展示了在 vertica.log 内发布并清除的 Too Many ROS Containers 事件:
08/14/15 15:07:59 thr:nameless:0x45a08940 [INFO] Event Posted: Event Code:4 Event Id:0 Event Severity: Warning [4] PostedTimestamp:
2015-08-14 15:07:59.253729 ExpirationTimestamp: 2015-08-14 15:08:29.253729
EventCodeDescription: Too Many ROS Containers ProblemDescription:
Too many ROS containers exist on this node. DatabaseName: TESTDB
Hostname: fc6-1.example.com
08/14/15 15:08:54 thr:Ageout Events:0x2aaab0015e70 [INFO] Event Cleared:
Event Code:4 Event Id:0 Event Severity: Warning [4] PostedTimestamp:
2015-08-14 15:07:59.253729 ExpirationTimestamp: 2015-08-14 15:08:53.012669
EventCodeDescription: Too Many ROS Containers ProblemDescription:
Too many ROS containers exist on this node. DatabaseName: TESTDB
Hostname: fc6-1.example.com
SNMP
以下示例展示了发布到 SNMP 的 Too Many ROS Containers 事件:
Version: 1, type: TRAPREQUESTEnterprise OID: .1.3.6.1.4.1.31207.2.0.1
Trap agent: 72.0.0.0
Generic trap: ENTERPRISESPECIFIC (6)
Specific trap: 0
.1.3.6.1.4.1.31207.1.1 ---> 4
.1.3.6.1.4.1.31207.1.2 ---> 0
.1.3.6.1.4.1.31207.1.3 ---> 2008-08-14 11:30:26.121292
.1.3.6.1.4.1.31207.1.4 ---> 4
.1.3.6.1.4.1.31207.1.5 ---> 1
.1.3.6.1.4.1.31207.1.6 ---> site01
.1.3.6.1.4.1.31207.1.7 ---> suse10-1
.1.3.6.1.4.1.31207.1.8 ---> Too many ROS containers exist on this node.
.1.3.6.1.4.1.31207.1.9 ---> QATESTDB
.1.3.6.1.4.1.31207.1.10 ---> Too Many ROS Containers
Syslog
以下示例展示了在系统日志内发布并清除的 Too Many ROS Containers 事件:
Aug 14 15:07:59 fc6-1 vertica: Event Posted: Event Code:4 Event Id:0 Event Severity: Warning [4] PostedTimestamp: 2015-08-14 15:07:59.253729 ExpirationTimestamp:
2015-08-14 15:08:29.253729 EventCodeDescription: Too Many ROS Containers ProblemDescription:
Too many ROS containers exist on this node. DatabaseName: TESTDB Hostname: fc6-1.example.com
Aug 14 15:08:54 fc6-1 vertica: Event Cleared: Event Code:4 Event Id:0 Event Severity:
Warning [4] PostedTimestamp: 2015-08-14 15:07:59.253729 ExpirationTimestamp:
2015-08-14 15:08:53.012669 EventCodeDescription: Too Many ROS Containers ProblemDescription:
Too many ROS containers exist on this node. DatabaseName: TESTDB Hostname: fc6-1.example.com