Zabbix 6中MSSQL by ODBC模板配置手册

打印 上一主题 下一主题

主题 633|帖子 633|积分 1899

这里介绍一下如何在Zabbix 6下面,使用默认自带的模板MSSQL by ODBC来监控SQL Server数据库。官方关于Template DB MSSQL By ODBC的介绍如下链接所示:
  1. https://www.zabbix.com/integrations/mssql
复制代码
这个项目对应的github地址为:
  1. https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/mssql_odbc?at=release/6.2
复制代码
安装ODBC

当前安装Zabbix 6.2的服务器为RHEL 8,具体版本为:
  1. # more /etc/redhat-release
  2. Red Hat Enterprise Linux release 8.6 (Ootpa)
复制代码
在Zabbix Server或Zabbix Proxy Server上安装ODBC驱动,一般来说,安装Zabbix Server时已经安装了unixODBC等相关包
  1. # yum list installed | grep unixODBC
  2. unixODBC.x86_64                                       2.3.7-1.el8                               @local-rhel-8-for-x86_64-appstream-rpms
  3. unixODBC-devel.x86_64                                 2.3.7-1.el8                               @local-rhel-8-for-x86_64-appstream-rpms
复制代码
如果没有安装的的话,使用下面命令安装。
  1. #yum –y install unixODBC unixODBC-devel
复制代码
安装Microsoft ODBC 18

这里我们不打算安装freetds这个驱动,我们安装Microsoft ODBC 18驱动。具体可以参考下面链接:
  1. https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15
  2. https://learn.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/known-issues-in-this-version-of-the-driver?view=sql-server-ver15#connectivity
复制代码
我们去下面链接下载对应的安装包:
  1. https://packages.microsoft.com/rhel/8/prod/
复制代码
本地安装:
  1. #yum localinstall msodbcsql18-18.1.2.1-1.x86_64.rpm
复制代码
配置ODBC数据源

检查/etc/odbcinst.ini,你会看到已经配置了ODBC Driver信息
  1. [ODBC Driver 18 for SQL Server]
  2. Description=Microsoft ODBC Driver 18 for SQL Server
  3. Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1
  4. UsageCount=1
复制代码
具体的配置信息如下:
  1. # cat /etc/odbcinst.ini[PostgreSQL]Description=ODBC for PostgreSQLDriver=/usr/lib/psqlodbcw.soSetup=/usr/lib/libodbcpsqlS.soDriver64=/usr/lib64/psqlodbcw.soSetup64=/usr/lib64/libodbcpsqlS.soFileUsage=1[MySQL]Description=ODBC for MySQLDriver=/usr/lib/libmyodbc5.soSetup=/usr/lib/libodbcmyS.soDriver64=/usr/lib64/libmyodbc5.soSetup64=/usr/lib64/libodbcmyS.soFileUsage=1[FreeTDS]Description=Free Sybase & MS SQL DriverDriver=/usr/lib/libtdsodbc.soSetup=/usr/lib/libtdsS.soDriver64=/usr/lib64/libtdsodbc.soSetup64=/usr/lib64/libtdsS.soPort=1433[MariaDB]Description=ODBC for MariaDBDriver=/usr/lib/libmaodbc.soDriver64=/usr/lib64/libmaodbc.soFileUsage=1[Oracle]Description=ODBC  for OracleDriver=/usr/lib/oracle/19.17/client64/lib/libsqora.so.19.1[ODBC Driver 18 for SQL Server]
  2. Description=Microsoft ODBC Driver 18 for SQL Server
  3. Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1
  4. UsageCount=1
复制代码
在/etc/odbc.ini中配置数据源,一般是你要监控的SQL Server数据库服务器。我们的一个例子如下所示:
  1. [TEST]   ##指定的被监控的数据库名称,最好使用数据库服务器的机器名称
  2. Driver = ODBC Driver 18 for SQL Server
  3. Server = 192.168.7.115   ##服务器的IP地址
  4. Port = 1433                                          
  5. Database = master
复制代码
注意,建议你加上TrustServerCertificate选项,具体配置如下所示,如果不加这个选项,你很有可能遇到错误2。
样例1:
  1. [TEST]
  2. Driver = ODBC Driver 18 for SQL Server
  3. Server = 192.168.7.115
  4. Port = 1433
  5. Database = master
  6. TrustServerCertificate = Yes
复制代码
样例2:
  1. [TEST2]
  2. Driver = ODBC Driver 18 for SQL Server
  3. Server = 192.168.7.116,14033
  4. Port = 14033
  5. Database = master
  6. TrustServerCertificate = Yes
复制代码
然后测试验证是否可以连接数据库,用具体的数据库账号密码替换username, password
  1. # isql -v TEST username password
  2. +---------------------------------------+
  3. | Connected!                            |
  4. |                                       |
  5. | sql-statement                         |
  6. | help [tablename]                      |
  7. | quit                                  |
  8. |                                       |
  9. +---------------------------------------+
  10. SQL>
复制代码
配置zabbix监控

在主机的配置中添加模板“MSSQL by ODBC”,然后选择“宏“,点击”继承以及主机宏“,然后分别给下面三个宏输入相关值
  1. {$MSSQL.DSN}
  2. {$MSSQL.PASSWORD}
  3. {$MSSQL.USER}
复制代码
注意事项
1:你必须事先在被监控的SQL Server数据库上面创建相关账号并授权。如下所示:
  1. USE [master]
  2. GO
  3. CREATE LOGIN [zbx_monitor] WITH PASSWORD=N'*******', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
  4. GO
  5. USE [msdb]
  6. GO
  7. CREATE USER [zbx_monitor] FOR LOGIN [zbx_monitor]
  8. GO
  9. USE [master]
  10. GO
  11. GRANT VIEW SERVER STATE TO [zbx_monitor];
  12. GRANT VIEW ANY DEFINITION TO  [zbx_monitor];
  13. USE [msdb]
  14. GO
  15. GRANT SELECT ON msdb.dbo.sysjobs TO zbx_monitor;
  16. GRANT SELECT ON msdb.dbo.sysjobservers TO zbx_monitor;
  17. GRANT SELECT ON msdb.dbo.sysjobactivity TO zbx_monitor;
  18. GRANT EXECUTE ON msdb.dbo.agent_datetime TO zbx_monitor;
复制代码
2:你输入了对应的账号密码后,最好点击右边的T,然后选择密文模式(抑或先选择密文模式),这样不会显示账号密码的明文了。这样比较安全。如下截图所示:


选择密文保存后,你再次打开查看,此时密码以密文保存。无法查看明文密码了。

配置完成后,你要检查相关的监控选项,自动发现规则下的数据库监控是否正常,有没有一些问题出现。如果配置OK,Zabbix就会自动采集数据了。
配置可能遇到的错误:

错误1:
Cannot connect to ODBC DSN: [SQL_ERROR]:[HYT00][0][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired]|[08001][258][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]TCP Provider: Error code 0x102]|[08001][258][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]A network-related or instance-specific error has occurred while establishin]
分析: 遇到这个问题是因为防火墙屏蔽了1433端口(也有可能是其他端口,默认是1433,根据实际情况确认)导致,找系统管理员或网络管理人员开放1433端口即可解决。
可以使用下面命令验证端口是否开放。
  1. #telnet 192.168.xxx.xxx 1433
复制代码
如果端口是正常的情况下,依然报下面错误
Cannot connect to ODBC DSN: [SQL_ERROR]:[HYT00][0][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired]|[08001][258][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]TCP Provider: Error code 0x102]|[08001][258][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]A network-related or instance-specific error has occurred while establishin]
那么需要进一步排查,例如,我遇到的案例,是因为odbc配置问题导致,如下所示
验证SQL是否能连接
  1. # isql -v TEST2 xxxxx xxxx
  2. [S1T00][unixODBC][Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired
  3. [08001][unixODBC][Microsoft][ODBC Driver 18 for SQL Server]TCP Provider: Error code 0x102
  4. [08001][unixODBC][Microsoft][ODBC Driver 18 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
  5. [ISQL]ERROR: Could not SQLConnect
复制代码
/etc/odbc.ini中odbc配置如下所示:
  1. [TEST2]
  2. Driver = ODBC Driver 18 for SQL Server
  3. Server = 192.168.7.116
  4. Port = 14033
  5. Database = master
  6. TrustServerCertificate = Yes
复制代码
改为下面配置就正常了,似乎参数Port不生效。
  1. [TEST2]
  2. Driver = ODBC Driver 18 for SQL Server
  3. Server = 192.168.7.116,14033
  4. Port = 14033
  5. Database = master
  6. TrustServerCertificate = Yes
复制代码
错误2:
Cannot connect to ODBC DSN: [SQL_ERROR]:[08001][-1][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1416F086:SSL routines:tls_process_server_certificate:c]|[08001][-1][[unixODBC][Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish connection]
遇到这个错误是因为加密使用的是数据库上的证书。这个证书需要通过证书机构的验证,除非设置了信任证书的属性(SQL_COPT_SS_TRUST_SERVER_CERTIFICATE, SQL_TRUST_SERVER_CERTIFICATE_YES)或者,链接字符串包含TrustServerCertificate=yes。只要其中任意一项是 true,并且数据库上没有证书的话,那么数据库服务器就能用自己生成并签名的证书来加密链接。
修改/etc/odbc.ini配置文件,增加红色部分(TrustServerCertificate = Yes)即可解决问题。
  1. # cat /etc/odbc.ini
  2. [TEST]
  3. Driver = ODBC Driver 18 for SQL Server
  4. Server = 192.168.63.115
  5. Port = 1433
  6. Database = master
  7. TDS_Version = 8.0
  8. TrustServerCertificate = Yes
复制代码
扫描上面二维码关注我如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表