Есть плагин к Нагиосу, использующий скрипт вроде как на Perl -
check_mssql_health .
$self->{dsn} = "DBI:Sybase:";
if ($self->{hostname}) {
$self->{dsn} .= sprintf ";host=%s", $self->{hostname};
$self->{dsn} .= sprintf ";port=%s", $self->{port};
} else {
$self->{dsn} .= sprintf ";server=%s", $self->{server};
}
...
printf "Try connect %s %s %s\n",$self->{dsn},$self->{username},$self->{password};
alarm($self->{timeout} - 1); # 1 second before the global unknown timeout
if ($self->{handle} = DBI->connect(
$self->{dsn},
$self->{username},
$self->{password},
{ RaiseError => 1, AutoCommit => 0, PrintError => 1 })) {
$retval = $self;
printf "WOW! %s\n",$self;
} else {
# doesnt seem to work $self->{errstr} = DBI::errstr();
printf "WOW! connect failed %s\n",DBI::errstr();
$self->{errstr} = printf "WOW! connect failed %s\n",DBI::errstr();
return undef;
}
Есть машина c MS SQL - в домене MYDOMAIN ее имя sqlworking - ip 192.168.1.2
Есть пользователь в домене Admin без пароля
Есть пользователь в SQL nagios/nagios
Пробовал запускать скрипт из консоли, почитал на форумах и блогах, выяснилось, что не хватает доп библиотек.
Ставил через Synaptic или компилировал. Вот вроде то, что уствновилось в итоге
freedts-dev
freedts-common
libdbi-perl
libdbi0
libdb-sybase-perl
Прописал в /etc/freetds.conf
[global]
tds version = 8.0
Но все равно скрипт не соединяется с базой
я и так
Try connect DBI:Sybase:;host=192.168.1.2;port=1433 nagios nagios
и эдак
Try connect DBI:Sybase:;server=sqlworking nagios nagios
Потом заметил, что возможна ошибка в синтаксисе dsn и переделал
if ($self->{hostname}) {
$self->{dsn} .= sprintf "host=%s", $self->{hostname};
$self->{dsn} .= sprintf ":%s", $self->{port};
} else {
$self->{dsn} .= sprintf "server=%s", $self->{server};
}
и эдак
Try connect DBI:Sybase:host=192.168.1.2:1433 nagios nagios
и эдак
Try connect DBI:Sybase:server=sqlworking nagios nagios
Попробовал
$self->{dsn} .= sprintf "server=%s:%s", $self->{server}, $self->{port};
и
Try connect DBI:Sybase:server=sqlworking:1433 nagios nagios
$self->{dsn} .= sprintf "server=%s;port=%s", $self->{server}, $self->{port};
и
Try connect DBI:Sybase:server=sqlworking;port=1433 nagios nagios
никакого результата.
Через доменное имя пользователя скрипт вообще не пускает в моем случае, поскольку должен быть указан скрипту пароль, а у меня в домене нет пароля (и это поменять нельзя)
И еще, что странно, так это то, что ниодна строка
printf "WOW!..."
ни из if, ни из else не "отрабатывает". Видимо возникает исключение неотлавливаемое.
В чем проблема? Самой машине с Ubuntu я просто выделил IP и каких-то действий по вводу ее в домен не производил. Но компы в сети пингуются, да и Нагиос пашет на отлично.
Еще я немного не понимаю, зачем делать что-то с MS SQL, как это сказано в руководстве по
check_mssql_health.