14 ODBC 监控

概述

ODBC监控对应Zabbix前端中的数据库监控 监控项类型。

ODBC是一种用于访问数据库管理系统(DBMS)的C编程语言中间件 API。ODBC概念由微软开发,后来移植到其他平台。

Zabbix可以 query 通过ODBC支持的任何数据库。为此,Zabbix不直接连接数据库,而是使用ODBC接口和在ODBC中设置的驱动程序。此功能允许更高效地监控不同数据库以实现多种目的 - 例如检查特定数据库队列、使用统计信息等。Zabbix支持unixODBC,这是最常用的开源ODBC API实现之一。

另请参阅ODBC检查的 odbc检查

安装 unixODBC

建议的unixODBC安装方式是使用Linux操作系统默认的软件包仓库。在大多数主流Linux发行版中,unixODBC默认已包含在软件仓库中。若不可用,可从unixODBC官网获取: http://www.unixodbc.org/download.html.

在Ubuntu/Debian系统上使用apt包管理器安装unixODBC:

apt install unixodbc unixodbc-dev

在基于RedHat/Fedora的系统上使用dnf包管理器安装unixODBC:

dnf install unixODBC unixODBC-devel

在基于SUSE的系统上使用zypper包管理器安装unixODBC:

zypper in unixODBC-devel

编译支持unixODBC的Zabbix时需要unixodbc-dev或unixODBC-devel软件包。

安装 unixODBC 驱动

对于需要监控的数据库,应安装相应的unixODBC数据库驱动。unixODBC官网提供了支持的数据库及驱动列表:http://www.unixodbc.org/drivers.html。部分Linux发行版的软件仓库中已包含数据库驱动包。

在Ubuntu/Debian系统上使用apt包管理器安装MySQL数据库驱动:

apt install odbc-mariadb

在基于RedHat/Fedora的系统上使用dnf包管理器安装MySQL数据库驱动:

dnf install mariadb-connector-odbc

在基于SUSE的系统上使用zypper包管理器安装MySQL数据库驱动:

zypper in mariadb-connector-odbc

配置 unixODBC

ODBC配置通过编辑odbcinst.iniodbc.ini 文件。要验证配置file位置,请输入:

odbcinst -j

odbcinst.ini 用于列出已安装的ODBC数据库驱动程序:

[mysql]
       Description = ODBC for MySQL
       Driver      = /usr/lib/libmyodbc5.so

参数详情:

属性 描述
mysql 数据库驱动名称.
描述 数据库驱动描述.
Driver 数据库驱动库路径。

odbc.ini 用于定义数据源:

[test]
       Description = MySQL test database
       Driver      = mysql
       Server      = 127.0.0.1
       User        = root
       Password    =
       Port        = 3306
       Database    = zabbix

参数详情:

属性 描述
test 数据源名称(DSN).
描述 数据源描述.
Driver 数据库驱动名称 - 如odbcinst.ini中所指定
Server 数据库服务器IP/DNS.
User 用于连接的数据库用户。
Password 数据库用户密码.
Port 数据库连接端口.
Database 数据库名称.

要验证ODBC连接是否成功工作,需建立到 数据库应进行测试。这可以通过isql实用工具完成 (包含在unixODBC包中):

isql test
       +---------------------------------------+
       | Connected!                            |
       |                                       |
       | sql-statement                         |
       | help [tablename]                      |
       | quit                                  |
       |                                       |
       +---------------------------------------+

编译支持 ODBC 的 Zabbix

要启用ODBC支持,Zabbix需要使用以下flag进行编译:

--with-unixodbc[=ARG] # Use ODBC driver against unixODBC package.

有关从3-从源代码安装安装Zabbix的更多信息。

Zabbix前端中的监控项配置

配置数据库监控 概述.

所有必填字段均以红色星号标记。

针对数据库监控监控项,您必须输入:

类型 在此处选择 数据库监控
键值 输入以下任一支持的监控项键值:
db.odbc.select[<唯一简短描述>,<dsn>,<连接string>] - 该监控项设计用于返回单个值,即SQLquery结果中第一行的第一列。若query返回多列,仅读取第一列;若query返回多行,仅读取第一行。
db.odbc.get[<唯一简短描述>,<dsn>,<连接string>] - 该监控项能以JSON格式返回多行/多列数据,因此可作为主监控项在一次系统调用中收集所有数据,而依赖项监控项可通过JSONPath预处理提取独立值。详见低阶发现中的示例返回格式。此监控项自Zabbix 4.4起支持。
唯一描述将用于在触发器等场景中标识监控项。
虽然dsnconnection string是可选参数,但至少需指定其一。若同时定义数据源名称(DSN)和连接string,DSN将被忽略。
数据源名称(如使用)必须按odbc.ini中的规范设置。
连接string可包含驱动程序特定参数。
db.odbc.discovery[<唯一简短描述>,<dsn>,<连接string>] - 该监控项返回low-level discovery数据。

示例(MySQL ODBC驱动5连接):
=> db.odbc.get[MySQL示例,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
用户名 输入数据库用户名
如果在odbc.ini中指定了用户,则该参数可选。
若使用连接string且用户名字段非空时,会以UID=<user>格式附加到连接string中
Password 输入数据库用户密码
如果在odbc.ini中指定了密码,则该参数可选。
如果使用连接string且Password字段非空,该密码会以PWD=<password>格式附加到连接string中。
从Zabbix 6.0.34开始,此字段支持特殊字符。

在Zabbix 6.0.34之前,若密码包含分号需用花括号包裹,例如{P?;)*word}。6.0.34版本后仍支持此包裹方式但不再强制要求。密码会以UID=<username>;PWD={P?;)*word}格式附加在用户名后构成连接string。要测试生成的string,可run以下命令:
isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*word}'
SQL query 输入SQL query.
注意使用db.odbc.select[] 监控项时,query必须仅返回一个值.
信息类型 了解query将返回何种信息类型至关重要,以便在此处正确选择。若信息类型设置错误,监控项将变为不受支持状态。

重要说明

  • 如果server 或 proxy配置中未启动任何odbc轮询器进程,数据库监控监控项将变为不受支持状态。要激活ODBC轮询器,请在Zabbix server配置file中设置StartODBCPollers参数,或对于由proxy执行的检查,在Zabbix proxy配置file中设置。
  • Zabbix不限制query的执行时间。用户需自行选择能在合理时间内执行的queries。
  • 来自Zabbix server的Timeout参数值被用作ODBC login超时(注意:根据ODBC驱动程序的不同,login超时设置可能会被忽略)。
  • SQL命令必须像任何带有select ...的query一样返回结果集。query的语法将取决于处理它们的RDBMS。对存储过程的请求语法必须以call关键字开头。

错误消息

ODBC错误消息被结构化为多个字段以提供详细信息。 例如,错误消息可能如下所示:

Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
  • "Cannot execute ODBC query" - Zabbix消息
  • "[SQL_ERROR]" - ODBC返回码
  • "[42601]" - SQL状态
  • "[7]" - 原生错误码
  • "[ERROR: syntax error at or near ";"; Error while executing the query]" - 原生错误消息

请注意错误消息长度限制为2048字节,因此 消息可能会被截断。如果存在多个ODBC诊断记录, Zabbix会尝试在长度限制允许范围内将它们连接起来(用|分隔)。