首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Zabbix+信创数据库监控实践

Zabbix+信创数据库监控实践

作者头像
Zabbix
发布2026-03-05 12:35:02
发布2026-03-05 12:35:02
270
举报
文章被收录于专栏:Zabbix中国官方Zabbix中国官方

作者简介

王军,Zabbix认证培训师

本文主要介绍了Zabbix监控关系型数据库的三种方式:ODBC、Agent 2和UserParameter,并深入实战演示如何在Zabbix中监控达梦、OpenGauss、OceanBase、巨杉等国产信创数据库。最后,总结了数据库监控过程中常见的错误及解决方案,助您构建稳定高效的数据库监控体系

目录

一、Zabbix对数据库的监控方法

  • 使用Agent 2监控数据库
  • 使用ODBC协议监控数据库
  • 自定义监控项

二、Zabbix信创数据库监控实战

  • OpenGauss ODBC监控实战
  • OceanBase ODBC监控实战
  • DM8 ODBC监控实战
  • 巨杉数据库监控实战

三、Zabbix数据库监控典型问题

一、Zabbix对数据库的监控方法

Zabbix对数据库的监控方式:

  • Zabbix agent 2 database plugin
  • 通过Zabbix Server/Proxy 执行 ODBC 检查
  • UserParameter自定义监控项

Zabbix也提供了开箱即用的官方模板:

开箱即用的模板监控方式

1.使用Agent 2监控数据库

Agent 2支持的数据库监控插件

Agent 2开箱即用的模板

1.1 Agent 2 数据库插件工作流

Agent 2插件工作流

1.2 Agent 2 数据库模块使用

Agent 2监控数据库

1.3 Agent 2 自定义查询SQL

代码语言:javascript
复制
mssql.custom.query[URI,<user>,<password>,queryName,<args...>]:
mysql.custom.query[connString,<user>,<password>,queryName,<args...>]:
oracle.custom.query[connString,<user>,<password>, <service>,queryName,<args...>]:
pgsql.custom.query[URI,<username>,<password>,queryName,<args...>]:

返回自定义查询结果,JSON格式 参数:

  • connString - URI 或 会话名称
  • user, password – 登录认证信息
  • queryName – 自定义查询名称, 匹配SQL文件名称
  • args – 查询参数

1.4 Agent 2 支持本地和远程数据库监控

Zabbix agent 2 支持本地或远程数据库监控:

  • 使用IP地址,DNS名称或者sockets来监控本地数据库
  • 使用IP地址或DNS名称来监控远程数据库

数据库连接信息

Agent 2连接数据库方式

2.使用ODBC协议监控数据库

通过ODBC方式监控数据库:

  • ODBC 全称为开放式数据库互连(Open Database Connectivity)
  • 它是一种用于访问数据库管理系统的应用程序编程接口(API)
  • 该接口独立于任何特定的数据库管理系统(DBMS)或操作系统

ODBC连接数据库

2.1 ODBC采集轮询器

Zabbix 可通过 ODBC 查询所有受支持的数据库:

  • 需安装对应数据库的 unixODBC 驱动以实现监控
  • ODBC 驱动通常由数据库厂商直接提供

ODBC 监控由专用轮询进程(ODBC poller)执行:

  • 启用 ODBC 检查时至少需启动一个轮询进程
  • 支持通过 Zabbix server 或 proxy 执行检查
  • 该轮询器属于同步数据收集器,实际部署可能需要启动多个进程
代码语言:javascript
复制
## Option: StartODBCPollers
#       Number of pre-forked ODBC poller instances.
#
# Mandatory: no
# Range: 0-1000
StartODBCPollers=5

2.2 ODBC INI配置

ODBC 驱动及连接配置可通过两个 .ini 文件定义: odbcinst.ini:列出已安装的 ODBC 驱动并定义驱动名称 odbc.ini:基于驱动名称配置数据源 若已在监控项键值中指定连接参数,则可跳过 .ini 文件的配置

ODBC连接配置

2.3 ODBC 监控项

ODBC 监控通过数据库监控项(database monitor item)实现:

  • 监控项键值格式 db.odbc.*[parameters]
  • 不用配置接口
  • 用户名和密码
  • SQL 查询语句
  • 其他字段和常规监控项一样

数据库监控项

数据库监控项有自己的超时(timeout)设置:

  • 用于连接超时设置
  • 查询执行时间不受Zabbix超时设置限制

数据库监控超时设置

2.4 ODBC 监控项键值

当前可用的数据库监控项键值共有两种:

代码语言:javascript
复制
db.odbc.select [<unique short description>,<dsn>,<connection string>]

'Select' 返回单个值 – 返回查询结果的第一行第一列

用于返回单一结果的复杂SQL查询场景

代码语言:javascript
复制
db.odbc.get [<unique short description>,<dsn>,<connection string>]

'Get’ 以json数组格式返回查询结果

用于一次性采集多项指标数据,并作为主监控项使用

2.5 ODBC连接

可以选择配置数据源名称 (DSN) 或 连接串:

  • 两者选择一个即可
  • 连接串优先级高于DSN
代码语言:javascript
复制
db.odbc.get[sales,SalesDB]

使用DSN连接

代码语言:javascript
复制
db.odbc.get[sales,,"Driver=/usr/lib/libmyodbc5.so;Server=salesdb.example.com;Database=sales"]

使用连接串连接

3.自定义监控项

在Zabbix中可以用”UserParameter” 执行自定义检查:

  • Shell 命令
  • 自定义脚本

以Agent运行用户来执行所有定义的命令:

  • 该用户需要足够的权限来执行命令或脚本
  • 命令返回标准的输入输出结果

Zabbix Agent 超时(timeout)设置也会影响“UserParameter”:

  • 执行时间太长的脚本会影响Agent性能
  • C 版本Agent 主动模式是单进程

3.1 USER PARAMETERS配置

UserParameter 定义的是Item Key, 后面是要执行的命令或脚本

代码语言:javascript
复制
UserParameter=key,command
### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#
UserParameter=mykey,echo 1

需要在每个Zabbix Agent上定义需要使用的”UserParameter” :

  • 直接在配置文件 zabbix_agentd.conf 中定义
  • 也可以在 zabbix_agentd.d zabbix_agent2.d 扩展目录中创建 *.conf 文件中定义
代码语言:javascript
复制
### Option: Include
#       You may include individual files or# all files in a directory 
Include=/etc/zabbix/zabbix_agentd.d/*.conf
代码语言:javascript
复制
### Option: Include
#       You may include individual files or# all files in a directory 
Include=/etc/zabbix/zabbix_agent2.d/*.conf

定义或修改配置文件后,通常需要重新加载配置文件,例如:

代码语言:javascript
复制
#重启Agent重新加载配置
systemctl restart zabbix-agent
#执行热加载
zabbix_agentd -R userparameter_reload

3.2 定义不同的USER PARAMETERS

"UserParameter" 支持"简单"和"灵活" 模式:

  • "简单" 模式不支持传参
代码语言:javascript
复制
UserParameter=mysql.qps,mysqladmin status | cut -f9 -d":"

引用简单自定义监控项

  • "灵活"模式支持动态传入参数
代码语言:javascript
复制
UserParameter=mysql.status[*],mysqladmin status --user=$1 --password=$2

引用动态传参自定义监控项

二、Zabbix信创数据库监控实战

信创数据库监控实战

信创数据库类型

1.1 OpenGauss ODBC监控实战

组件

版本

操作系统

Kylin Linux Advanced Server V10

UnixODBC

2.3.7

数据库版本

Vastbase G100 V2.2 (Build 10) Release) compiled at 2023-10-20 10:12:18 commit 15020 last mr on aarch64-unknown-linux-gnu

ODBC 驱动包

#X86和ARM通用 GaussDB-Kernel-V500R002C10-EULER-64bit-Odbc.tar.gz

1.1.1 安装ODBC驱动

代码语言:javascript
复制
1. 自定义openGauss驱动目录
# mkdir /usr/local/lib/openGauss
2. 解压openGauss ODBC Drivers
#解压后有两个目录odbc/lib,lib,将这两个目录中的文件拷贝到驱动目录
# tar -zxf GaussDB-Kernel-V500R002C10-EULER-64bit-Odbc.tar.gz
# cp odbc/lib/* /usr/local/lib/openGauss
# cp lib/* /usr/local/lib/openGauss
3. 创建动态链接库
# cat /etc/ld.so.conf.d/openGauss.conf
/usr/local/lib/openGauss
# ldconfig

1.1.2 配置驱动信息

代码语言:javascript
复制
#cat /etc/odbcinst.ini
[openGauss]
Description=openGauss ODBC driver
Driver64=/usr/local/lib/openGauss/psqlodbcw.so
Setup=/usr/local/lib/openGauss/psqlodbcw.so

1.1.3 创建DSN连接实例

代码语言:javascript
复制
在proxy或server中,通过DSN方式创建数据库连接
# cat /etc/odbc.ini
[NGOM_manage_dev_10.5.97.187]
Description=ODBC for vastbast
Driver=openGauss
Servername=10.5.97.187
Database=<DBNAME>
Username=<DBUSER>
Password=<DBPASSWORD>
Port=5432

1.1.4 测试DSN连接

测试OpenGauss实例连接

1.1.5 创建数据库监控项

数据库监控项

1.1.6 测试数据库监控项

返回SQL执行结果

1.2 OceanBase ODBC监控实战

组件

版本

操作系统

Kylin Linux Advanced Server V10

UnixODBC

2.3.7

数据库版本

OceanBase 3.2.3.3 (r110040022023110614-0509e7fc6b99553ce919e57b0f4752178b5783b8) (Built Nov 6 2023 14:57:39)

ODBC 驱动包(X86)

libobclient-2.1.2-20211201104607.el7.alios7.x86_64.rpm, ob-connector-odbc-2.0.3-20220315112052.el7.alios7.x86_64.rpm,ob-connector-odbc-2.0.4-20220427191618.el7.alios7.x86_64.rpm,ob-unixodbc-2.0.3-20220315113219.el7.alios7.x86_64.rpm

ODBC 驱动包(ARM)

ob-connector-odbc-2.0.9-32024041714.el7.aarch64.rpm,libobclient-2.2.6-12024040914.el7.aarch64.rpm

1.2.1 安装ODBC驱动

代码语言:javascript
复制
# rpm -ivh libobclient-2.2.6-12024040914.el7.aarch64.rpm
# rpm -ivh ob-connector-odbc-2.0.9-32024041714.el7.aarch64.rpm
# rpm -ivh ob-unixodbc-2.0.8.3-20231114143843.el7.alios7.aarch64.rpm

1.2.2 配置环境变量

代码语言:javascript
复制
# vi /etc/profile
# 再文件末尾追加 #add oceabasedb odbc
export ODBCSYSINI=/etc
export ODBCINI=/etc/odbc.ini
export LD_LIBRARY_PATH=/u01/unix-odbc/lib:/u01/obclient/lib:/u01/ob-connector-odbc/lib64/mariadb:$LD_LIBRARY_PATH 

# source /etc/profile

1.2.3 创建DSN连接实例

代码语言:javascript
复制
在proxy或server中,通过DSN方式创建数据库连接
# cat /etc/odbc.ini
#在文件中追加
[CAPM_ZABBIX_MONITOR_10.5.97.86]
Driver=Oceanbase
Description=OracleODBC 5 Driver DSN
SERVER=10.5.97.86
PORT=2883
USER=<DBUSER>
Password=<DBPASSWORD>
Database=<DBNAME>
charset=UTF8

1.2.4 测试DSN连接

测试OceanBase实例连接

1.2.5 创建数据库监控

数据库监控项

1.2.6 测试数据库监控项

返回SQL执行结果

1.3 DM8 ODBC监控实战

组件

版本

操作系统

Kylin Linux Advanced Server V10

UnixODBC

2.3.7

数据库版本

DM Database Server 64 V8 DB Version: 0x7000c

ODBC 驱动文件

/usr/local/lib/dm8/libdodbc.so

1.3.1 创建动态链接库

代码语言:javascript
复制
# cat /etc/ld.so.conf.d/dm8.conf
/usr/local/lib/dm8
# ldconfig

1.3.2 配置驱动信息

代码语言:javascript
复制
#cat /etc/odbcinst.ini
# 在文件末尾追加
[DM8]
Description=ODBC driver for DM8
Driver=/usr/local/lib/dm8/libdodbc.so

1.3.3 创建DSN连接实例

代码语言:javascript
复制
# cat /etc/odbc.ini
#在文件中追加
[NGOM_dm8_10.5.98.43]
Description=DM ODBC DSND
Driver=DM8
SERVER=10.5.98.43
UID=<DBUSER>
PWD=<DBPASSWORD>
TCP_PORT=5236

1.3.4 测试DSN连接

代码语言:javascript
复制
# isql NGOM_dm8_10.5.98.43
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select * from v$version;
+---------------------------------------------------------------------------------+
| BANNER                                                                          |
+---------------------------------------------------------------------------------+
| DM Database Server 64 V8              
                                         |
| DB Version: 0x7000c                                                             |
+---------------------------------------------------------------------------------+
SQLRowCount returns 2
2 rows fetched
SQL>

1.3.5 创建数据库监控项

数据库监控项

1.3.6 测试数据库监控项

返回SQL执行结果

1.4 巨杉数据库监控实战

组件

版本

操作系统

UnionTech OS Server 20

数据库版本

SequoiaDB shell version:3.4.11

1.4.1 创建自定义脚本

代码语言:javascript
复制
# cat health.js
var db = new (hostname,port,username,password);
db.exec(“select NodeName,IsPrimary,ServiceStatus,Status,DataStatus,ErrNum,FTStatus,DiffLSNWithPrimary,SyncControl FROM $SNAPSHOT_HEALTH”)

# cat sequioadbexec.sh
……
connstring=“hostname=$hostname;port=$port;username=$username;password=$password”
result=$(/opt/sequoiadb/bin/sdb -e $connstring -f health.js)
……

1.4.2 创建自定义监控项

代码语言:javascript
复制
# cat /etc/zabbix/zabbix_agentd.d/sequoiadb.conf
UserParameter=sequoiadb.getraw[*],sh /etc/zabbix/scripts/sequioadbexec.sh $1 $2 $3 $4 $5

1.4.3 创建数据库监控项

1.4.4 监控效果

Zabbix数据库监控典型问题

Q 1

ODBC驱动版本兼容性问题

A

UnixODBC 2.3.9与Oracle 11g驱动器版本不兼容,升级Oracle驱动器版本到Oracle Database Client 18c Oracle Database Client 18c supports "Oracle Database Server is version 11.2.0.4 or later.".

UnixODBC 2.3.1与Oracle 12C驱动器版本不兼容,导致中文乱码。

ODBC Driver兼容性

中文乱码

Q 2

ODBC驱动库文件权限问题

A

驱动库文件安装在非默认或标准的系统路径中,Zabbix Proxy服务运行用户,对数据库驱动文件没有读权限。 可以通过sudo命令切换用户执行isql命令检查是否正常连接。

代码语言:javascript
复制
# sudo -H -u monitor bash -c 'isql -vvvv DNS USER PASS
> select version(); 

Zabbix前端连接异常

命令连接异常

Q 3

Zabbix查询结果中文字符乱码

A

isql命令行执行结果正常,Zabbix数据库采集中文乱码,需要设置环境

代码语言:javascript
复制
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
#如果是通过systemd启动zabbix server/proxy,还需要将以上环境变量加入
# cat /usr/lib/systemd/system/zabbix_proxy.service
[Unit]
Description=Zabbix proxy service
……
EnvironmentFile=-/etc/sysconfig/zabbix-proxy
# cat /etc/sysconfig/zabbix-proxy
# 在文件末尾追加
NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"

命令行执行正常

前端查询结果中文乱码

Q 4

UserParameter传参存在特殊字符

A

默认UserParameter参数中不允许使用特殊字符,例如:密码中存在特殊符号:

  • \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
  • 换行符
代码语言:javascript
复制
### Option: UnsafeUserParameters
#       Allow all characters to be passed in arguments to user-defined parameters.
#       The following characters and newline characters are not allowed:
#       \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
# Range: 0-1
UnsafeUserParameters=0

# 0 表示 Deny; 1 表示 Allow

参数存在特殊符号

监控项采集异常

以上,更多技术干货内容分享,欢迎参加2026 Zabbix开源社区线下技术交流活动(Zabbix Meetup/Zabbix Conference)!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档