如有错误,敬请谅解!
此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!!
15.1 概述
ODBC监控对应于Zabbix前端中的 数据库监视器 监控项类型。
ODBC是C语言编写的中间件API,用于访问数据库管理系统(DBMS)。ODBC是由Microsoft开发的,后来被移植到了其它平台。
Zabbix可以查询任何支持ODBC的数据库。为此,Zabbix不直接连接数据库,而是使用ODBC接口和在ODBC中设置的驱动程序。该功能允许出于多种目的,更加有效地监视不同的数据库。例如,检测特定的数据库队列、使用统计信息等。Zabbix支持unixODBC,是最常用的开源ODBC API实现之一。
15.2 安装unixODBC
安装unixODBC建议的方式是使用Linux操作系统默认的软件包仓库。在最流行的Linux发行版中,unixODBC默认是包含在软件包仓库中的。如果没有,可以在unixODBC主页获取:unixODBC
使用 yum 软件包管理器在基于RedHat/Fedora的系统上安装unixODBC:
bash
[root@node1 ~]# dnf -y install unixODBC unixODBC-devel
15.3 安装unixODBC驱动
应该为将要被监控的数据库安装unixODBC数据库驱动。unixODBC有一个支持的数据库和驱动程序列表:http://www.unixodbc.org/drivers.html。在一些Linux发行版中,数据库驱动程序已经包含在了软件包仓库中了。使用 yum 软件包管理器,在基于RedHat/Fedora的系统上安装MySQL数据库驱动:
bash
[root@node1 ~]# dnf list | grep connector-odbc
mariadb-connector-odbc.x86_64 3.1.12-1.el8 appstream
[root@node1 ~]# dnf install -y mariadb-connector-odbc
15.4 配置unixODBC
通过编辑 odbcinst.ini 和 odbc.ini 文件来完成ODBC配置。要确认配置文件位置,请键入:
bash
[root@node1 ~]# odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
odbcinst.ini 用于列出已安装的ODBC数据库驱动程序:
bash
[root@node1 ~]# cat /etc/odbcinst.ini
# Example driver definitions
# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbcw.so
Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /usr/lib64/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1
# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
# Driver from the freetds-libs package
# Setup from the unixODBC package
[FreeTDS]
Description = Free Sybase & MS SQL Driver
Driver = /usr/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
Driver64 = /usr/lib64/libtdsodbc.so
Setup64 = /usr/lib64/libtdsS.so
Port = 1433
# Driver from the mariadb-connector-odbc package
# Setup from the unixODBC package
[MariaDB]
Description = ODBC for MariaDB
Driver = /usr/lib/libmaodbc.so
Driver64 = /usr/lib64/libmaodbc.so
FileUsage = 1
odbc.ini 用来定义数据源
bash
[root@node1 ~]# cat /etc/odbc.ini
[test]
Description = MySQL test database
Driver = MariaDB
Server = localhost
User = zabbix
Password = zabbix
Port = 3306
Database = zabbix
参数详细信息:
属性 描 | |
---|---|
test | 数据源名称(DSN) |
Description | 数据源描述. |
Driver | 数据库驱动名称 - 在odbcinst.ini文件中指定 |
Server | 数据库服务器的IP/DNS |
User | 用于数据库连接的用户名 |
Password | 数据库用户的密码 |
Port | 数据库连接端口 |
Database | 数据库名称 |
要验证ODBC连接是否正常运行,应测试到数据库的连接。可以使用 isql 程序(包含在unixODBC软件包中):
bash
[root@node1 ~]# isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> quit
15.5 配置Item
添加一个统计hosts表条数的Item
image-20220131114403548
所有标有红色星号的为必填字段。
对数据库监控,必须输入的监控项:
Type | 这里选择 数据库监控器 |
---|---|
Key | 输入 db.odbc.select[unique_description,data_source_name] 这里唯一的描述将用于识别触发器中的监控项等 数据源名称 (DSN)必须按照odbc.ini中指定的方式设置。 |
User name | 输入数据库用户名 (如果用户在odbc.ini中已指定,此项可选填) |
Password | 输入数据用户密码 (如果用户在odbc.ini中已指定,此项可选填) |
SQL query | 输入SQL查询 |
Type of information | 了解查询返回的信息类型很重要, 以便在此处选择正确的类型。若使用不正确的 信息类型 监控项将不受支持。 |
注意事项
- Zabbix不限制查询执行时间。 用户可以选择在合理时间内执行的查询。
- Zabbix server的 Timeout 参数值也用作于ODBC登陆超时时间 (请注意,根据ODBC驱动,登录超时设置可能会被忽略)。
- 查询只能返回一个值。
- 如果查询返回多个列,则只读取第一列。
- 如果查询返回多行,则只读取第一行。
- SQL命令必须以
select
开头。 - SQL命令不能包含任何换行符。
- 另请参阅ODBC检查的 已知问题
错误信息
ODBC错误消息被构造成字段,以提供详细信息。例如:
none
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将尝试把它们连接起来(用“|”分隔)。
查看数据
如有错误,请联系作者删除
并恳请同行朋友予以斧正,万分感谢!