15 ODBC监控

概述

ODBC监控对应于Zabbix Web管理端中的数据库监控器监控项类型。

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

Zabbix可以查询ODBC支持的任何数据库。为了实现监控,Zabbix不直接连接到数据库,而是使用ODBC中设置的ODBC接口和驱动。该功能允许为多个目的更加有效地监控不同的数据库 - 例如,监控特定的数据库队列、使用统计信息等。 Zabbix支持unixODBC,它是最常用的开源ODBC API实现之一。

安装unixODBC

安装unixODBC的建议方法是使用Linux操作系统的默认软件包存储库。在流行的Linux发行版中,unixODBC默认包含在软件包存储库中。如果不可用,可以在unixODBC主页获取:http://www.unixodbc.org/download.html.

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

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

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

  1. # zypper in unixODBC-devel

unixODBC-devel包需要使用unixODBC support来编译Zabbix。

安装unixODBC驱动

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

  1. shell> yum install mysql-connector-odbc

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

  1. zypper in MyODBC-unixODBC

配置unixODBC

通过编辑odbcinst.ini和odbc.ini文件来完成ODBC配置。要确认配置文件位置,请键入:

  1. shell> odbcinst -j

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

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

参数详细信息:

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

odbc.ini用于定义数据源:

  1. [test]
  2. Description = MySQL test database
  3. Driver = mysql
  4. Server = 127.0.0.1
  5. User = root
  6. Password =
  7. Port = 3306
  8. 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 support编译Zabbix

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

  1. --with-unixodbc[=ARG] 使用odbc驱动程序与unixODBC

源代码查看Zabbix安装的更多信息。

在Zabbix Web前端配置监控项

配置数据库的 监控项:

15 ODBC监控 - 图1

专用于数据库监控项的必要输入:

Type选择数据库监控器。
Key输入db.odbc.select [uniquedescription,data_source_name]。这里唯一的描述将用于识别触发器中的监控项等。必须按照odbc.ini中的指定设置数据源名称(DSN)。
_User name输入数据库用户名(如果用户在odbc.ini中指定,则可选)
Password输入数据库用户密码(如果在odbc.ini中指定密码,则为可选项)
SQL query 输入SQL查询
Type of information了解查询将返回什么类型的信息很重要,以便在此处正确选择。 使用不正确的类型的信息监控项将不受支持。

重要信息

  • 该查询的执行时间不能超过服务器上的Timeout参数。从Zabbix 2.0.8开始,Timeout参数值也用作ODBC登录超时(请注意,根据ODBC驱动程序,登录超时设置可能会被忽略)。

  • 该查询只能返回一个值。

  • 如果查询返回多个列,则只读取第一列。

  • 如果查询返回多行,则只读取第一行。

  • SQL命令必须以select开始。

  • SQL命令不能包含任何换行符。

  • 另请参考ODBC的已知问题

错误信息

从Zabbix 2.0.8开始,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 `- error message. `- Record separator
  4. | | `-SQLState
  5. `- Zabbix message `- ODBC return code

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