diff options
26 files changed, 463 insertions, 22 deletions
| diff --git a/provider_base/services/monitor.json b/provider_base/services/monitor.json index 82c18745..03f6c6d1 100644 --- a/provider_base/services/monitor.json +++ b/provider_base/services/monitor.json @@ -1,9 +1,9 @@  {    "nagios": {      "nagiosadmin_pw": "= secret :nagios_admin_password", -    "hosts": "= nodes_like_me.pick_fields('domain.internal', 'ip_address', 'services', 'openvpn.gateway_address')" +    "hosts": "= (self.environment == 'local' ? nodes_like_me : nodes[:environment => '!local']).pick_fields('domain.internal', 'domain.full_suffix', 'ip_address', 'services', 'openvpn.gateway_address', 'ssh.port')"    }, -  "hosts": "= hosts_file(nodes_like_me)", +  "hosts": "= self.environment == 'local' ? hosts_file(nodes_like_me) : hosts_file(nodes[:environment => '!local'])",    "ssh": {      "monitor": {        "username": "= Leap::Platform.monitor_username", diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/couchdb.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/bigcouch.cfg index 0911d09a..a1eb1312 100644 --- a/puppet/modules/site_check_mk/files/agent/logwatch/couchdb.cfg +++ b/puppet/modules/site_check_mk/files/agent/logwatch/bigcouch.cfg @@ -6,4 +6,10 @@   C rexi_DOWN,noproc   C rexi_DOWN,noconnection   C error + C Connection attempt from disallowed node   W Shutting down group server +# ignore requests that are fine + I undefined - -.*200$  + I undefined - -.*201$ + I 127.0.0.1 undefined.* ok   + I 127.0.0.1 localhost:5984 .* ok  diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog.cfg index 3703b5e1..f3505c1c 100644 --- a/puppet/modules/site_check_mk/files/agent/logwatch/syslog.cfg +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog.cfg @@ -1,5 +1,12 @@  /var/log/syslog +# some general patterns   C panic   C Oops + I Error: Driver 'pcspkr' is already registered, aborting... + C Error + C error   W generic protection rip   W .*Unrecovered read error - auto reallocate failed +# 401 Unauthorized error logged by webapp and possible other +# applications + C Unauthorized diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg new file mode 100644 index 00000000..5f8d5b95 --- /dev/null +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg @@ -0,0 +1,2 @@ + C /usr/local/bin/couch-doc-update.*failed + C /usr/local/bin/couch-doc-update.*ERROR diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/stunnel.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/stunnel.cfg new file mode 100644 index 00000000..cf7ebca8 --- /dev/null +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/stunnel.cfg @@ -0,0 +1,5 @@ +# check for stunnel failures + C stunnel:.*Connection refused +# this is a temporary failure and happens very often, so we  +# ignore it + I stunnel:.*Connection reset by peer diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/tapicero.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/tapicero.cfg new file mode 100644 index 00000000..9983d27c --- /dev/null +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/tapicero.cfg @@ -0,0 +1,7 @@ + C tapicero.*RestClient::InternalServerError: +# possible race condition between multiple tapicero +# instances, so we ignore it +# see https://leap.se/code/issues/5168 + I tapicero.*RestClient::PreconditionFailed: + C tapicero.*failed + W tapicero.*Couch stream ended unexpectedly. diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/webapp.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/webapp.cfg new file mode 100644 index 00000000..00f9c7fd --- /dev/null +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/webapp.cfg @@ -0,0 +1,5 @@ +# check for webapp errors + C webapp.*Could not connect to couch database messages due to 401 Unauthorized: {"error":"unauthorized","reason":"You are not a server admin."} +# ignore RoutingErrors that rails throw when it can't handle a url +# see https://leap.se/code/issues/5173 + I webapp.*ActionController::RoutingError diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/tapicero.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/tapicero.cfg deleted file mode 100644 index 4e3808eb..00000000 --- a/puppet/modules/site_check_mk/files/agent/logwatch/tapicero.cfg +++ /dev/null @@ -1,4 +0,0 @@ - C tapicero.*RestClient::InternalServerError: - C tapicero.*RestClient::PreconditionFailed: - C tapicero.*failed - W tapicero.*Couch stream ended unexpectedly. diff --git a/puppet/modules/site_check_mk/files/agent/nagios_plugins/check_unix_open_fds.pl b/puppet/modules/site_check_mk/files/agent/nagios_plugins/check_unix_open_fds.pl new file mode 100755 index 00000000..06163d49 --- /dev/null +++ b/puppet/modules/site_check_mk/files/agent/nagios_plugins/check_unix_open_fds.pl @@ -0,0 +1,322 @@ +#!/usr/bin/perl -w + +# check_unix_open_fds Nagios Plugin +# +# TComm - Carlos Peris Pla +# +# This nagios plugin is free software, and comes with ABSOLUTELY  +# NO WARRANTY. It may be used, redistributed and/or modified under  +# the terms of the GNU General Public Licence (see  +# http://www.fsf.org/licensing/licenses/gpl.txt). + + +# MODULE DECLARATION + +use strict; +use Nagios::Plugin; + + +# FUNCTION DECLARATION + +sub CreateNagiosManager (); +sub CheckArguments (); +sub PerformCheck (); + + +# CONSTANT DEFINITION + +use constant NAME => 	'check_unix_open_fds'; +use constant VERSION => '0.1b'; +use constant USAGE => 	"Usage:\ncheck_unix_open_fds -w <process_threshold,application_threshold> -c <process_threshold,application_threshold>\n". +						"\t\t[-V <version>]\n"; +use constant BLURB => 	"This plugin checks, in UNIX systems with the command lsof installed and with its SUID bit activated, the number\n". +						"of file descriptors opened by an application and its processes.\n"; +use constant LICENSE => "This nagios plugin is free software, and comes with ABSOLUTELY\n". +						"no WARRANTY. It may be used, redistributed and/or modified under\n". +						"the terms of the GNU General Public Licence\n". +						"(see http://www.fsf.org/licensing/licenses/gpl.txt).\n"; +use constant EXAMPLE => "\n\n". +						"Example:\n". +						"\n". +						"check_unix_open_fds -a /usr/local/nagios/bin/ndo2db -w 20,75 -c 25,85\n". +						"\n". +						"It returns CRITICAL if number of file descriptors opened by ndo2db is higher than 85,\n". +						"if not it returns WARNING if number of file descriptors opened by ndo2db is higher \n". +						"than 75, if not it returns CRITICAL if number of file descriptors opened by any process\n". +						"of ndo2db is higher than 25, if not it returns WARNING if number of file descriptors \n". +						"opened by any process of ndo2db is higher than 20.\n". +						"In other cases it returns OK if check has been performed succesfully.\n\n"; + +								 +# VARIABLE DEFINITION + +my $Nagios; +my $Error; +my $PluginResult; +my $PluginOutput; +my @WVRange; +my @CVRange; + + +# MAIN FUNCTION + +# Get command line arguments +$Nagios = &CreateNagiosManager(USAGE, VERSION, BLURB, LICENSE, NAME, EXAMPLE); +eval {$Nagios->getopts}; + +if (!$@) { +	# Command line parsed +	if (&CheckArguments($Nagios, \$Error, \@WVRange, \@CVRange)) { +		# Argument checking passed +		$PluginResult = &PerformCheck($Nagios, \$PluginOutput, \@WVRange, \@CVRange) +	} +	else { +		# Error checking arguments +		$PluginOutput = $Error; +		$PluginResult = UNKNOWN; +	} +	$Nagios->nagios_exit($PluginResult,$PluginOutput); +} +else { +	# Error parsing command line +	$Nagios->nagios_exit(UNKNOWN,$@); +} + +		 +	 +# FUNCTION DEFINITIONS + +# Creates and configures a Nagios plugin object +# Input: strings (usage, version, blurb, license, name and example) to configure argument parsing functionality +# Return value: reference to a Nagios plugin object + +sub CreateNagiosManager() { +	# Create GetOpt object +	my $Nagios = Nagios::Plugin->new(usage => $_[0], version =>  $_[1], blurb =>  $_[2], license =>  $_[3], plugin =>  $_[4], extra =>  $_[5]); +	 +	# Add argument units +	$Nagios->add_arg(spec => 'application|a=s', +				help => 'Application path for which you want to check the number of open file descriptors', +				required => 1);				 +	 +	# Add argument warning +	$Nagios->add_arg(spec => 'warning|w=s', +				help => "Warning thresholds. Format: <process_threshold,application_threshold>", +				required => 1); +	# Add argument critical +	$Nagios->add_arg(spec => 'critical|c=s', +				help => "Critical thresholds. Format: <process_threshold,application_threshold>", +				required => 1); +								 +	# Return value +	return $Nagios; +} + + +# Checks argument values and sets some default values +# Input: Nagios Plugin object +# Output: reference to Error description string, Memory Unit, Swap Unit, reference to WVRange ($_[4]), reference to CVRange ($_[5]) +# Return value: True if arguments ok, false if not + +sub CheckArguments() { +	my ($Nagios, $Error, $WVRange, $CVRange) = @_; +	my $commas; +	my $units; +	my $i; +	my $firstpos; +	my $secondpos; +	 +	# Check Warning thresholds list +	$commas = $Nagios->opts->warning =~ tr/,//;  +	if ($commas !=1){ +		${$Error} = "Invalid Warning list format. One comma is expected."; +		return 0; +	} +	else{ +		$i=0; +		$firstpos=0; +		my $warning=$Nagios->opts->warning; +		while ($warning =~ /[,]/g) { +			$secondpos=pos $warning; +			if ($secondpos - $firstpos==1){ +				@{$WVRange}[$i] = "~:"; +			}		 +			else{ +				@{$WVRange}[$i] = substr $Nagios->opts->warning, $firstpos, ($secondpos-$firstpos-1); +			} +			$firstpos=$secondpos; +			$i++ +		} +		if (length($Nagios->opts->warning) - $firstpos==0){#La coma es el ultimo elemento del string +			@{$WVRange}[$i] = "~:"; +		} +		else{ +			@{$WVRange}[$i] = substr $Nagios->opts->warning, $firstpos, (length($Nagios->opts->warning)-$firstpos); +		}	 +		 +		if (@{$WVRange}[0] !~/^(@?(\d+|(\d+|~):(\d+)?))?$/){ +			${$Error} = "Invalid Process Warning threshold in ${$WVRange[0]}"; +			return 0; +		}if (@{$WVRange}[1] !~/^(@?(\d+|(\d+|~):(\d+)?))?$/){ +			${$Error} = "Invalid Application Warning threshold in ${$WVRange[1]}"; +			return 0; +		} +	} +	 +	# Check Critical thresholds list +	$commas = $Nagios->opts->critical =~ tr/,//;  +	if ($commas !=1){ +		${$Error} = "Invalid Critical list format. One comma is expected."; +		return 0; +	} +	else{ +		$i=0; +		$firstpos=0; +		my $critical=$Nagios->opts->critical; +		while ($critical  =~ /[,]/g) { +			$secondpos=pos $critical ; +			if ($secondpos - $firstpos==1){ +				@{$CVRange}[$i] = "~:"; +			}		 +			else{ +				@{$CVRange}[$i] =substr $Nagios->opts->critical, $firstpos, ($secondpos-$firstpos-1); +			} +			$firstpos=$secondpos; +			$i++ +		} +		if (length($Nagios->opts->critical) - $firstpos==0){#La coma es el ultimo elemento del string +			@{$CVRange}[$i] = "~:"; +		} +		else{ +			@{$CVRange}[$i] = substr $Nagios->opts->critical, $firstpos, (length($Nagios->opts->critical)-$firstpos); +		}		 + +		if (@{$CVRange}[0] !~/^(@?(\d+|(\d+|~):(\d+)?))?$/) { +			${$Error} = "Invalid Process Critical threshold in @{$CVRange}[0]"; +			return 0; +		} +		if (@{$CVRange}[1] !~/^(@?(\d+|(\d+|~):(\d+)?))?$/) { +			${$Error} = "Invalid Application Critical threshold in @{$CVRange}[1]"; +			return 0; +		} +	} +	 +	return 1; +} + + +# Performs whole check:  +# Input: Nagios Plugin object, reference to Plugin output string, Application, referece to WVRange, reference to CVRange +# Output: Plugin output string +# Return value: Plugin return value + +sub PerformCheck() { +	my ($Nagios, $PluginOutput, $WVRange, $CVRange) = @_; +	my $Application; +	my @AppNameSplitted; +	my $ApplicationName; +	my $PsCommand; +	my $PsResult; +	my @PsResultLines; +	my $ProcLine; +	my $ProcPid; +	my $LsofCommand; +	my $LsofResult; +	my $ProcCount = 0; +	my $FDCount = 0; +	my $ProcFDAvg = 0; +	my $PerProcMaxFD = 0; +	my $ProcOKFlag = 0; +	my $ProcWarningFlag = 0; +	my $ProcCriticalFlag = 0; +	my $OKFlag = 0; +	my $WarningFlag = 0; +	my $CriticalFlag = 0; +	my $LastWarningProcFDs = 0; +	my $LastWarningProc = -1; +	my $LastCriticalProcFDs = 0; +	my $LastCriticalProc = -1; +	my $ProcPluginReturnValue = UNKNOWN; +	my $AppPluginReturnValue = UNKNOWN; + 	my $PluginReturnValue = UNKNOWN; + 	my $PerformanceData = ""; +	my $PerfdataUnit = "FDs"; +	 +	$Application = $Nagios->opts->application; +	$PsCommand = "ps -eaf | grep $Application"; +	$PsResult = `$PsCommand`; +	@AppNameSplitted = split(/\//, $Application); +	$ApplicationName = $AppNameSplitted[$#AppNameSplitted]; +	@PsResultLines = split(/\n/, $PsResult); +	if ( $#PsResultLines > 1 ) { +	    foreach my $Proc (split(/\n/, $PsResult)) { +		if ($Proc !~ /check_unix_open_fds/ && $Proc !~ / grep /) { +				$ProcCount += 1; +			    $ProcPid = (split(/\s+/, $Proc))[1]; +			    $LsofCommand = "lsof -p $ProcPid | wc -l"; +			    $LsofResult = `$LsofCommand`; +			    $LsofResult = ($LsofResult > 0 ) ? ($LsofResult - 1) : 0; +			    $FDCount += $LsofResult; +			    if ($LsofResult >= $PerProcMaxFD) { $PerProcMaxFD = $LsofResult; } +			    $ProcPluginReturnValue = $Nagios->check_threshold(check => $LsofResult,warning => @{$WVRange}[0],critical => @{$CVRange}[0]); +			    if ($ProcPluginReturnValue eq OK) { +			    	$ProcOKFlag = 1; +			    } +			    elsif ($ProcPluginReturnValue eq WARNING) { +					$ProcWarningFlag = 1; +					if ($LsofResult >= $LastWarningProcFDs) { +					    $LastWarningProcFDs = $LsofResult; +					    $LastWarningProc = $ProcPid; +					} +			    } +				#if ($LsofResult >= $PCT) { +				elsif ($ProcPluginReturnValue eq CRITICAL) { +				    $ProcCriticalFlag = 1; +				    if ($LsofResult >= $LastCriticalProcFDs) { +						$LastCriticalProcFDs = $LsofResult; +						$LastCriticalProc = $ProcPid; +				    } +				} +		    } +	    } +	    if ($ProcCount) { $ProcFDAvg = int($FDCount / $ProcCount); } +	    $AppPluginReturnValue = $Nagios->check_threshold(check => $FDCount,warning => @{$WVRange}[1],critical => @{$CVRange}[1]); +	    #if ($FDCount >= $TWT) { +	    if ($AppPluginReturnValue eq OK) { $OKFlag = 1; } +	    elsif ($AppPluginReturnValue eq WARNING) { $WarningFlag = 1; } +	    elsif ($AppPluginReturnValue eq CRITICAL) { $CriticalFlag = 1; } +	 +	    # PluginReturnValue and PluginOutput +	    if ($CriticalFlag) { +	    	$PluginReturnValue = CRITICAL; +			${$PluginOutput} .= "$ApplicationName handling $FDCount files (critical threshold set to @{$CVRange}[1])"; +	    } +	    elsif ($WarningFlag) { +	    	$PluginReturnValue = WARNING; +			${$PluginOutput} .= "$ApplicationName handling $FDCount files (warning threshold set to @{$WVRange}[1])"; +	    } +	    elsif ($ProcCriticalFlag) { +	    	$PluginReturnValue = CRITICAL; +			${$PluginOutput} .= "Process ID $LastCriticalProc handling $LastCriticalProcFDs files (critical threshold set to @{$CVRange}[0])"; +	    } +	    elsif ($ProcWarningFlag) { +	    	$PluginReturnValue = WARNING; +			${$PluginOutput} .= "Process ID $LastWarningProc handling $LastWarningProcFDs files (warning threshold set to @{$WVRange}[0])"; +	    } +	    elsif ($OKFlag && $ProcOKFlag) { +	    	$PluginReturnValue = OK; +			${$PluginOutput} .= "$ApplicationName handling $FDCount files"; +	    } +	} +	else { +	    ${$PluginOutput} .= "No existe la aplicacion $ApplicationName"; +	} + +      +	$PerformanceData .= "ProcCount=$ProcCount$PerfdataUnit FDCount=$FDCount$PerfdataUnit ProcFDAvg=$ProcFDAvg$PerfdataUnit PerProcMaxFD=$PerProcMaxFD$PerfdataUnit"; + +	# Output with performance data: +	${$PluginOutput} .= " | $PerformanceData"; + + 	return $PluginReturnValue; +} diff --git a/puppet/modules/site_check_mk/manifests/agent.pp b/puppet/modules/site_check_mk/manifests/agent.pp index a29923c1..efb05b37 100644 --- a/puppet/modules/site_check_mk/manifests/agent.pp +++ b/puppet/modules/site_check_mk/manifests/agent.pp @@ -14,6 +14,10 @@ class site_check_mk::agent {      register_agent              => false    } +  file { [ '/srv/leap/nagios', '/srv/leap/nagios/plugins' ]: +    ensure  => directory, +  } +    include site_check_mk::agent::mrpe    include site_check_mk::agent::logwatch  } diff --git a/puppet/modules/site_check_mk/manifests/agent/couchdb.pp b/puppet/modules/site_check_mk/manifests/agent/couchdb.pp index c954292a..01e2b886 100644 --- a/puppet/modules/site_check_mk/manifests/agent/couchdb.pp +++ b/puppet/modules/site_check_mk/manifests/agent/couchdb.pp @@ -1,15 +1,36 @@  class site_check_mk::agent::couchdb { -  file { '/etc/check_mk/logwatch.d/couchdb.cfg': -    source => 'puppet:///modules/site_check_mk/agent/logwatch/couchdb.cfg', +  # watch logs +  file { '/etc/check_mk/logwatch.d/bigcouch.cfg': +    source => 'puppet:///modules/site_check_mk/agent/logwatch/bigcouch.cfg',    } +  concat::fragment { 'syslog_couchdb': +    source  => 'puppet:///modules/site_check_mk/agent/logwatch/syslog/couchdb.cfg', +    target  => '/etc/check_mk/logwatch.d/syslog.cfg', +    order   => '02'; +  } + +  # check bigcouch processes +  file_line { +    'Bigcouch_epmd_procs': +      line => 'Bigcouch_epmd_procs  /usr/lib/nagios/plugins/check_procs -w 1:1 -c 1:1 -a /opt/bigcouch/erts-5.9.1/bin/epmd', +      path => '/etc/check_mk/mrpe.cfg'; +    'Bigcouch_beam_procs': +      line => 'Bigcouch_beam_procs  /usr/lib/nagios/plugins/check_procs -w 1:1 -c 1:1 -a /opt/bigcouch/erts-5.9.1/bin/beam', +      path => '/etc/check_mk/mrpe.cfg'; +  } -  # local custom checks -  file { '/usr/lib/check_mk_agent/local/check_bigcouch_errors.sh': -    ensure  => link, -    target  => '/srv/leap/couchdb/scripts/tests/check_bigcouch_errors.sh', -    require => Vcsrepo['/srv/leap/couchdb/scripts'] +  # check open files for bigcouch proc +  include site_check_mk::agent::package::perl_plugin +  file { '/srv/leap/nagios/plugins/check_unix_open_fds.pl': +    source => 'puppet:///modules/site_check_mk/agent/nagios_plugins/check_unix_open_fds.pl', +    mode   => '0755' +  } +  file_line { +    'Bigcouch_open_files': +      line => 'Bigcouch_open_files /srv/leap/nagios/plugins/check_unix_open_fds.pl -a beam -w 750,750 -c 1000,1000', +      path => '/etc/check_mk/mrpe.cfg';    }  } diff --git a/puppet/modules/site_check_mk/manifests/agent/haproxy.pp b/puppet/modules/site_check_mk/manifests/agent/haproxy.pp new file mode 100644 index 00000000..e7986db1 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/haproxy.pp @@ -0,0 +1,12 @@ +class site_check_mk::agent::haproxy { + +  include site_check_mk::agent::package::nagios_plugins_contrib + +  # local nagios plugin checks via mrpe +  file_line { +    'haproxy': +      line => 'Haproxy  /usr/lib/nagios/plugins/check_haproxy -u "http://localhost:8000/haproxy;csv"', +      path => '/etc/check_mk/mrpe.cfg'; +  } + +} diff --git a/puppet/modules/site_check_mk/manifests/agent/package/nagios_plugins_contrib.pp b/puppet/modules/site_check_mk/manifests/agent/package/nagios_plugins_contrib.pp new file mode 100644 index 00000000..95a60d17 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/package/nagios_plugins_contrib.pp @@ -0,0 +1,5 @@ +class site_check_mk::agent::package::nagios_plugins_contrib  { +  package { 'nagios-plugins-contrib': +    ensure => installed, +  } +} diff --git a/puppet/modules/site_check_mk/manifests/agent/package/perl_plugin.pp b/puppet/modules/site_check_mk/manifests/agent/package/perl_plugin.pp new file mode 100644 index 00000000..4feda375 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/package/perl_plugin.pp @@ -0,0 +1,5 @@ +class site_check_mk::agent::package::perl_plugin  { +  package { 'libnagios-plugin-perl': +    ensure => installed, +  } +} diff --git a/puppet/modules/site_check_mk/manifests/agent/stunnel.pp b/puppet/modules/site_check_mk/manifests/agent/stunnel.pp new file mode 100644 index 00000000..64022824 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/stunnel.pp @@ -0,0 +1,9 @@ +class site_check_mk::agent::stunnel { + +  concat::fragment { 'syslog_stunnel': +    source  => 'puppet:///modules/site_check_mk/agent/logwatch/syslog/stunnel.cfg', +    target  => '/etc/check_mk/logwatch.d/syslog.cfg', +    order   => '02'; +  } + +} diff --git a/puppet/modules/site_check_mk/manifests/agent/tapicero.pp b/puppet/modules/site_check_mk/manifests/agent/tapicero.pp index dc785e52..369ed00b 100644 --- a/puppet/modules/site_check_mk/manifests/agent/tapicero.pp +++ b/puppet/modules/site_check_mk/manifests/agent/tapicero.pp @@ -1,7 +1,7 @@  class site_check_mk::agent::tapicero {    concat::fragment { 'syslog_tapicero': -    source  => 'puppet:///modules/site_check_mk/agent/logwatch/tapicero.cfg', +    source  => 'puppet:///modules/site_check_mk/agent/logwatch/syslog/tapicero.cfg',      target  => '/etc/check_mk/logwatch.d/syslog.cfg',      order   => '02';    } diff --git a/puppet/modules/site_check_mk/manifests/agent/webapp.pp b/puppet/modules/site_check_mk/manifests/agent/webapp.pp new file mode 100644 index 00000000..dc2baf19 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/webapp.pp @@ -0,0 +1,9 @@ +class site_check_mk::agent::webapp { + +  concat::fragment { 'syslog_webapp': +    source  => 'puppet:///modules/site_check_mk/agent/logwatch/syslog/webapp.cfg', +    target  => '/etc/check_mk/logwatch.d/syslog.cfg', +    order   => '02'; +  } + +} diff --git a/puppet/modules/site_check_mk/manifests/server.pp b/puppet/modules/site_check_mk/manifests/server.pp index e77862e5..0c98cd5a 100644 --- a/puppet/modules/site_check_mk/manifests/server.pp +++ b/puppet/modules/site_check_mk/manifests/server.pp @@ -4,10 +4,11 @@ class site_check_mk::server {    $pubkey   = $ssh_hash['authorized_keys']['monitor']['key']    $type     = $ssh_hash['authorized_keys']['monitor']['type']    $seckey   = $ssh_hash['monitor']['private_key'] -  $ssh_port = $ssh_hash['port']    $nagios_hiera   = hiera_hash('nagios') -  $hosts          = $nagios_hiera['hosts'] +  $nagios_hosts   = $nagios_hiera['hosts'] + +  $hosts          = hiera_hash('hosts')    $all_hosts      = inline_template ('<% @hosts.keys.sort.each do |key| -%>"<%= @hosts[key]["domain_internal"] %>", <% end -%>')    package { 'check-mk-server': @@ -43,6 +44,13 @@ class site_check_mk::server {        content => "${type} ${pubkey} monitor",        owner   => 'nagios',        mode    => '0644'; +    # check_icmp must be suid root or called by sudo +    # see https://leap.se/code/issues/5171 +    '/usr/lib/nagios/plugins/check_icmp': +      mode    => '4755', +      require => Package['nagios-plugins-basic'];    } + +    include check_mk::agent::local_checks  } diff --git a/puppet/modules/site_check_mk/templates/use_ssh.mk b/puppet/modules/site_check_mk/templates/use_ssh.mk index 4c5523db..0bebebcf 100644 --- a/puppet/modules/site_check_mk/templates/use_ssh.mk +++ b/puppet/modules/site_check_mk/templates/use_ssh.mk @@ -1,5 +1,6 @@  # http://mathias-kettner.de/checkmk_datasource_programs.html  datasource_programs = [ - ( "ssh -l root -i /etc/check_mk/.ssh/id_rsa -p <%= @ssh_port %> <HOST> check_mk_agent", ALL_HOSTS ), -] +<% nagios_hosts.sort.each do |name,config| %> + ( "ssh -l root -i /etc/check_mk/.ssh/id_rsa -p <%=config['ssh_port']%> <%=config['domain_internal']%> check_mk_agent", [ "<%=config['domain_internal']%>" ], ),<%- end -%> +] diff --git a/puppet/modules/site_haproxy/files/haproxy-stats.cfg b/puppet/modules/site_haproxy/files/haproxy-stats.cfg new file mode 100644 index 00000000..e6335ba2 --- /dev/null +++ b/puppet/modules/site_haproxy/files/haproxy-stats.cfg @@ -0,0 +1,6 @@ +# provide access to stats for the nagios plugin +listen stats 127.0.0.1:8000 +    mode http +    stats enable +    stats uri /haproxy + diff --git a/puppet/modules/site_haproxy/manifests/init.pp b/puppet/modules/site_haproxy/manifests/init.pp index 602e26be..1a681373 100644 --- a/puppet/modules/site_haproxy/manifests/init.pp +++ b/puppet/modules/site_haproxy/manifests/init.pp @@ -22,4 +22,11 @@ class site_haproxy {      }    } +  # monitor haproxy +  concat::fragment { 'stats': +    target => '/etc/haproxy/haproxy.cfg', +    order  => '90', +    source => 'puppet:///modules/site_haproxy/haproxy-stats.cfg'; +  } +  include site_check_mk::agent::haproxy  } diff --git a/puppet/modules/site_nagios/files/configs/Debian/nagios.cfg b/puppet/modules/site_nagios/files/configs/Debian/nagios.cfg index 61d9f2da..9bd3da28 100644 --- a/puppet/modules/site_nagios/files/configs/Debian/nagios.cfg +++ b/puppet/modules/site_nagios/files/configs/Debian/nagios.cfg @@ -251,7 +251,7 @@ log_archive_path=/var/log/nagios3/archives  # If you want messages logged to the syslog facility, as well as the  # Nagios log file set this option to 1.  If not, set it to 0. -use_syslog=1 +use_syslog=0 diff --git a/puppet/modules/site_nagios/manifests/add_host_services.pp b/puppet/modules/site_nagios/manifests/add_host_services.pp index 2d615ff1..279809d1 100644 --- a/puppet/modules/site_nagios/manifests/add_host_services.pp +++ b/puppet/modules/site_nagios/manifests/add_host_services.pp @@ -1,7 +1,9 @@  define site_nagios::add_host_services ( +  $domain_full_suffix,    $domain_internal,    $ip_address,    $services, +  $ssh_port,    $openvpn_gateway_address='' ) {      $nagios_hostname = $domain_internal diff --git a/puppet/modules/site_nagios/manifests/server.pp b/puppet/modules/site_nagios/manifests/server.pp index ca38d7fc..9aae8ae8 100644 --- a/puppet/modules/site_nagios/manifests/server.pp +++ b/puppet/modules/site_nagios/manifests/server.pp @@ -7,7 +7,7 @@ class site_nagios::server inherits nagios::base {    $nagios_hiera   = hiera('nagios')    $nagiosadmin_pw = htpasswd_sha1($nagios_hiera['nagiosadmin_pw']) -  $hosts          = $nagios_hiera['hosts'] +  $nagios_hosts   = $nagios_hiera['hosts']    include nagios::defaults    include nagios::base @@ -43,7 +43,7 @@ class site_nagios::server inherits nagios::base {      group  => 'nagios',    } -  create_resources ( site_nagios::add_host_services, $hosts ) +  create_resources ( site_nagios::add_host_services, $nagios_hosts )    include site_nagios::server::apache    include site_check_mk::server diff --git a/puppet/modules/site_stunnel/manifests/clients.pp b/puppet/modules/site_stunnel/manifests/clients.pp index 791fdbc5..837665a3 100644 --- a/puppet/modules/site_stunnel/manifests/clients.pp +++ b/puppet/modules/site_stunnel/manifests/clients.pp @@ -28,4 +28,6 @@ define site_stunnel::clients (        Class['Site_config::X509::Ca'] ];    } + +  include site_check_mk::agent::stunnel  } diff --git a/puppet/modules/site_webapp/manifests/init.pp b/puppet/modules/site_webapp/manifests/init.pp index f8216aa4..d02a7261 100644 --- a/puppet/modules/site_webapp/manifests/init.pp +++ b/puppet/modules/site_webapp/manifests/init.pp @@ -157,5 +157,5 @@ class site_webapp {    }    include site_shorewall::webapp - +  include site_check_mk::agent::webapp  } | 
