ODBC监控对应Zabbix前端中的数据库监控 监控项类型。
ODBC是一种用于访问数据库管理系统(DBMS)的C编程语言中间件 API。ODBC概念由微软开发,后来移植到其他平台。
Zabbix可以 query 通过ODBC支持的任何数据库。为此,Zabbix不直接连接数据库,而是使用ODBC接口和在ODBC中设置的驱动程序。此功能允许更高效地监控不同数据库以实现多种目的 - 例如检查特定数据库队列、使用统计信息等。Zabbix支持unixODBC,这是最常用的开源ODBC API实现之一。
另请参阅ODBC检查的 odbc检查。
建议的unixODBC安装方式是使用Linux操作系统默认的软件包仓库。在大多数主流Linux发行版中,unixODBC默认已包含在软件仓库中。若不可用,可从unixODBC官网获取: http://www.unixodbc.org/download.html.
在Ubuntu/Debian系统上使用apt包管理器安装unixODBC:
在基于RedHat/Fedora的系统上使用dnf包管理器安装unixODBC:
在基于SUSE的系统上使用zypper包管理器安装unixODBC:
编译支持unixODBC的Zabbix时需要unixodbc-dev或unixODBC-devel软件包。
对于需要监控的数据库,应安装相应的unixODBC数据库驱动。unixODBC官网提供了支持的数据库及驱动列表:http://www.unixodbc.org/drivers.html。部分Linux发行版的软件仓库中已包含数据库驱动包。
在Ubuntu/Debian系统上使用apt包管理器安装MySQL数据库驱动:
在基于RedHat/Fedora的系统上使用dnf包管理器安装MySQL数据库驱动:
在基于SUSE的系统上使用zypper包管理器安装MySQL数据库驱动:
zypper in mariadb-connector-odbc
ODBC配置通过编辑odbcinst.ini和 odbc.ini 文件。要验证配置file位置,请输入:
odbcinst.ini 用于列出已安装的ODBC数据库驱动程序:
参数详情:
属性 | 描述 |
---|---|
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需要使用以下flag进行编译:
有关从3-从源代码安装安装Zabbix的更多信息。
配置数据库监控 概述.
所有必填字段均以红色星号标记。
针对数据库监控监控项,您必须输入:
类型 | 在此处选择 数据库监控 |
键值 | 输入以下任一支持的监控项键值: db.odbc.select[<唯一简短描述>,<dsn>,<连接string>] - 该监控项设计用于返回单个值,即SQLquery结果中第一行的第一列。若query返回多列,仅读取第一列;若query返回多行,仅读取第一行。 db.odbc.get[<唯一简短描述>,<dsn>,<连接string>] - 该监控项能以JSON格式返回多行/多列数据,因此可作为主监控项在一次系统调用中收集所有数据,而依赖项监控项可通过JSONPath预处理提取独立值。详见低阶发现中的示例返回格式。此监控项自Zabbix 4.4起支持。 唯一描述将用于在触发器等场景中标识监控项。 虽然 dsn 和connection 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将返回何种信息类型至关重要,以便在此处正确选择。若信息类型设置错误,监控项将变为不受支持状态。 |
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会尝试在长度限制允许范围内将它们连接起来(用|
分隔)。