14 ODBC监控

概述

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

ODBC是C语言编写的中间件API,用于访问数据库管理系统(DBMS)。 ODBC是由Microsoft开发的,后来被移植到了其它平台。

Zabbix可以查询任何支持ODBC的数据库。实现这个目标,Zabbix不直接连接数据库,而是使用ODBC接口并在ODBC中设置的驱动程序。该功能允许出于多种目的,更加有效地监视不同的数据库。例如,检测特定的数据库队列、使用统计信息等。Zabbix支持unixODBC,是最常用的开源ODBC API实现之一。

更多信息请查看 ODBC检查的 已知问题

安装 unixODBC

安装unixODBC的建议方法是使用Linux操作系统默认包库,在主流的Linux发行版中,默认情况下unixODBC包含在镜像库中。如果找不到,可以在 unixODBC 主页上获取:http://www.unixodbc.org/download.html.

在RedHat/Fedora系统上使用yum包管理器安装unixODBC:

  1. shell> dnf -y install unixODBC unixODBC-devel

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

  1. # zypper in unixODBC-devel

需要 unixODBC-devel 包来编译支持 unixODBC 的 Zabbix。

安装 unixODBC 驱动程序

应该为将被监控的数据库安装一个 unixODBC 数据库驱动程序。 unixODBC 有一个支持的数据库和驱动程序列表:http://www.unixodbc.org/drivers.html。 在某些 Linux 发行版中,数据库驱动程序包含在软件包存储库中。在 RedHat/Fedora 的系统上使用 yum 包管理器安装 MySQL 数据库驱动程序:

shell> dnf install mysql-connector-odbc

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

zypper in MyODBC-unixODBC

配置 unixODBC

ODBC配置是通过编辑 odbcinst.iniodbc.ini 文件完成的,要验证配置文件的位置,输入:

  1. shell> odbcinst -j

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

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

参数详情:

属性描述
mysql数据库驱动名
Description数据库驱动描述
Driver数据库驱动程序库文件位置

odbc.ini 用于自定义数据源:

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

参数详情:

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

要验证ODBC连接是否正常工作,应该测试到数据库的连接,这可以通过isql实用程序(包含在unixODBC包中)完成:

  1. shell> isql test
  2. +---------------------------------------+
  3. | Connected! |
  4. | |
  5. | sql-statement |
  6. | help [tablename] |
  7. | quit |
  8. | |
  9. +---------------------------------------+
  10. SQL>

编译支持ODBC的Zabbix

要启用ODBC支持,Zabbix应该使用以下标志进行编译:

  1. --with-unixodbc[=ARG] use odbc driver against unixODBC package

源代码中了解有关Zabbix安装的更多信息。

Zabbix 前端的监控项配置

配置数据库监控监控项

14 ODBC监控 - 图1

所有必填字段都标有红色星号

特别是对于数据库监控项,您必须输入:

类型在此处选择数据库监控
键值输入两个受支持的监控项键之一:
db.odbc.select[<unique short description>,<dsn>,<connection string>] - 此监控项旨在返回一个值,即SQL查询结果第一行的第一列如果查询返回多列,则仅读取第一列如果查询返回多行,则仅读取第一行
db.odbc.get[<unique short description>,<dsn>,<connection string>] - 此项为能够以 JSON 格式返回多行/列。因此,它可以用作在一个系统调用中收集所有数据的主项,而 JSONPath 预处理可以用于从属项中以提取单个值有关详细信息,请参阅底层自动发现中使用的返回格式的 示例。从 Zabbix 4.4 开始支持此监控项
唯一的描述将用于识别触发器等中的该监控项
虽然 dsnconnection string 是可选参数,但至少应该存在其中一个如果同时定义了数据源名称 (DSN) 和连接字符串,则 DSN 将被忽略
如果使用数据源名称,则必须按照 odbc.ini 中的指定设置
连接字符串可能包含驱动程序 - 特定参数

示例(MySQL ODBC 驱动程序 5 的连接):
=> db.odbc.get[MySQL example,,”Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306”]
用户名输入数据库用户名
如果在odbc.ini中指定了用户,则此参数是可选的
如果使用连接字符串,并且用户名字段不为空,则附加到连接字符串为 UID=<user>
密码输入数据库用户密码
如果在odbc.ini中指定了密码,则此参数是可选的
如果使用连接字符串,并且Password字段不为空,则附加到连接中字符串为PWD=<密码>
SQL 查询输入 SQL 查询
请注意,对于 db.odbc.select[] 监控项,查询必须只返回一个值
信息类型了解查询将返回什么类型的信息很重要,这样才能在此处正确选择信息类型,如果信息类型不正确,监控项将不受支持

注意事项

  • Zabbix不限制查询执行时间。 用户可以选择在合理时间内执行的查询。
  • Zabbix server的 Timeout参数值也用作于ODBC登陆超时时间(请注意,根据ODBC驱动,登录超时设置可能会被忽略)。
  • 查询只能返回一个值。
  • 如果查询返回多个列,则只读取第一列。
  • 如果查询返回多行,则只读取第一行。
  • SQL命令必须以select开头。
  • SQL命令不能包含任何换行符。
  • 另请参阅ODBC检查的 已知问题

错误信息

ODBC错误消息被构造成字段,以提供详细信息.例如:

  1. Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
  2. └───────────┬───────────┘ └────┬────┘ └──┬──┘└┬┘└─────────────────────────────┬─────────────────────────────────────┘
  3. └─ Native error code └─ Native error message
  4. └─ SQLState
  5. └─ Zabbix message └─ ODBC return code

请注意,错误消息长度限制为2048字节,因此信息可以被截断。如果有多个ODBC诊断记录,只要长度允许,Zabbix将尝试把它们连接起来(用|分隔)。