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:
shell> yum -y install unixODBC unixODBC-devel
使用zypper包管理器在基于SUSE的系统上安装unixODBC:
# zypper in unixODBC-devel
编译Zabbix时需要unixODBC-devel包以支持unixODBC
安装 unixODBC 驱动程序
应该为将要被监控的数据库安装一个unixODBC数据库驱动程序。 unixODBC有一个支持的数据库和驱动程序列表:http://www.unixodbc.org/drivers.html。 在一些Linux发行版中,数据库驱动程序包含在镜像库中。 在RedHat/Fedora系统上使用yum包管理器安装MySQL数据库驱动程序:
shell> yum install mysql-connector-odbc
使用zypper包管理器在SUSE系统上安装MySQL数据库驱动程序:
zypper in MyODBC-unixODBC
配置 unixODBC
ODBC配置是通过编辑 odbcinstn.ini 和 odbcst.ini 文件完成的,要验证配置文件的位置,输入:
shell> odbcinst
odbcinstst.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包中)完成:
shell> isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
编译支持ODBC的Zabbix
要启用ODBC支持,Zabbix应该使用以下标志进行编译:
--with-unixodbc[=ARG] use odbc driver against unixODBC package
从源代码中了解有关Zabbix安装的更多信息。
Zabbix 前端的配置监控项
配置数据库监控监控项。
所有必填字段都标有红色星号
特别是对于数据库监控项,您必须输入:
Type | 在此处选择数据库监控 |
Key | 输入两个受支持的监控项键之一: db.odbc.select[<unique short description>,<dsn>,<connection string>] - 此监控项旨在返回一个值,即SQL查询结果第一行的第一列如果查询返回多列,则仅读取第一列如果查询返回多行,则仅读取第一行 db.odbc.get[<unique short description>,<dsn>,<connection string>] - 此项为能够以 JSON 格式返回多行/列。因此,它可以用作在一个系统调用中收集所有数据的主项,而 JSONPath 预处理可以用于从属项中以提取单个值有关详细信息,请参阅低级发现中使用的返回格式的 示例。从 Zabbix 4.4 开始支持此项 唯一的描述将用于在触发器等中标识该项 虽然 dsn 和 connection 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> |
Password | 输入数据库用户密码 如果在odbc.ini中指定了密码,则此参数是可选的 如果使用连接字符串,并且Password字段不为空,则附加到连接中字符串为 PWD=<密码> |
SQL 查询 | 输入 SQL 查询 请注意,对于 db.odbc.select[] 项,查询必须只返回一个值 |
信息类型 | 了解查询将返回什么类型的信息很重要,这样才能在此处正确选择信息类型,如果信息类型不正确,监控项将不受支持 |
注意事项
- Zabbix不限制查询执行时间。 用户可以选择在合理时间内执行的查询。
- Zabbix server的 Timeout参数值也用作于ODBC登陆超时时间(请注意,根据ODBC驱动,登录超时设置可能会被忽略)。
- 查询只能返回一个值。
- 如果查询返回多个列,则只读取第一列。
- 如果查询返回多行,则只读取第一行。
- SQL命令必须以
select
开头。 - SQL命令不能包含任何换行符。
- 另请参阅ODBC检查的 已知问题
错误信息
ODBC错误消息被构造成字段,以提供详细信息.例如:
Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
└───────────┬───────────┘ └────┬────┘ └──┬──┘└┬┘└─────────────────────────────┬─────────────────────────────────────┘
│ │ │ └─ Native error code └─ Native error message
│ │ └─ SQLState
└─ Zabbix message └─ ODBC return code
请注意,错误消息长度限制为2048字节,因此信息可以被截断。如果有多个ODBC诊断记录,只要长度允许,Zabbix将尝试把它们连接起来(用|
分隔)。