sitesummary/0000755000000000000000000000000012224030710010315 5ustar sitesummary/sitesummary-update-nagios0000755000000000000000000000342011331104101015354 0ustar #!/bin/sh # # Author: Petter Reinholdtsen set -e nodes=/usr/sbin/sitesummary-nodes nagiosopts="" # Specifies where to save the automatically generated nagios # configuration. Add NAGIOSCFG="/etc/nagios3/sitesummary.cfg" to # /etc/default/nagios3 to get Nagios to use this automatically # generated configuration NAGIOSDIR=/var/lib/sitesummary if [ -f /etc/sitesummary/collector.cfg ] ; then . /etc/sitesummary/collector.cfg fi # The storage area is not configurable, because too many scripts have # it hardcoded entriesdir=/var/lib/sitesummary/entries generate_nagios_config() { ( $nodes -n $nagiosopts if [ -f $NAGIOSDIR/nagios-generated.cfg.post ] ; then cat $NAGIOSDIR/nagios-generated.cfg.post fi true ) > $NAGIOSDIR/nagios-generated.cfg.new && \ chmod a+r $NAGIOSDIR/nagios-generated.cfg.new if [ ! -s $NAGIOSDIR/nagios-generated.cfg.new ] || \ cmp -s $NAGIOSDIR/nagios-generated.cfg.new \ $NAGIOSDIR/nagios-generated.cfg then rm $NAGIOSDIR/nagios-generated.cfg.new false else mv $NAGIOSDIR/nagios-generated.cfg.new $NAGIOSDIR/nagios-generated.cfg true fi } # Only enable if nagios v3 and sitesummary is installed. if [ -f /etc/init.d/nagios3 ] && [ -x $nodes ]; then # Only reload nagios if the configuration changed if generate_nagios_config ; then # subshell to avoid passing all variables from # /etc/default/nagios3 to other parts of this script ( if [ -r /etc/default/nagios3 ] ; then . /etc/default/nagios3 fi # Only reload nagios if the sitesummary config is the active # one and nagios3 is currently running. if [ /etc/nagios3/sitesummary.cfg = "$NAGIOSCFG" ] && \ invoke-rc.d nagios3 status >/dev/null ; then invoke-rc.d nagios3 reload >/dev/null fi ) fi fi sitesummary/expire-entry0000755000000000000000000000051011331104101012664 0ustar #!/bin/sh # # Expire an sitesummary entry, calling the expire hooks first and then # remove the entry. set -e entrydir="$1" logger -t sitesummary "Expiring sitesummary entry in $entrydir" expiredir=/usr/lib/sitesummary/expire.d if [ -d "$expiredir" ] ; then run-parts --arg="$entrydir" $expiredir fi rm -rf "$entrydir" sitesummary/sitesummary-nodes0000755000000000000000000004776512142701747013774 0ustar #!/usr/bin/perl # # Generate list of nodes to load from /etc/munin/munin.conf to check # all the machines reporting to sitesummary. use strict; use warnings; use SiteSummary; use Getopt::Std; use Socket; use File::Temp qw(tempfile); use vars qw($npingwarn $npingwarnp $npingcrit $npingcritp); sub usage { print <) { chomp; my ($hostname, $nagioscheck) = split(/ /, $_, 2); $nagios_ignore{"$hostname $nagioscheck"} = 1; } close $fh; } generate_nagios_config(); } else { print_list(); } exit 0; sub handle_host { my $hostid = shift; my $address = get_dns_address($hostid); $hostnames{$address} = $hostid; } sub print_list { for my $hostname (sort keys %hostnames) { print "$hostname\n"; } } sub get_localhost_hostid { my ($fh, $filename) = tempfile(); `/sbin/ifconfig -a > $filename`; my $localhost_hostid = get_unique_ether_id($filename); unlink $filename; return $localhost_hostid; } # Get an IP address, try to resolve it in DNS , and return the IP # address if no DNS reverse entry was found. sub get_dnsnameorip { my $ipaddr = shift; my $resolved; $resolved = gethostbyaddr(inet_aton($ipaddr), AF_INET); return $resolved || $ipaddr; } sub is_munin_client { my $hostid = shift; return is_pkg_installed($hostid, "munin-node"); } sub is_nagios_client { my $hostid = shift; return is_pkg_installed($hostid, "nagios-nrpe-server") || is_pkg_installed($hostid, "nagios-text") || is_pkg_installed($hostid, "nagios2") || is_pkg_installed($hostid, "nagios3"); } sub print_munin_list { for my $hostname (sort keys %hostnames) { next unless (is_munin_client($hostnames{$hostname})); # Using hostname as address, to avoid hardcoding IP addresses in # the file. Might be an idea to fetch the IP address from # system/ifconfig-a print <) { chomp; if (m/^Device ID$/) { $id = <$fh>; chomp $id; $id =~ s/^\s+value:\s+(\S)\s*/$1/; } if (m/^Addresses$/) { $addr = <$fh>; chomp $addr; $addr =~ s/^\s+value:\s+(\S)\s*/$1/; $switch{$addr} = $id; } } close($fh); } } return %switch ? %switch : (); } sub is_remote_nrpe_config_active { my $hostid = shift; my $path = get_filepath_current($hostid, "/nagios/sitesummary-nrpe.cfg"); if (open(my $fh, $path)) { while (<$fh>) { if (m/^dont_blame_nrpe=1$/) { close($fh); return "args"; } } close($fh); return "noargs"; } return undef; } sub print_nagios_service_check { my ($remote, $hostname, $description, $check, $check_args) = @_; my $template = "server-service"; return if exists $nagios_ignore{"$hostname $description"}; my $cmd; if ($remote) { $cmd = "check_nrpe!$check"; if (defined $check_args) { $check_args =~ s/!/ /g; $cmd .= " -a $check_args"; } } else { $cmd = "$check"; $cmd .= "!$check_args" if defined $check_args; } print < { name => 'samba', package => 'samba' }, 389 => { name => 'ldap', package => 'slapd' }, 4949 => { name => 'munin', package => 'munin-node' }, ); for my $port (sort { $a <=> $b } keys %tcpservices) { next if (exists $tcpservices{$port}->{package} && ! is_pkg_installed($hostid, $tcpservices{$port}->{package})); my $servicename = $tcpservices{$port}->{name}; print_nagios_service_check(0, $hostname, $servicename, "check_tcp", $port); } # Check SSH server print_nagios_service_check(0, $hostname, "ssh", "check_ssh") if is_pkg_installed($hostid, "openssh-server"); print_nagios_service_check(0, $hostname, "http", "check_http") if (is_pkg_installed($hostid, "apache") || is_pkg_installed($hostid, "apache2")); # Check XFS port only if we can see that it is listening on TCP if (is_pkg_installed($hostid, "xfs")) { my $path = get_filepath_current($hostid, "/system/x11-fs-config"); if ( -e $path ) { my $tcp = 1; open (my $fh, "<", $path) || die "unable to read from $path"; while (<$fh>) { chomp; s/\#.+$//; $tcp = 0 if m/^no-listen\s*=\s*tcp\s*$/; } close($fh); print_nagios_service_check(0, $hostname, "xfs", "check_tcp", 7100) if ($tcp); } } print_nagios_service_check(0, $hostname, "cups queue", "check_cups_queue") if (is_pkg_installed($hostid, "cups") && is_pkg_installed($hostid, "cups-client")); # The rest of the checks only work if NRPE is installed and configured next unless ((!$remote && $nagiosclient) || ($remote && defined $nrpestatus)); # These work without any argument passing. # Check for APT upgrades print_nagios_service_check($remote, $hostname, "apt-updates", "check_apt"); # Check if a kernel reboot is needed print_nagios_service_check($remote, $hostname, "kernel status", "check_kernel_status"); # Detect bad DNS servers print_nagios_service_check($remote, $hostname, "/etc/resolv.conf", "check_etc_resolv"); # Detect hosts entries not matching DNS entries print_nagios_service_check($remote, $hostname, "/etc/hosts", "check_etc_hosts"); # Detect a shutdown in progress print_nagios_service_check($remote, $hostname, "shutdown status", "check_shutdown"); # The check_dhcp test do not seem to work. Check for the process existence. # print_nagios_service_check($remote, $hostname, "dhcp", # "check_dhcp") # if is_pkg_installed($hostid, "dhcp3-server"); print_nagios_service_check($remote, $hostname, "process - dhcpd3", "check_procs_dhcpd3", "1:15!1:25") if (is_pkg_installed($hostid, "dhcp3-server")); print_nagios_service_check($remote, $hostname, "process - dhcpd", "check_procs_dhcpd", "1:15!1:25") if (is_pkg_installed($hostid, "isc-dhcp-server")); # Check DNS server print_nagios_service_check($remote, $hostname, "dns", "check_dns", $localhostname) if (is_pkg_installed($hostid, "pdns-server") || is_pkg_installed($hostid, "bind9")); # Check FTP server print_nagios_service_check($remote, $hostname, "ftp", "check_ftp") if is_pkg_installed($hostid, "proftpd"); # Check IMAPS server print_nagios_service_check($remote, $hostname, "imaps", "check_imaps") if is_pkg_installed($hostid, "courier-imap-ssl"); # check software raid status if any is active if ( -e get_filepath_current($hostid, "/system/mdstat")) { my $fh; if (open($fh, get_filepath_current($hostid, "/system/mdstat")) && grep(/^md\d+ :/, <$fh>)) { print_nagios_service_check($remote, $hostname, "sw-raid", "check_linux_raid"); } close($fh); } # Check NFS server print_nagios_service_check($remote, $hostname, "nfs", "check_nfs") if is_pkg_installed($hostid, "nfs-kernel-server"); print_nagios_service_check($remote, $hostname, "smtp", "check_smtp") if (is_pkg_installed($hostid, "exim4-daemon-heavy") || is_pkg_installed($hostid, "exim4-daemon-light")); # These need argument passing (as in dont_blame_nrpe=1) next unless ((!$remote && $nagiosclient) || ($remote && "args" eq $nrpestatus)); print_nagios_service_check($remote, $hostname, "swap", "check_swap", "10%!5%"); my $proclimit = "500!1000"; # Raise process count limits for thin clients, as # lots of users can log into these machines and run their # desktops from there. if (is_pkg_installed($hostid, "ltsp-server")) { $proclimit = "1500!2500"; } print_nagios_service_check($remote, $hostname, "processes total", "check_procs", $proclimit); print_nagios_service_check($remote, $hostname, "processes zombie", "check_procs_zombie", "20!100"); # Check unix load print_nagios_service_check($remote, $hostname, "load as in top", "check_load", "75,75,75!90,90,90"); # check disk free space my $path = get_filepath_current($hostid, "/system/procmounts"); if ( -e $path ) { open (F, "<", $path) || die "unable to read from $path"; my %checked; while () { chomp; my ($device, $partition, $fs, $opts) = split; next if (exists $checked{$device}); # Avoid system file systems and non-local file systems. next if ($fs eq "devpts" || $fs eq "anon_inodefs" || $fs eq "autofs" || $fs eq "bdev" || $fs eq "binfmt_misc" || $fs eq "cgroup" || $fs eq "cifs" || $fs eq "cpuset" || $fs eq "debugfs" || $fs eq "fuse.ltspfs" || $fs eq "fusectl" || $fs eq "hugetlbfs" || $fs eq "inotifyfs" || $fs eq "iso9660" || $fs eq "mqueue" || $fs eq "nfs" || $fs eq "nfs4" || $fs eq "nfsd" || $fs eq "oprofilefs" || $fs eq "pipefs" || $fs eq "proc" || $fs eq "ramfs" || $fs eq "rootfs" || $fs eq "rpc_pipefs" || $fs eq "securityfs" || $fs eq "smb" || $fs eq "sockfs" || $fs eq "sysfs" || $fs eq "tmpfs" || $fs eq "devtmpfs" || $fs eq "xenfs" || $fs eq "usbfs"); $checked{$device} = 1; my $warn = 10; my $crit = 5; print_nagios_service_check($remote, $hostname, "disk $partition", "check_disk", "$warn%!$crit%!$partition"); } } # check munin if munin-node is installed # check hw raid status # check hardware status # check LDAP and LDAPS using the protocol, module present in # nagios-plugins-basic print_nagios_service_check(0, $hostname, "ldap root DSE", "check_ldap_root") if is_pkg_installed($hostid, "slapd"); # Check Squid web proxy print_nagios_service_check($remote, $hostname, "squid", "check_squid", "3128!http://www") if is_pkg_installed($hostid, "squid"); print_nagios_service_check($remote, $hostname, "ntp time server", "check_ntp", "-H!localhost") if (is_pkg_installed($hostid, "ntp") || is_pkg_installed($hostid, "ntp-server")); # Detect if cron no longer is running print_nagios_service_check($remote, $hostname, "process - cron", "check_procs_cron", "1:15!1:25") if (is_pkg_installed($hostid, "cron")); } if (%hostgroup) { print < = See documentation event_broker_options=-1 # EVENT BROKER MODULE(S) # This directive is used to specify an event broker module that should # by loaded by Nagios at startup. Use multiple directives if you want # to load more than one module. Arguments that should be passed to # the module at startup are seperated from the module path by a space. # #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # # Do NOT overwrite modules while they are being used by Nagios or Nagios # will crash in a fiery display of SEGFAULT glory. This is a bug/limitation # either in dlopen(), the kernel, and/or the filesystem. And maybe Nagios... # # The correct/safe way of updating a module is by using one of these methods: # 1. Shutdown Nagios, replace the module file, restart Nagios # 2. Delete the original module file, move the new module file into place, restart Nagios # # Example: # # broker_module= [moduleargs] #broker_module=/somewhere/module1.o #broker_module=/somewhere/module2.o arg1 arg2=3 debug=0 # LOG ROTATION METHOD # This is the log rotation method that Nagios should use to rotate # the main log file. Values are as follows.. # n = None - don't rotate the log # h = Hourly rotation (top of the hour) # d = Daily rotation (midnight every day) # w = Weekly rotation (midnight on Saturday evening) # m = Monthly rotation (midnight last day of month) log_rotation_method=d # LOG ARCHIVE PATH # This is the directory where archived (rotated) log files should be # placed (assuming you've chosen to do log rotation). log_archive_path=/var/log/nagios3/archives # LOGGING OPTIONS # 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 # NOTIFICATION LOGGING OPTION # If you don't want notifications to be logged, set this value to 0. # If notifications should be logged, set the value to 1. log_notifications=1 # SERVICE RETRY LOGGING OPTION # If you don't want service check retries to be logged, set this value # to 0. If retries should be logged, set the value to 1. log_service_retries=1 # HOST RETRY LOGGING OPTION # If you don't want host check retries to be logged, set this value to # 0. If retries should be logged, set the value to 1. log_host_retries=1 # EVENT HANDLER LOGGING OPTION # If you don't want host and service event handlers to be logged, set # this value to 0. If event handlers should be logged, set the value # to 1. log_event_handlers=1 # INITIAL STATES LOGGING OPTION # If you want Nagios to log all initial host and service states to # the main log file (the first time the service or host is checked) # you can enable this option by setting this value to 1. If you # are not using an external application that does long term state # statistics reporting, you do not need to enable this option. In # this case, set the value to 0. log_initial_states=0 # EXTERNAL COMMANDS LOGGING OPTION # If you don't want Nagios to log external commands, set this value # to 0. If external commands should be logged, set this value to 1. # Note: This option does not include logging of passive service # checks - see the option below for controlling whether or not # passive checks are logged. log_external_commands=1 # PASSIVE CHECKS LOGGING OPTION # If you don't want Nagios to log passive host and service checks, set # this value to 0. If passive checks should be logged, set # this value to 1. log_passive_checks=1 # GLOBAL HOST AND SERVICE EVENT HANDLERS # These options allow you to specify a host and service event handler # command that is to be run for every host or service state change. # The global event handler is executed immediately prior to the event # handler that you have optionally specified in each host or # service definition. The command argument is the short name of a # command definition that you define in your host configuration file. # Read the HTML docs for more information. #global_host_event_handler=somecommand #global_service_event_handler=somecommand # SERVICE INTER-CHECK DELAY METHOD # This is the method that Nagios should use when initially # "spreading out" service checks when it starts monitoring. The # default is to use smart delay calculation, which will try to # space all service checks out evenly to minimize CPU load. # Using the dumb setting will cause all checks to be scheduled # at the same time (with no delay between them)! This is not a # good thing for production, but is useful when testing the # parallelization functionality. # n = None - don't use any delay between checks # d = Use a "dumb" delay of 1 second between checks # s = Use "smart" inter-check delay calculation # x.xx = Use an inter-check delay of x.xx seconds service_inter_check_delay_method=s # MAXIMUM SERVICE CHECK SPREAD # This variable determines the timeframe (in minutes) from the # program start time that an initial check of all services should # be completed. Default is 30 minutes. max_service_check_spread=30 # SERVICE CHECK INTERLEAVE FACTOR # This variable determines how service checks are interleaved. # Interleaving the service checks allows for a more even # distribution of service checks and reduced load on remote # hosts. Setting this value to 1 is equivalent to how versions # of Nagios previous to 0.0.5 did service checks. Set this # value to s (smart) for automatic calculation of the interleave # factor unless you have a specific reason to change it. # s = Use "smart" interleave factor calculation # x = Use an interleave factor of x, where x is a # number greater than or equal to 1. service_interleave_factor=s # HOST INTER-CHECK DELAY METHOD # This is the method that Nagios should use when initially # "spreading out" host checks when it starts monitoring. The # default is to use smart delay calculation, which will try to # space all host checks out evenly to minimize CPU load. # Using the dumb setting will cause all checks to be scheduled # at the same time (with no delay between them)! # n = None - don't use any delay between checks # d = Use a "dumb" delay of 1 second between checks # s = Use "smart" inter-check delay calculation # x.xx = Use an inter-check delay of x.xx seconds host_inter_check_delay_method=s # MAXIMUM HOST CHECK SPREAD # This variable determines the timeframe (in minutes) from the # program start time that an initial check of all hosts should # be completed. Default is 30 minutes. max_host_check_spread=30 # MAXIMUM CONCURRENT SERVICE CHECKS # This option allows you to specify the maximum number of # service checks that can be run in parallel at any given time. # Specifying a value of 1 for this variable essentially prevents # any service checks from being parallelized. A value of 0 # will not restrict the number of concurrent checks that are # being executed. max_concurrent_checks=0 # HOST AND SERVICE CHECK REAPER FREQUENCY # This is the frequency (in seconds!) that Nagios will process # the results of host and service checks. check_result_reaper_frequency=10 # MAX CHECK RESULT REAPER TIME # This is the max amount of time (in seconds) that a single # check result reaper event will be allowed to run before # returning control back to Nagios so it can perform other # duties. max_check_result_reaper_time=30 # CHECK RESULT PATH # This is directory where Nagios stores the results of host and # service checks that have not yet been processed. # # Note: Make sure that only one instance of Nagios has access # to this directory! check_result_path=/var/lib/nagios3/spool/checkresults # MAX CHECK RESULT FILE AGE # This option determines the maximum age (in seconds) which check # result files are considered to be valid. Files older than this # threshold will be mercilessly deleted without further processing. max_check_result_file_age=3600 # CACHED HOST CHECK HORIZON # This option determines the maximum amount of time (in seconds) # that the state of a previous host check is considered current. # Cached host states (from host checks that were performed more # recently that the timeframe specified by this value) can immensely # improve performance in regards to the host check logic. # Too high of a value for this option may result in inaccurate host # states being used by Nagios, while a lower value may result in a # performance hit for host checks. Use a value of 0 to disable host # check caching. cached_host_check_horizon=15 # CACHED SERVICE CHECK HORIZON # This option determines the maximum amount of time (in seconds) # that the state of a previous service check is considered current. # Cached service states (from service checks that were performed more # recently that the timeframe specified by this value) can immensely # improve performance in regards to predictive dependency checks. # Use a value of 0 to disable service check caching. cached_service_check_horizon=15 # ENABLE PREDICTIVE HOST DEPENDENCY CHECKS # This option determines whether or not Nagios will attempt to execute # checks of hosts when it predicts that future dependency logic test # may be needed. These predictive checks can help ensure that your # host dependency logic works well. # Values: # 0 = Disable predictive checks # 1 = Enable predictive checks (default) enable_predictive_host_dependency_checks=1 # ENABLE PREDICTIVE SERVICE DEPENDENCY CHECKS # This option determines whether or not Nagios will attempt to execute # checks of service when it predicts that future dependency logic test # may be needed. These predictive checks can help ensure that your # service dependency logic works well. # Values: # 0 = Disable predictive checks # 1 = Enable predictive checks (default) enable_predictive_service_dependency_checks=1 # SOFT STATE DEPENDENCIES # This option determines whether or not Nagios will use soft state # information when checking host and service dependencies. Normally # Nagios will only use the latest hard host or service state when # checking dependencies. If you want it to use the latest state (regardless # of whether its a soft or hard state type), enable this option. # Values: # 0 = Don't use soft state dependencies (default) # 1 = Use soft state dependencies soft_state_dependencies=0 # TIME CHANGE ADJUSTMENT THRESHOLDS # These options determine when Nagios will react to detected changes # in system time (either forward or backwards). #time_change_threshold=900 # AUTO-RESCHEDULING OPTION # This option determines whether or not Nagios will attempt to # automatically reschedule active host and service checks to # "smooth" them out over time. This can help balance the load on # the monitoring server. # WARNING: THIS IS AN EXPERIMENTAL FEATURE - IT CAN DEGRADE # PERFORMANCE, RATHER THAN INCREASE IT, IF USED IMPROPERLY auto_reschedule_checks=0 # AUTO-RESCHEDULING INTERVAL # This option determines how often (in seconds) Nagios will # attempt to automatically reschedule checks. This option only # has an effect if the auto_reschedule_checks option is enabled. # Default is 30 seconds. # WARNING: THIS IS AN EXPERIMENTAL FEATURE - IT CAN DEGRADE # PERFORMANCE, RATHER THAN INCREASE IT, IF USED IMPROPERLY auto_rescheduling_interval=30 # AUTO-RESCHEDULING WINDOW # This option determines the "window" of time (in seconds) that # Nagios will look at when automatically rescheduling checks. # Only host and service checks that occur in the next X seconds # (determined by this variable) will be rescheduled. This option # only has an effect if the auto_reschedule_checks option is # enabled. Default is 180 seconds (3 minutes). # WARNING: THIS IS AN EXPERIMENTAL FEATURE - IT CAN DEGRADE # PERFORMANCE, RATHER THAN INCREASE IT, IF USED IMPROPERLY auto_rescheduling_window=180 # SLEEP TIME # This is the number of seconds to sleep between checking for system # events and service checks that need to be run. sleep_time=0.25 # TIMEOUT VALUES # These options control how much time Nagios will allow various # types of commands to execute before killing them off. Options # are available for controlling maximum time allotted for # service checks, host checks, event handlers, notifications, the # ocsp command, and performance data commands. All values are in # seconds. service_check_timeout=60 host_check_timeout=30 event_handler_timeout=30 notification_timeout=30 ocsp_timeout=5 perfdata_timeout=5 # RETAIN STATE INFORMATION # This setting determines whether or not Nagios will save state # information for services and hosts before it shuts down. Upon # startup Nagios will reload all saved service and host state # information before starting to monitor. This is useful for # maintaining long-term data on state statistics, etc, but will # slow Nagios down a bit when it (re)starts. Since its only # a one-time penalty, I think its well worth the additional # startup delay. retain_state_information=1 # STATE RETENTION FILE # This is the file that Nagios should use to store host and # service state information before it shuts down. The state # information in this file is also read immediately prior to # starting to monitor the network when Nagios is restarted. # This file is used only if the preserve_state_information # variable is set to 1. state_retention_file=/var/lib/nagios3/retention.dat # RETENTION DATA UPDATE INTERVAL # This setting determines how often (in minutes) that Nagios # will automatically save retention data during normal operation. # If you set this value to 0, Nagios will not save retention # data at regular interval, but it will still save retention # data before shutting down or restarting. If you have disabled # state retention, this option has no effect. retention_update_interval=60 # USE RETAINED PROGRAM STATE # This setting determines whether or not Nagios will set # program status variables based on the values saved in the # retention file. If you want to use retained program status # information, set this value to 1. If not, set this value # to 0. use_retained_program_state=1 # USE RETAINED SCHEDULING INFO # This setting determines whether or not Nagios will retain # the scheduling info (next check time) for hosts and services # based on the values saved in the retention file. If you # If you want to use retained scheduling info, set this # value to 1. If not, set this value to 0. use_retained_scheduling_info=1 # RETAINED ATTRIBUTE MASKS (ADVANCED FEATURE) # The following variables are used to specify specific host and # service attributes that should *not* be retained by Nagios during # program restarts. # # The values of the masks are bitwise ANDs of values specified # by the "MODATTR_" definitions found in include/common.h. # For example, if you do not want the current enabled/disabled state # of flap detection and event handlers for hosts to be retained, you # would use a value of 24 for the host attribute mask... # MODATTR_EVENT_HANDLER_ENABLED (8) + MODATTR_FLAP_DETECTION_ENABLED (16) = 24 # This mask determines what host attributes are not retained retained_host_attribute_mask=0 # This mask determines what service attributes are not retained retained_service_attribute_mask=0 # These two masks determine what process attributes are not retained. # There are two masks, because some process attributes have host and service # options. For example, you can disable active host checks, but leave active # service checks enabled. retained_process_host_attribute_mask=0 retained_process_service_attribute_mask=0 # These two masks determine what contact attributes are not retained. # There are two masks, because some contact attributes have host and # service options. For example, you can disable host notifications for # a contact, but leave service notifications enabled for them. retained_contact_host_attribute_mask=0 retained_contact_service_attribute_mask=0 # INTERVAL LENGTH # This is the seconds per unit interval as used in the # host/contact/service configuration files. Setting this to 60 means # that each interval is one minute long (60 seconds). Other settings # have not been tested much, so your mileage is likely to vary... interval_length=60 # AGGRESSIVE HOST CHECKING OPTION # If you don't want to turn on aggressive host checking features, set # this value to 0 (the default). Otherwise set this value to 1 to # enable the aggressive check option. Read the docs for more info # on what aggressive host check is or check out the source code in # base/checks.c use_aggressive_host_checking=0 # SERVICE CHECK EXECUTION OPTION # This determines whether or not Nagios will actively execute # service checks when it initially starts. If this option is # disabled, checks are not actively made, but Nagios can still # receive and process passive check results that come in. Unless # you're implementing redundant hosts or have a special need for # disabling the execution of service checks, leave this enabled! # Values: 1 = enable checks, 0 = disable checks execute_service_checks=1 # PASSIVE SERVICE CHECK ACCEPTANCE OPTION # This determines whether or not Nagios will accept passive # service checks results when it initially (re)starts. # Values: 1 = accept passive checks, 0 = reject passive checks accept_passive_service_checks=1 # HOST CHECK EXECUTION OPTION # This determines whether or not Nagios will actively execute # host checks when it initially starts. If this option is # disabled, checks are not actively made, but Nagios can still # receive and process passive check results that come in. Unless # you're implementing redundant hosts or have a special need for # disabling the execution of host checks, leave this enabled! # Values: 1 = enable checks, 0 = disable checks execute_host_checks=1 # PASSIVE HOST CHECK ACCEPTANCE OPTION # This determines whether or not Nagios will accept passive # host checks results when it initially (re)starts. # Values: 1 = accept passive checks, 0 = reject passive checks accept_passive_host_checks=1 # NOTIFICATIONS OPTION # This determines whether or not Nagios will sent out any host or # service notifications when it is initially (re)started. # Values: 1 = enable notifications, 0 = disable notifications enable_notifications=1 # EVENT HANDLER USE OPTION # This determines whether or not Nagios will run any host or # service event handlers when it is initially (re)started. Unless # you're implementing redundant hosts, leave this option enabled. # Values: 1 = enable event handlers, 0 = disable event handlers enable_event_handlers=1 # PROCESS PERFORMANCE DATA OPTION # This determines whether or not Nagios will process performance # data returned from service and host checks. If this option is # enabled, host performance data will be processed using the # host_perfdata_command (defined below) and service performance # data will be processed using the service_perfdata_command (also # defined below). Read the HTML docs for more information on # performance data. # Values: 1 = process performance data, 0 = do not process performance data process_performance_data=0 # HOST AND SERVICE PERFORMANCE DATA PROCESSING COMMANDS # These commands are run after every host and service check is # performed. These commands are executed only if the # enable_performance_data option (above) is set to 1. The command # argument is the short name of a command definition that you # define in your host configuration file. Read the HTML docs for # more information on performance data. #host_perfdata_command=process-host-perfdata #service_perfdata_command=process-service-perfdata # HOST AND SERVICE PERFORMANCE DATA FILES # These files are used to store host and service performance data. # Performance data is only written to these files if the # enable_performance_data option (above) is set to 1. #host_perfdata_file=/tmp/host-perfdata #service_perfdata_file=/tmp/service-perfdata # HOST AND SERVICE PERFORMANCE DATA FILE TEMPLATES # These options determine what data is written (and how) to the # performance data files. The templates may contain macros, special # characters (\t for tab, \r for carriage return, \n for newline) # and plain text. A newline is automatically added after each write # to the performance data file. Some examples of what you can do are # shown below. #host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$ #service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$ # HOST AND SERVICE PERFORMANCE DATA FILE MODES # This option determines whether or not the host and service # performance data files are opened in write ("w") or append ("a") # mode. If you want to use named pipes, you should use the special # pipe ("p") mode which avoid blocking at startup, otherwise you will # likely want the defult append ("a") mode. #host_perfdata_file_mode=a #service_perfdata_file_mode=a # HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING INTERVAL # These options determine how often (in seconds) the host and service # performance data files are processed using the commands defined # below. A value of 0 indicates the files should not be periodically # processed. #host_perfdata_file_processing_interval=0 #service_perfdata_file_processing_interval=0 # HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING COMMANDS # These commands are used to periodically process the host and # service performance data files. The interval at which the # processing occurs is determined by the options above. #host_perfdata_file_processing_command=process-host-perfdata-file #service_perfdata_file_processing_command=process-service-perfdata-file # OBSESS OVER SERVICE CHECKS OPTION # This determines whether or not Nagios will obsess over service # checks and run the ocsp_command defined below. Unless you're # planning on implementing distributed monitoring, do not enable # this option. Read the HTML docs for more information on # implementing distributed monitoring. # Values: 1 = obsess over services, 0 = do not obsess (default) obsess_over_services=0 # OBSESSIVE COMPULSIVE SERVICE PROCESSOR COMMAND # This is the command that is run for every service check that is # processed by Nagios. This command is executed only if the # obsess_over_services option (above) is set to 1. The command # argument is the short name of a command definition that you # define in your host configuration file. Read the HTML docs for # more information on implementing distributed monitoring. #ocsp_command=somecommand # OBSESS OVER HOST CHECKS OPTION # This determines whether or not Nagios will obsess over host # checks and run the ochp_command defined below. Unless you're # planning on implementing distributed monitoring, do not enable # this option. Read the HTML docs for more information on # implementing distributed monitoring. # Values: 1 = obsess over hosts, 0 = do not obsess (default) obsess_over_hosts=0 # OBSESSIVE COMPULSIVE HOST PROCESSOR COMMAND # This is the command that is run for every host check that is # processed by Nagios. This command is executed only if the # obsess_over_hosts option (above) is set to 1. The command # argument is the short name of a command definition that you # define in your host configuration file. Read the HTML docs for # more information on implementing distributed monitoring. #ochp_command=somecommand # TRANSLATE PASSIVE HOST CHECKS OPTION # This determines whether or not Nagios will translate # DOWN/UNREACHABLE passive host check results into their proper # state for this instance of Nagios. This option is useful # if you have distributed or failover monitoring setup. In # these cases your other Nagios servers probably have a different # "view" of the network, with regards to the parent/child relationship # of hosts. If a distributed monitoring server thinks a host # is DOWN, it may actually be UNREACHABLE from the point of # this Nagios instance. Enabling this option will tell Nagios # to translate any DOWN or UNREACHABLE host states it receives # passively into the correct state from the view of this server. # Values: 1 = perform translation, 0 = do not translate (default) translate_passive_host_checks=0 # PASSIVE HOST CHECKS ARE SOFT OPTION # This determines whether or not Nagios will treat passive host # checks as being HARD or SOFT. By default, a passive host check # result will put a host into a HARD state type. This can be changed # by enabling this option. # Values: 0 = passive checks are HARD, 1 = passive checks are SOFT passive_host_checks_are_soft=0 # ORPHANED HOST/SERVICE CHECK OPTIONS # These options determine whether or not Nagios will periodically # check for orphaned host service checks. Since service checks are # not rescheduled until the results of their previous execution # instance are processed, there exists a possibility that some # checks may never get rescheduled. A similar situation exists for # host checks, although the exact scheduling details differ a bit # from service checks. Orphaned checks seem to be a rare # problem and should not happen under normal circumstances. # If you have problems with service checks never getting # rescheduled, make sure you have orphaned service checks enabled. # Values: 1 = enable checks, 0 = disable checks check_for_orphaned_services=1 check_for_orphaned_hosts=1 # SERVICE FRESHNESS CHECK OPTION # This option determines whether or not Nagios will periodically # check the "freshness" of service results. Enabling this option # is useful for ensuring passive checks are received in a timely # manner. # Values: 1 = enabled freshness checking, 0 = disable freshness checking check_service_freshness=1 # SERVICE FRESHNESS CHECK INTERVAL # This setting determines how often (in seconds) Nagios will # check the "freshness" of service check results. If you have # disabled service freshness checking, this option has no effect. service_freshness_check_interval=60 # HOST FRESHNESS CHECK OPTION # This option determines whether or not Nagios will periodically # check the "freshness" of host results. Enabling this option # is useful for ensuring passive checks are received in a timely # manner. # Values: 1 = enabled freshness checking, 0 = disable freshness checking check_host_freshness=0 # HOST FRESHNESS CHECK INTERVAL # This setting determines how often (in seconds) Nagios will # check the "freshness" of host check results. If you have # disabled host freshness checking, this option has no effect. host_freshness_check_interval=60 # ADDITIONAL FRESHNESS THRESHOLD LATENCY # This setting determines the number of seconds that Nagios # will add to any host and service freshness thresholds that # it calculates (those not explicitly specified by the user). additional_freshness_latency=15 # FLAP DETECTION OPTION # This option determines whether or not Nagios will try # and detect hosts and services that are "flapping". # Flapping occurs when a host or service changes between # states too frequently. When Nagios detects that a # host or service is flapping, it will temporarily suppress # notifications for that host/service until it stops # flapping. Flap detection is very experimental, so read # the HTML documentation before enabling this feature! # Values: 1 = enable flap detection # 0 = disable flap detection (default) enable_flap_detection=1 # FLAP DETECTION THRESHOLDS FOR HOSTS AND SERVICES # Read the HTML documentation on flap detection for # an explanation of what this option does. This option # has no effect if flap detection is disabled. low_service_flap_threshold=5.0 high_service_flap_threshold=20.0 low_host_flap_threshold=5.0 high_host_flap_threshold=20.0 # DATE FORMAT OPTION # This option determines how short dates are displayed. Valid options # include: # us (MM-DD-YYYY HH:MM:SS) # euro (DD-MM-YYYY HH:MM:SS) # iso8601 (YYYY-MM-DD HH:MM:SS) # strict-iso8601 (YYYY-MM-DDTHH:MM:SS) # date_format=iso8601 # TIMEZONE OFFSET # This option is used to override the default timezone that this # instance of Nagios runs in. If not specified, Nagios will use # the system configured timezone. # # NOTE: In order to display the correct timezone in the CGIs, you # will also need to alter the Apache directives for the CGI path # to include your timezone. Example: # # # SetEnv TZ "Australia/Brisbane" # ... # #use_timezone=US/Mountain #use_timezone=Australia/Brisbane # P1.PL FILE LOCATION # This value determines where the p1.pl perl script (used by the # embedded Perl interpreter) is located. If you didn't compile # Nagios with embedded Perl support, this option has no effect. p1_file=/usr/lib/nagios3/p1.pl # EMBEDDED PERL INTERPRETER OPTION # This option determines whether or not the embedded Perl interpreter # will be enabled during runtime. This option has no effect if Nagios # has not been compiled with support for embedded Perl. # Values: 0 = disable interpreter, 1 = enable interpreter enable_embedded_perl=1 # EMBEDDED PERL USAGE OPTION # This option determines whether or not Nagios will process Perl plugins # and scripts with the embedded Perl interpreter if the plugins/scripts # do not explicitly indicate whether or not it is okay to do so. Read # the HTML documentation on the embedded Perl interpreter for more # information on how this option works. use_embedded_perl_implicitly=1 # ILLEGAL OBJECT NAME CHARACTERS # This option allows you to specify illegal characters that cannot # be used in host names, service descriptions, or names of other # object types. illegal_object_name_chars=`~!$%^&*|'"<>?,()= # ILLEGAL MACRO OUTPUT CHARACTERS # This option allows you to specify illegal characters that are # stripped from macros before being used in notifications, event # handlers, etc. This DOES NOT affect macros used in service or # host check commands. # The following macros are stripped of the characters you specify: # $HOSTOUTPUT$ # $HOSTPERFDATA$ # $HOSTACKAUTHOR$ # $HOSTACKCOMMENT$ # $SERVICEOUTPUT$ # $SERVICEPERFDATA$ # $SERVICEACKAUTHOR$ # $SERVICEACKCOMMENT$ illegal_macro_output_chars=`~$&|'"<> # REGULAR EXPRESSION MATCHING # This option controls whether or not regular expression matching # takes place in the object config files. Regular expression # matching is used to match host, hostgroup, service, and service # group names/descriptions in some fields of various object types. # Values: 1 = enable regexp matching, 0 = disable regexp matching use_regexp_matching=0 # "TRUE" REGULAR EXPRESSION MATCHING # This option controls whether or not "true" regular expression # matching takes place in the object config files. This option # only has an effect if regular expression matching is enabled # (see above). If this option is DISABLED, regular expression # matching only occurs if a string contains wildcard characters # (* and ?). If the option is ENABLED, regexp matching occurs # all the time (which can be annoying). # Values: 1 = enable true matching, 0 = disable true matching use_true_regexp_matching=0 # ADMINISTRATOR EMAIL/PAGER ADDRESSES # The email and pager address of a global administrator (likely you). # Nagios never uses these values itself, but you can access them by # using the $ADMINEMAIL$ and $ADMINPAGER$ macros in your notification # commands. admin_email=root@localhost admin_pager=pageroot@localhost # DAEMON CORE DUMP OPTION # This option determines whether or not Nagios is allowed to create # a core dump when it runs as a daemon. Note that it is generally # considered bad form to allow this, but it may be useful for # debugging purposes. Enabling this option doesn't guarantee that # a core file will be produced, but that's just life... # Values: 1 - Allow core dumps # 0 - Do not allow core dumps (default) daemon_dumps_core=0 # LARGE INSTALLATION TWEAKS OPTION # This option determines whether or not Nagios will take some shortcuts # which can save on memory and CPU usage in large Nagios installations. # Read the documentation for more information on the benefits/tradeoffs # of enabling this option. # Values: 1 - Enabled tweaks # 0 - Disable tweaks (default) use_large_installation_tweaks=0 # ENABLE ENVIRONMENT MACROS # This option determines whether or not Nagios will make all standard # macros available as environment variables when host/service checks # and system commands (event handlers, notifications, etc.) are # executed. Enabling this option can cause performance issues in # large installations, as it will consume a bit more memory and (more # importantly) consume more CPU. # Values: 1 - Enable environment variable macros (default) # 0 - Disable environment variable macros enable_environment_macros=1 # CHILD PROCESS MEMORY OPTION # This option determines whether or not Nagios will free memory in # child processes (processed used to execute system commands and host/ # service checks). If you specify a value here, it will override # program defaults. # Value: 1 - Free memory in child processes # 0 - Do not free memory in child processes #free_child_process_memory=1 # CHILD PROCESS FORKING BEHAVIOR # This option determines how Nagios will fork child processes # (used to execute system commands and host/service checks). Normally # child processes are fork()ed twice, which provides a very high level # of isolation from problems. Fork()ing once is probably enough and will # save a great deal on CPU usage (in large installs), so you might # want to consider using this. If you specify a value here, it will # program defaults. # Value: 1 - Child processes fork() twice # 0 - Child processes fork() just once #child_processes_fork_twice=1 # DEBUG LEVEL # This option determines how much (if any) debugging information will # be written to the debug file. OR values together to log multiple # types of information. # Values: # -1 = Everything # 0 = Nothing # 1 = Functions # 2 = Configuration # 4 = Process information # 8 = Scheduled events # 16 = Host/service checks # 32 = Notifications # 64 = Event broker # 128 = External commands # 256 = Commands # 512 = Scheduled downtime # 1024 = Comments # 2048 = Macros debug_level=0 # DEBUG VERBOSITY # This option determines how verbose the debug log out will be. # Values: 0 = Brief output # 1 = More detailed # 2 = Very detailed debug_verbosity=1 # DEBUG FILE # This option determines where Nagios should write debugging information. debug_file=/var/lib/nagios3/nagios.debug # MAX DEBUG FILE SIZE # This option determines the maximum size (in bytes) of the debug file. If # the file grows larger than this size, it will be renamed with a .old # extension. If a file already exists with a .old extension it will # automatically be deleted. This helps ensure your disk space usage doesn't # get out of control when debugging Nagios. max_debug_file_size=1000000 sitesummary/sitesummary-collector.cgi0000644000000000000000000001135612061615272015370 0ustar #!/usr/bin/perl -wT # # Receive HTTP post request with a file upload and process it as a # sitesummary submission. # # Handle three different submission methods # - mime-encoded upload with sitesummary report in compressed form use strict; use CGI; use POSIX qw(strftime); use Socket; use Sys::Syslog; use SiteSummary; my $basedir = "/var/lib/sitesummary"; my $handlerdir = "/usr/lib/sitesummary/handler.d"; $ENV{PATH} = "/bin:/usr/bin"; print "Content-Type: text/plain\n\n"; my ($peeripaddr, $peername) = get_peerinfo(\*STDIN); if (exists $ENV{REQUEST_METHOD} && $ENV{REQUEST_METHOD} ne "POST") { print "Sitesummary HTTP-POST submission URL\n"; print "Visit http://debian-edu.alioth.debian.org/ for more info.\n"; exit 0; } # Extract post data, handle both simple and multipart way my @entry; my $filename = "unknown"; if (exists $ENV{CONTENT_TYPE} && $ENV{CONTENT_TYPE} =~ m%multipart/form-data%){ my $query = new CGI; my $fh = $query->upload("sitesummary"); if ($fh) { $filename = $query->param("sitesummary"); my $type = $query->uploadInfo($filename)->{'Content-Type'}; if ("application/octet-stream" ne $type) { print "Only 'application/octet-stream' is supported (not $type)!"; die; } else { my $encoding = $query->uploadInfo($filename)->{'Content-Encoding'}; if ("x-gzip" eq $encoding || "gzip" eq $encoding) { # Uncompress print "Compressed ($encoding) encoding detected.\n"; my $data; # $data = join("", <$fh>); my $len = (stat($fh))[7]; read $fh, $data, $len; $data = Compress::Zlib::memGunzip($data); @entry = ($data); } else { # Pass throught #print STDERR "Identity encoding detected.\n"; @entry = <$fh>; } } } else { print $query->cgi_error; die; } } else { print <", $savefile) or die "Unable to write to $savefile"; print SITESUMMARY @entry; close SITESUMMARY; print "Thanks for your submission to site-summary!\n"; print "SITESUMMARY HTTP-POST OK\n"; process_entry($peeripaddr, $peername, $savefile); unlink $savefile; exit 0; sub extract_unique_id { return get_unique_ether_id("system/ifconfig-a") || die "Unable to read ifconfig-a"; } sub process_entry { my ($peeripaddr, $peername, $filename) = @_; my $dirname; if ($filename =~ m/(.+).tar.gz$/) { $dirname = $1; mkdir $dirname; chdir $dirname; `tar zxf $filename`; } else { die "Unhandled file format '$filename'"; } open(PEERINFO, ">peerinfo") || die; print PEERINFO "$peeripaddr $peername\n"; close(PEERINFO) || die; my $id = extract_unique_id($dirname); if ("ether-unknown" eq $id) { syslog('warning', "%s", "ignoring client without MAC address connected from \[$peeripaddr\]"); chdir ".."; `rm -r $dirname`; return; } my $newdir = "$basedir/entries/$id"; my $status = "new"; if ( -d $newdir ) { `rm -r $newdir`; $status = "update"; } rename $dirname, $newdir || die; $ENV{"PATH"} = ""; for my $handler (<$handlerdir/*>) { # Untaint script path $handler =~ m/^([^;]*)$/; $handler = $1; system("$handler", "$newdir", "$status"); } } sub get_peerinfo { my $sockethandle = shift; my ($peeripstr, $peername) = ("", ""); if ($ENV{'REMOTE_ADDR'}) { # CGI variable $peeripstr = $ENV{'REMOTE_ADDR'}; $peeripstr =~ m/(\d+).(\d+).(\d+).(\d+)/; # Untaint $peeripstr = "$1.$2.$3.$4"; $peeripaddr = inet_aton($peeripstr); $peername = gethostbyaddr($peeripaddr, AF_INET); } elsif (my $sockaddr = getpeername($sockethandle)) { my $peerport; ($peerport, $peeripaddr) = sockaddr_in($sockaddr); $peername = gethostbyaddr($peeripaddr, AF_INET); $peeripstr = inet_ntoa($peeripaddr); } else { # Running on the command line, use test host $peeripstr = "127.0.0.1"; $peername = "localhost"; } if ("" eq $peername) { syslog('warning', "%s", "client without DNS entry connected from \[$peeripstr\]"); $peername = "$peeripstr"; } return ($peeripstr, $peername); } sitesummary/README0000644000000000000000000001471412061615272011217 0ustar sitesummary =========== More information is available from . Sitesummary generated Munin configuraiton ----------------------------------------- Sitesummary can be used to generate Munin configuration to collect statistics from all sitesummary clients with the Munin packages installed. To enable it, install the munin package and make sure /etc/sitesummary/collector.cfg include 'MUNINDIR=/etc/munin' to get sitesummary to replace the default munin configuration with the generated one. Running these commands as root normally does the trick. aptitude install munin munin-node echo MUNINDIR=/etc/munin >> /etc/sitesummary/collector.cfg sitesummary-client /etc/cron.daily/sitesummary These steps can be preseeded during installation, here is an example to enable Munin autoconfig on the sitesummary collector sitesummary sitesummary/replace-munin-config boolean true Sitesummary generated Nagios configuration ------------------------------------------ Since version 0.0.51, there is code in sitesummary to generate Nagios configuration based on the collected information. To enable this, install nagios3 and nagios-plugins-standard, edit /etc/default/nagios3 to include 'NAGIOSCFG=/etc/nagios3/sitesummary.cfg' and run the sitesummary cron job. Running these commands as root normally does the trick. aptitude install nagios3 nagios-plugins-standard echo 'NAGIOSCFG="/etc/nagios3/sitesummary.cfg"' >> /etc/default/nagios3 sitesummary-client /etc/cron.daily/sitesummary /etc/init.d/nagios3 restart The current version of the code run all Nagios checks locally, so it only work on a single machine. The plan is to change this to use NRPE to work with a network of machines. On the client side, add 'include=/etc/nagios/sitesummary-nrpe-commands.cfg' and 'dont_blame_nrpe=1' in /etc/nagios/nrpe_local.cfg to enable the sitesummary checks. To make sure the nagios server can contact nrpe, it might be required to list the server address using the allowed_hosts option. Running these commands as root normally does the trick. aptitude install nagios-nrpe-server nagios-plugins-standard cat > /etc/nagios/nrpe.d/sitesummary-nrpe.cfg <IP mapping - can generate lts.conf files for the LTSP clients The server can either be a CGI script, or listen on some port on its own. The client should be a platform independent script with as few dependencies as possible, to make it lightweight and easy to install on all machines. (perl, python, /bin/sh?) Should the client know which files to report, or should the server be able to affect it? Can cfengine, nagios or munin be used for this instead? sitesummary/hardware-model-summary0000755000000000000000000000425411100123632014634 0ustar #!/usr/bin/perl use strict; use warnings; use SiteSummary; use Getopt::Std; my %vendors; my %models; my %hostmap; my %modelmap; my %opts; sub usage { my $retval = shift; print < sitesummary report

sitesummary report

EOF for f in site-summary \ hostclass-summary \ kernelversion-summary \ agesinceseen-summary \ hardware-model-summary \ debian_edu-summary ; do echo "

$f

" echo "
"
    /usr/lib/sitesummary/$f
    echo "
" echo done # Add last updated string echo "
" echo -n "

Last updated: " date echo "

" cat < EOF ) > /var/lib/sitesummary/www/index.html exit 0 sitesummary/kernelversion-summary0000755000000000000000000000230010725246034014633 0ustar #!/usr/bin/perl use strict; use warnings; use SiteSummary; use Getopt::Std; my %kernelvers; my %opts; sub usage { my $retval = shift; print < $b; } keys %agedist) { printf(" %-20s %5d\n", $agegroups{$group}, scalar @{$agedist{$group}}); if (exists $opts{l}) { for my $hostid (sort @{$agedist{$group}}) { my $hostname = get_hostname($hostid); my $site = get_site($hostid) || ""; my $sitegroup = get_sitegroup($hostid) || ""; printf " %s %s/%s %s\n", $hostname, $site, $sitegroup, $hostid; } print "\n"; } } } sitesummary/sitesummary-client.conf0000644000000000000000000000037510643416775015055 0ustar serverurls="http://localhost/cgi-bin/sitesummary-collector.cgi" fragdirs="/usr/lib/sitesummary/collect.d /etc/sitesummary/collect.d" gpgencrypt=false # Random sleep between 0 and $runsleep seconds before running. 3600 # is one hour. runsleep="3600" sitesummary/sitesummary-update-munin0000755000000000000000000000426612061615272015254 0ustar #!/bin/sh # # Author: Petter Reinholdtsen set -e nodes=/usr/sbin/sitesummary-nodes muninopts="" # Modify this in collector.cfg to /etc/munin/ to automatically replace # the default munin configuration. MUNINDIR=/var/lib/sitesummary if [ -d /var/cache/munin/www ] ; then # Used since munin version 1.4.0-1 muninhtmldir="/var/cache/munin/www" else muninhtmldir="/var/www/munin" fi # Based on of active config from munin version 1.2.5-1 munindbdir=/var/lib/munin muninlogdir=/var/log/munin muninrundir=/var/run/munin munintmpldir=/etc/munin/templates [ -f /etc/sitesummary/collector.cfg ] && . /etc/sitesummary/collector.cfg # The storage area is not configurable, because too many scripts have # it hardcoded entriesdir=/var/lib/sitesummary/entries generate_munin_config() { # Generate munin config. Edit /etc/cron.d/munin to enable it. # Add -c /var/lib/sitesummary/sitesummary-munin.conf to the calls # to the munin scripts, or change MUNINDIR above. ( if [ -f $MUNINDIR/munin.conf.pre ] ; then cat $MUNINDIR/munin.conf.pre else cat < $MUNINDIR/munin.conf.new && \ chown root:root $MUNINDIR/munin.conf.new && \ chmod a+r $MUNINDIR/munin.conf.new && \ mv $MUNINDIR/munin.conf.new $MUNINDIR/munin.conf } # Only enable if munin and sitesummary is installed. if [ -f /etc/munin/munin.conf ] && [ -x /usr/sbin/sitesummary-nodes ]; then generate_munin_config fi sitesummary/sitesummary-client0000644000000000000000000000367210725246034014122 0ustar #!/bin/sh # # Collect sytem information and pass it on to the sitesummary server # using HTTP put. # https://svn.revolutionlinux.com/MILLE/XTERM/trunk/mille-xterm-getltscfg/src/getltscfg.script set -e PATH=/sbin:/usr/sbin:/bin:/usr/bin export PATH # Make sure the output from programs is well known. LC_ALL=C export LC_ALL # Make sure to store files in a ramfs backed # storage area on diskless clients, so use /tmp/. tmpdir=/tmp/sitesummary-$$ log() { msg="$@" echo "$msg" logger -p user.info -t sitesummary-client "$msg" } error() { msg="$@" log "error: $msg" } # Check or get GPG key, return false if it is unavailable get_gpg_key_if_missing() { url="$1" true } gpg_encrypt_for_url() { url="$1" infile="$2" outfile="$2" return GPGOPTS="--no-default-keyring --keyring $urlkeyring" gpg $GPGOPTS -e $infile > $outfile } # Read the package default [ -f /usr/share/sitesummary/sitesummary-client.conf ] && \ . /usr/share/sitesummary/sitesummary-client.conf for confdir in \ /usr/share/sitesummary/config.d \ /etc/sitesummary/config.d do [ -d $confdir ] || continue for config in $confdir/* ; do [ -f $config ] && . $config done done mkdir $tmpdir && cd $tmpdir for fragdir in $fragdirs ; do [ -d $fragdir ] || continue for frag in $fragdir/*; do [ -x $frag ] && $frag || true done done # Wrap up the package hostsummaryfile=$tmpdir.tar.gz tar zcf $hostsummaryfile . for url in $serverurls ; do if [ "$gpgencrypt" != false ] ; then if get_gpg_key_if_missing $url ; then error "gpg key for '$url' is unavailable. refusing to submit." continue fi gpg_encrypt_for_url $url "$hostsummaryfile" "$hostsummaryfile.gpg" hostsummaryfile="$hostsummaryfile.gpg" fi #WGETOPTS="--no-check-certificate" if sitesummary-upload -u $url -f $hostsummaryfile -d; then : else error "unable to submit to '$url'" fi done rm $hostsummaryfile rm -r $tmpdir sitesummary/debian/0000755000000000000000000000000012224031122011535 5ustar sitesummary/debian/control0000644000000000000000000000346712061615272013167 0ustar Source: sitesummary Section: misc Priority: optional Maintainer: Debian Edu Developers Uploaders: Petter Reinholdtsen , Morten Werner Forsbring , Steffen Joeris , Patrick Winnertz , Holger Levsen Build-Depends: debhelper (>= 5), cdbs Standards-Version: 3.9.2 Homepage: http://wiki.debian.org/DebianEdu/HowTo/SiteSummary Vcs-Browser: http://anonscm.debian.org/viewvc/debian-edu/trunk/src/sitesummary/ Vcs-Svn: svn://anonscm.debian.org/debian-edu/trunk/src/sitesummary/ Package: sitesummary Architecture: all Depends: ${misc:Depends}, gnupg, net-tools, perl-modules Recommends: apache2-mpm-worker | httpd, sitesummary-client Suggests: munin, munin-node, nagios3, nagios-plugins-standard, ldap-utils, cups-client Description: Generate site summary of submitting hosts (server part) The sitesummary system makes it easier to keep track of a lot of machines, by allowing each machine to report their existence once a day to a central collector, and using this collector to make summary reports about the hosts. . This package is the server part, with the collector and report scripts. Package: sitesummary-client Architecture: all Depends: ${misc:Depends}, gnupg, perl-modules Recommends: cron, dmidecode, pciutils, usbutils, lsscsi, iproute Suggests: sitesummary, munin-node, nagios-nrpe-server, nagios-plugins-standard, cdpr Description: Generate site summary of submitting hosts (client part) The sitesummary system makes it easier to keep track of a lot of machines, by allowing each machine to report their existence once a day to a central collector, and using this collector to make summary reports about the hosts. . This package is the client part, reporting in to the server after boot and once a day. sitesummary/debian/sitesummary.postinst0000644000000000000000000000453011415376752015754 0ustar #!/bin/sh set -e # Source debconf library. . /usr/share/debconf/confmodule test_nagios() { if grep -q '^NAGIOSCFG="/etc/nagios3/sitesummary.cfg"$' "$config"; then : else db_get sitesummary/enable-nagios-config if [ true = "$RET" ] ; then mkdir -p $(dirname $config) echo 'NAGIOSCFG="/etc/nagios3/sitesummary.cfg"' \ >> /etc/default/nagios3 if [ ! -f /var/lib/sitesummary/nagios-generated.cfg ] ; then # Create dummy file to make sure nagios will start # on first boot if sitesummary is installed using # debian-installer cat > /var/lib/sitesummary/nagios-generated.cfg <