remove monitor which requires obsoleted module perl-LWP-Parallel-UserAgent [release 1.2.0-3mamba;Mon Nov 19 2012]

This commit is contained in:
Silvan Calarco 2024-01-06 07:12:48 +01:00
parent b8afa1b6bd
commit 1f12a41f4e
8 changed files with 572 additions and 0 deletions

View File

@ -1,2 +1,10 @@
# mon # mon
mon is a general-purpose scheduler and alert management tool used for monitoring service availability and triggering alerts upon failure detection.
mon was designed to be open and extensible in the sense that it supports arbitrary monitoring facilities and alert methods via a common interface, all of which are easily implemented with programs in C, Perl, shell, etc., SNMP traps, and special mon traps.
mon views resource monitoring as two separate tasks: the testing of a condition, and triggering an action upon failure. mon was designed to implement the testing and action-taking tasks as separate, stand-alone programs. mon is fundamentally a scheduler which executes the monitors (each test a specific condition), and calls the appropriate alerts if the monitor fails.
The decision to invoke an alert is governed by logic which offers various "squelch" features and dependencies, all of which are configurable by the user.
Monitors and alerts are not a part of the core mon server, even though the distribution comes with a handful of them to get you started.
This means that if a new service needs monitoring, or if a new alert is necessary, the mon server does not need to be changed.
This makes mon easily extensible.

84
mon-1.2.0-Makefile.patch Normal file
View File

@ -0,0 +1,84 @@
diff -Nru mon-1.2.0.orig/etc/mon.cf mon-1.2.0/etc/mon.cf
--- mon-1.2.0.orig/etc/mon.cf 1970-01-01 01:00:00.000000000 +0100
+++ mon-1.2.0/etc/mon.cf 2009-01-01 18:59:39.000000000 +0100
@@ -0,0 +1,24 @@
+#
+# Example "mon.cf" configuration for "mon".
+#
+# see example.cf for sample usage
+#
+
+#
+# global options
+#
+cfbasedir = /etc/mon
+alertdir = /usr/lib/mon/alert.d
+mondir = /usr/lib/mon/mon.d
+maxprocs = 20
+histlength = 100
+randstart = 60s
+
+#
+# authentication types:
+# getpwnam standard Unix passwd, NOT for shadow passwords
+# shadow Unix shadow passwords (not implemented)
+# userfile "mon" user file
+#
+authtype = getpwnam
+
diff -Nru mon-1.2.0.orig/Makefile mon-1.2.0/Makefile
--- mon-1.2.0.orig/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ mon-1.2.0/Makefile 2009-01-01 19:01:10.000000000 +0100
@@ -0,0 +1,43 @@
+#
+# $Id: Makefile 1.2 Sun, 24 Jun 2001 22:41:40 -0400 trockij $
+#
+# compiles on Linux, Solaris 2.5, Solaris 2.6, and AIX Version 4.2
+#
+CC = gcc
+CFLAGS = -O2 -Wall -g
+LDFLAGS =
+LDLIBS =
+# uncomment next line for Solaris
+# LDLIBS = -lnsl -lsocket
+
+MONPATH=/usr/lib/mon
+DIALIN_MONITOR_REAL=$(MONPATH)/mon.d/dialin.monitor
+
+DESTDIR=
+PROGS =
+MANDIR = /usr/share/man
+SYSCONFDIR = /etc
+INITRDDIR = $(SYSCONFDIR)/rc.d/init.d
+
+all: $(PROGS)
+
+clean:
+ rm -f $(PROGS)
+
+install:
+ mkdir -p $(DESTDIR)$(MONPATH)/{state.d,alert.d,mon.d}
+ install state.d/* $(DESTDIR)$(MONPATH)/state.d
+ install alert.d/* $(DESTDIR)$(MONPATH)/alert.d
+ install mon.d/*.monitor $(DESTDIR)$(MONPATH)/mon.d
+ install -m 755 mon $(DESTDIR)$(MONPATH)
+
+ mkdir -p $(DESTDIR)$(MANDIR)/{man1,man8}
+ install -m 644 doc/moncmd.1 doc/monshow.1 $(DESTDIR)$(MANDIR)/man1
+ install -m 644 doc/mon.8 $(DESTDIR)$(MANDIR)/man8
+
+ mkdir -p $(DESTDIR)$(SYSCONFDIR)/mon
+ install -m 644 etc/* $(DESTDIR)$(SYSCONFDIR)/mon
+
+ mkdir -p $(DESTDIR)$(INITRDDIR)
+ install -m 755 etc/S99mon $(DESTDIR)$(INITRDDIR)/mon
+
diff -Nru mon-1.2.0.orig/mon.d/Makefile mon-1.2.0/mon.d/Makefile
--- mon-1.2.0.orig/mon.d/Makefile 2009-01-01 19:01:47.000000000 +0100
+++ mon-1.2.0/mon.d/Makefile 2009-01-01 18:59:39.000000000 +0100
@@ -31,4 +31,4 @@
install:
install -d $(MONPATH)/mon.d
install rpc.monitor $(MONPATH)/mon.d/
- install -g uucp -m 02555 dialin.monitor.wrap $(MONPATH)/mon.d/
+ install -m 02555 dialin.monitor.wrap $(MONPATH)/mon.d/

5
mon-bring-ha-down.alert Normal file
View File

@ -0,0 +1,5 @@
#!/bin/bash
#
# bring-ha-down.alert - Heartbeat alert for mon
#
/usr/lib/heartbeat/hb_standby

7
mon-bring-ha-up.alert Normal file
View File

@ -0,0 +1,7 @@
#!/bin/bash
#
# bring-ha-up.alert - Heartbeat alert for mon
#
# to be used for auto_failback
#
/usr/lib/heartbeat/hb_takeover

47
mon-initscript Normal file
View File

@ -0,0 +1,47 @@
#!/bin/sh
#
# start/stop the mon server
#
# You probably want to set the path to include
# nothing but local filesystems.
#
# chkconfig: 2345 99 10
# description: mon system monitoring daemon
# processname: mon
# config: /etc/mon/mon.cf
# pidfile: /var/run/mon.pid
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH
# Source function library.
. /etc/rc.d/init.d/functions
# See how we were called.
case "$1" in
start)
echo -n "Starting mon daemon: "
/usr/lib/mon/mon -f -c /etc/mon/mon.cf
evaluate_retval
echo
touch /var/lock/subsys/mon
;;
stop)
echo -n "Stopping mon daemon: "
killproc mon
echo
rm -f /var/lock/subsys/mon
;;
status)
status mon
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: mon {start|stop|status|restart}"
exit 1
esac
exit 0

38
mon-lvs.alert Normal file
View File

@ -0,0 +1,38 @@
#!/usr/bin/perl
#
# lvs.alert - Linux Virtual Server alert for mon
#
# It can be activated by mon to remove a real server when the
# service is down, or add the server when the service is up.
#
#
use Getopt::Std;
getopts ("s:g:h:t:l:P:V:R:W:F:u");
$ipvsadm = "/sbin/ipvsadm";
$protocol = $opt_P;
$virtual_service = $opt_V;
$remote = $opt_R;
if ($opt_u) {
$weight = $opt_W;
if ($opt_F eq "nat") {
$forwarding = "-m";
} elsif ($opt_F eq "tun") {
$forwarding = "-i";
} else {
$forwarding = "-g";
}
if ($protocol eq "tcp") {
system("$ipvsadm -a -t $virtual_service -r $remote -w $weight $forwarding");
} else {
system("$ipvsadm -a -u $virtual_service -r $remote -w $weight $forwarding");
}
} else {
if ($protocol eq "tcp") {
system("$ipvsadm -d -t $virtual_service -r $remote");
} else {
system("$ipvsadm -d -u $virtual_service -r $remote");
}
};

211
mon-squid.monitor Normal file
View File

@ -0,0 +1,211 @@
#!/usr/bin/perl
#
# Use try to connect to a proxy server.
# For use with "mon".
#
# Modified by Silvan Calarco
# it just returns ok if the proxy server returns a 400 (page not found) error
# and defaults to port 3128
#
# proxy.monitor [-p port] [-t secs] [-u url] [-a agent] [-o] host [host...]
#
# -p port TCP port to connect to (defaults to 3128)
# -t secs timeout, defaults to 30
# -u url path to get, defaults to "/"
# -a agent User-Agent, default to "mon.d/proxy.monitor"
# -o omit http headers from healthy hosts
#
# Jon Meek
# American Cyanamid Company
# Princeton, NJ
#
# $Id: proxy.monitor 1.4 Sat, 30 Jun 2001 14:44:29 -0400 trockij $
#
# Copyright (C) 1998, Jim Trocki
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
use Getopt::Std;
use English;
use Data::Dumper;
sub httpGET;
getopts ("p:t:u:a:o");
$PORT = $opt_p || 3128;
$TIMEOUT = $opt_t || 30;
$URL = $opt_u || "/";
$USERAGENT = $opt_a || "mon.d/squid.monitor";
my %good;
my %bad;
exit 0 if (!@ARGV);
foreach my $host (@ARGV) {
my $result = httpGET ($host, $PORT);
if (!$result->{"ok"}) {
$bad{$host} = $result;
} else {
$good{$host} = $result;
}
}
my $ret;
if (keys %bad) {
$ret = 1;
print join (" ", sort keys %bad), "\n";
} else {
$ret = 0;
print "\n";
}
foreach my $h (keys %bad) {
print "HOST $h: $bad{$h}->{error}\n";
if ($bad{$h}->{"header"} ne "") {
print $bad{$h}->{"header"}, "\n";
}
print "\n";
}
if (!$opt_o)
{
foreach my $h (keys %good) {
print "HOST $h: ok\n";
print $good{$h}->{"header"}, "\n";
print "\n";
}
}
exit $ret;
sub httpGET {
use Socket;
use Sys::Hostname;
my($Server, $Port) = @_;
my($ServerOK, $TheContent);
$TheContent = '';
my $Path = $URL;
my $result;
###############################################################
eval {
local $SIG{ALRM} = sub { die "Timeout Alarm" };
alarm $TIMEOUT;
my $err = &OpenSocket($Server, $Port); # Open a connection to the server
if ($err ne "") { # Failure to open the socket
$result = {
"ok" => 0,
"error" => $err,
"header" => undef,
};
return undef;
}
print S "GET $Path HTTP/1.0\r\n";
print S "Host: $Server\r\n";
print S "User-Agent: $USERAGENT\r\n\r\n";
while ($in = <S>) {
$TheContent .= $in; # Store data for later processing
}
# HTTP/1.1 200 OK
if ($TheContent =~ /^HTTP\/([\d\.]+)\s+(200|30[12]|40[01])\b/) {
$ServerOK = 1;
} else {
$ServerOK = 0;
}
close(S);
alarm 0; # Cancel the alarm
};
my ($header) = ($TheContent =~ /^(.*?)\r?\n\r?\n/s);
if ($EVAL_ERROR and ($EVAL_ERROR =~ /^Timeout Alarm/)) {
return {
"ok" => 0,
"error" => "timeout after $TIMEOUT seconds",
"header" => $header,
};
}
if ($result->{"error"} ne "") {
return $result;
}
return {
"ok" => $ServerOK,
"header" => $header,
"error" => undef,
};
}
#
# Make a Berkeley socket connection between this program and a TCP port
# on another (or this) host. Port can be a number or a named service
#
# returns "" on success, or an error string on failure
#
sub OpenSocket {
my ($host, $port) = @_;
my $proto = (getprotobyname('tcp'))[2];
return ("could not get protocol") if (!defined $proto);
my $conn_port;
if ($port =~ /^\d+$/) {
$conn_port = $port;
} else {
$conn_port = (getservbyname($port, 'tcp'))[2];
return ("could not getservbyname for $port")
if (!defined $conn_port);
}
my $host_addr = (gethostbyname($host))[4];
return ("gethostbyname failure")
if (!defined $host_addr);
my $that = sockaddr_in ($conn_port, $host_addr);
if (!socket (S, &PF_INET, &SOCK_STREAM, $proto)) {
return ("socket: $!");
}
if (!connect (S, $that)) {
return ("connect: $!");
}
select(S); $| = 1; select(STDOUT);
"";
}

172
mon.spec Normal file
View File

@ -0,0 +1,172 @@
%define moncgi_version 1.52
Name: mon
Version: 1.2.0
Release: 3mamba
Summary: A scheduler and alert management tool used for monitoring service availability and triggering alerts upon failure detection
Group: System/Servers
Vendor: openmamba
Distribution: openmamba
Packager: Silvan Calarco <silvan.calarco@mambasoft.it>
URL: http://www.kernel.org/pub/software/admin/mon/html/
Source0: http://www.giano.lkams.kernel.org/pub/software/admin/mon/mon-%{version}.tar.bz2
Source1: mon-initscript
Source2: mon-lvs.alert
Source3: mon-bring-ha-down.alert
Source4: mon-squid.monitor
Source5: http://www.kernel.org/pub/software/admin/mon/contrib/all-monitors.tar.gz
Source6: http://www.kernel.org/pub/software/admin/mon/contrib/all-alerts.tar.gz
Source7: http://www.kernel.org/pub/software/admin/mon/contrib/cgi-bin/mon.cgi/mon.cgi-%{moncgi_version}.tar.bz2
Source8: mon-bring-ha-up.alert
Patch0: mon-1.2.0-Makefile.patch
License: GPL
## AUTOBUILDREQ-BEGIN
BuildRequires: glibc-devel
BuildRequires: libtirpc-devel
## AUTOBUILDREQ-END
BuildRoot: %{_tmppath}/%{name}-%{version}-root
%description
mon is a general-purpose scheduler and alert management tool used for monitoring service availability and triggering alerts upon failure detection.
mon was designed to be open and extensible in the sense that it supports arbitrary monitoring facilities and alert methods via a common interface, all of which are easily implemented with programs in C, Perl, shell, etc., SNMP traps, and special mon traps.
mon views resource monitoring as two separate tasks: the testing of a condition, and triggering an action upon failure. mon was designed to implement the testing and action-taking tasks as separate, stand-alone programs. mon is fundamentally a scheduler which executes the monitors (each test a specific condition), and calls the appropriate alerts if the monitor fails.
The decision to invoke an alert is governed by logic which offers various "squelch" features and dependencies, all of which are configurable by the user.
Monitors and alerts are not a part of the core mon server, even though the distribution comes with a handful of them to get you started.
This means that if a new service needs monitoring, or if a new alert is necessary, the mon server does not need to be changed.
This makes mon easily extensible.
%prep
%setup -q
%patch0 -p1
## fix an incorrect autodiscovered -Dopt dependency
#%define __perl_requires %{_builddir}/%{name}-%{version}/perl_requires.sh
#cat > perl_requires.sh << _EOF
##! /bin/sh
#%{_prefix}/lib/rpm/find-requires %{buildroot} %{_target_cpu} | grep -v "\-Dopt"
#_EOF
#chmod +x perl_requires.sh
%build
%make -C mon.d LDLIBS="-ltirpc"
%install
[ "%{buildroot}" != / ] && rm -rf %{buildroot}
make -C mon.d install MONPATH=%{buildroot}%{_libdir}/mon
make install DESTDIR=%{buildroot}
install -m 755 %{S:1} %{buildroot}%{_initrddir}/mon
install -m 755 %{S:2} %{buildroot}%{_libdir}/mon/alert.d/lvs.alert
install -m 755 %{S:3} %{buildroot}%{_libdir}/mon/alert.d/bring-ha-down.alert
install -m 755 %{S:4} %{buildroot}%{_libdir}/mon/mon.d/squid.monitor
install -m 755 %{S:8} %{buildroot}%{_libdir}/mon/alert.d/bring-ha-up.alert
#sed -i "s|/usr/lib/sendmail|/usr/sbin/sendmail|" \
# %{buildroot}%{_libdir}/mon/alert.d/*
install -d %{buildroot}/var/log/mon
rm -f %{buildroot}%{_sysconfdir}/mon/S99mon
# install additional monitors and alerts
install -d %{buildroot}%{_libdir}/mon/examples
pushd %{buildroot}%{_libdir}/mon/examples
tar xzf %{S:5}
tar xzf %{S:6}
sed -i "s|/usr/local/bin/perl|/usr/bin/perl|" \
alerts/*/* monitors/*/*
# remove aim to avoid a perl dependency on aol perl module we don't want
rm -rf alerts/aim
popd
%clean
[ "%{buildroot}" != / ] && rm -rf %{buildroot}
%preun
if [ $1 -eq 0 ]; then
# erase
chkconfig mon
if [ $? -eq 0 ]; then
service mon stop
chkconfig --del mon
fi
fi
exit 0
%postun
if [ $1 -eq 1 ]; then
# upgrade
chkconfig mon
[ $? -eq 0 ] && service mon restart
fi
exit 0
%files
%defattr(-,root,root)
%dir %{_sysconfdir}/mon
%config(noreplace) %{_sysconfdir}/mon/*
%{_initrddir}/mon
%dir %{_libdir}/mon
%dir %{_libdir}/mon/mon.d
%{_libdir}/mon/mon.d/*
%dir %{_libdir}/mon/state.d
%{_libdir}/mon/state.d/*
%dir %{_libdir}/mon/alert.d
%{_libdir}/mon/alert.d/*
%{_libdir}/mon/mon
%dir %{_libdir}/mon/examples
%{_libdir}/mon/examples/*
%dir /var/log/mon
%{_mandir}/man1/*
%{_mandir}/man8/*
%changelog
* Mon Nov 19 2012 Silvan Calarco <silvan.calarco@mambasoft.it> 1.2.0-3mamba
- remove monitor which requires obsoleted module perl-LWP-Parallel-UserAgent
* Fri Feb 05 2010 Silvan Calarco <silvan.calarco@mambasoft.it> 1.2.0-2mamba
- rebuilt to remove executable requirements
* Thu Jan 01 2009 Silvan Calarco <silvan.calarco@mambasoft.it> 1.2.0-1mamba
- automatic update by autodist
* Wed Oct 18 2006 Davide Madrisan <davide.madrisan@qilinux.it> 0.99.2-11qilnx
- specfile fixes and updates
- stop and restart the mon service using the 'service' command
- fixed %%preun script
* Thu Nov 25 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-10qilnx
- added bring-ha-up.alert script to allow ha auto-failback
* Fri Oct 15 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-9qilnx
- added additional monitors and alerts from ftp.kernel.org as examples
* Thu Oct 14 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-8qilnx
- added squid.monitor script
- changed references to sendmail from /usr/lib/sendmail to /usr/sbin/sendmail
* Thu Oct 14 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-7qilnx
- fix for previous fix
* Thu Oct 14 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-6qilnx
- added bring-ha-down.alert script for use with heartbeat
* Fri Jun 18 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-5qilnx
- really fixed initscript (oops I forgot to add the install line)
- don't overwrite config files on update
- create log directory (/var/log/mon)
* Thu Jun 10 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-4qilnx
- added script lvs.alert
- fixed initscript restart
* Mon May 03 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-3qilnx
- fixed requirement list (excluded "-Dopt")
* Fri Apr 30 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-2qilnx
- fixed references tu /usr/local/bin/perl
* Fri Apr 30 2004 Silvan Calarco <silvan.calarco@mambasoft.it> 0.99.2-1qilnx
- first build