Nagios check_mssql_health与perl DBD :: Sybase没有FreeTds

时间:2016-01-10 03:02:37

标签: sql-server perl sybase nagios freetds

我经常在论坛上寻求帮助作为最后的手段,我很好并且真的卡住了......

顺便说一句:我不知道这应该放在StackOverflow还是ServerFault ... Anyhoo

我一直在研究这个问题大约18个小时......直接......

我有一个生产Nagios 3.2.0的盒子,我继承了没有文档,更不用说配置文件是一个完整的狗的早餐 所以,现在是我更新它的时候了。

我已经使用NConf 1.3.0(最终版)安装了Nagios 3.5.1(最终版)。这是一种享受。

当前框有:

Red Hat Linux release 4 
check_mssql_health (1.5.3)
perl v5.8.8 built for i386-linux-thread-multi
DBD::Sybase 1.10

当前框似乎没有使用:

freetdsunixODBC

我说这是因为似乎已经安装在一个阶段(试错了?(就像我一样??))因为相应的配置文件不包含生产系统的任何相关配置;只是样本数据。在生产系统中,我可以在我们的环境中指定任何sql server,它就可以正常工作。

./check_mssql_health --server SERVER --username USER --password PASS --mode free-list-stalls
OK - 0.00 free list stalls per second | free_list_stalls_per_sec=0.00;4;10

新方框有:

CentOS 6.7 (final)
check_mssql_health (1.6.2)
perl v5.10.1 (*) built for x86_64-linux-thread-multi
DBD::Sybase 1.10

这就是我每次都得到的:

./check_mssql_health --server SERVER --username USER --password PASS --mode free-list-stalls
CRITICAL - cannot connect to SERVER. DBI connect(';server=SERVER','USER',...) failed: (no error string) at ./check_mssql_health line 3280

我尝试了很多不同的方法来配置'无配置'的DBD :: Sybase连接,但运气不好。

以下是我尝试过的事情的链接......

https://labs.consol.de/nagios/check_mssql_health

http://www.freetds.org/userguide/perl.htm

http://www.freetds.org/userguide/config.htm

http://www.freetds.org/userguide/dsnless.htm

http://www.unixodbc.org/doc/FreeTDS.html

https://msdn.microsoft.com/en-us/library/hh568451%28v=sql.110%29.aspx

更不用说我花在编译,重新编译和排除所有编译错误/依赖关系的所有时间。真痛十足。

看来这个OP和我想要完成的行一致。但他的问题是11个月大,只看了33次。

FreeTds without freetds.conf

如何让我的新服务器使用check_mssql_health?

或者更重要的是,小sqltest.pl

#! /usr/bin/perl -w

use DBI;
use strict;

my $username = "USER";
my $password = "PASS";
my $dsn = "DBI:Sybase:;host=SERVER;port=1433";
if (my $dbh = DBI->connect(
    $dsn, $username, $password,
    { RaiseError => 1, AutoCommit => 0, PrintError => 1 })) {
  printf "connection succeeded\n";
} else {
  printf "connection failed\n";
}

新框失败。目前的产品盒成功。

为了更进一步,我甚至在两个盒子上做了一个strace!

使用:

connect(3, {sa_family=AF_INET, sin_port=htons(1433), sin_addr=inet_addr("10.2.23.2")}, 16) = -1 EINPROGRESS (Operation now in progress)
open("/usr/share/locale/locale.alias", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=2528, ...}) = 0
...
write(1, "connection succeeded\n", 21connection succeeded

失败:

connect(5, {sa_family=AF_INET, sin_port=htons(1433), sin_addr=inet_addr("10.2.23.2")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=5, events=POLLOUT}, {fd=4, events=POLLIN}], 2, 90000000) = 1 ([{fd=5, revents=POLLOUT}])
getsockopt(5, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
...
write(2, "DBI connect(';host=insyd2ft01;po"..., 239DBI connect(';host=SERVER;port=1433','USER',...) failed: OpenClient message: LAYER = (0) ORIGIN = (0) SEVERITY = (78) NUMBER = (44)
Server , database
Message String: Server name not found in configuration files.
at ./sqltest.pl line 9
) = 239

我不想使用配置文件!

工作服务器的完整pastebin strace输出:http://pastebin.com/Ek7sVeGD

失败服务器的完整pastebin strace输出:http://pastebin.com/QK3BgVhp

他们彼此非常不同,但是我太开心了,我的大脑正在关闭我......

有人有任何建议吗?

干杯。

1 个答案:

答案 0 :(得分:0)

你可以运行这个并给出输出吗?

perl -MDBI -e 'DBI->installed_versions;'

find / -name freetds.conf