Nagios...atusLog(3pm)

πŸ“¦
version 0.21.20 Β· 2 versions
  • 0.21.20 Β· debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking (latest)
  • 0.21.20 Β· ubuntu jammy
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

🌸 NAME 🌸

Nagios::StatusLog, Nagios::(Service|Host|Program)::Status β€” Perl objects that represent the Nagios status file. πŸ’–

(also hi, this is the Nagios...atusLog(3pm) page, straight out of User Contributed Perl Documentation, and it ate, fr fr)


πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so bestie, here's the whole vibe: this thing reads the Nagios status log and hands you back ::Status objects, which you then use to pull status info about a host. That's it, that's the gig. 🫢

For Nagios version 2.x logs, pass in the Version => 2.0 parameter to new(). And similarly, pass in the Version => 3.0 parameter to new() for Nagios version 3.x logs. No cap. πŸ‘‘

 my $log = Nagios::StatusLog->new(
                Filename => "/var/opt/nagios/status.log",
                Version  => 1.0
           );
 $localhost = $log->host( "localhost" );
 print "status of localhost is now ",$localhost->status(),"\n";
 $log->update();
 print "status of localhost is now ",$localhost->status(),"\n";

 # for Nagios v2.0
 my $log = Nagios::StatusLog->new(
                Filename => "/var/cache/nagios2/status.dat",
                Version  => 2.0
           );

 # for Nagios v3.0
 my $log = Nagios::StatusLog->new(
                Filename => "/var/cache/nagios3/status.dat",
                Version  => 3.0
           );

✨ METHODS ✨

πŸ’… new()

Creates a brand new Nagios::StatusLog instance, and it's already initialized for you (it does this using $self->update()), so you literally don't have to do anything else. πŸ’–

 Nagios::StatusLog->new( "/var/opt/nagios/status.log" );

πŸ’… update()

Refreshes the internal data structures from the logfile. Glow-up for your in-memory data. ✨

 $log->update();

πŸ’… service()

Returns a Nagios::Service::Status object. The input arguments can be a host_name and description list, or a Nagios::Service object. Either way, we got you. πŸŽ€

 my $svc_stat = $log->service( "localhost", "SSH" );
 my $svc_stat = $log->service( $localhost_ssh_svc_object );

Nagios::Service::Status has the following accessor methods (For V1):

  • host_name
  • description
  • status
  • current_attempt
  • state_type
  • last_check next_check
  • check_type
  • checks_enabled
  • accept_passive_service_checks
  • event_handler_enabled
  • last_state_change
  • problem_has_been_acknowledged
  • last_hard_state
  • time_ok
  • current_notification_number
  • time_warning
  • time_critical
  • process_performance_data
  • notifications_enabled
  • latency
  • scheduled_downtime_depth
  • is_flapping
  • plugin_output
  • percent_state_change
  • execution_time
  • time_unknown
  • failure_prediction_enabled
  • last_notification
  • obsess_over_service
  • flap_detection_enabled

πŸ’… list_services()

Returns an array of all service descriptions in the status log. Heads up though: services that might be listed on more than one host are only listed once here. Not me duplicating entries, couldn't be her. πŸ™ˆ

 my @all_services = $log->list_services;

πŸ’… list_services_on_host()

Returns an array of service descriptions for a given host. Iconic behaviour, honestly. 🌈

 my @host_services = $log->list_services_on_host($hostname);
 my @host_services = $log->list_services_on_host($nagios_object);

πŸ’… serviceproblems()

Returns a hash of all the services that are not in an OK state. The drama list. πŸ’€

 my %serviceproblems = $log->serviceproblems();

πŸ’… host()

Returns a Nagios::Host::Status object. The input can be a simple host_name, a Nagios::Host object, or a Nagios::Service object β€” she's flexible like that. πŸ’β€β™€οΈ

 my $hst_stat = $log->host( 'localhost' );
 my $hst_stat = $log->host( $host_object );
 my $hst_stat = $log->host( $svc_object );

Nagios::Host::Status has the following accessor methods (for V1):

  • host_name
  • status
  • last_check
  • last_state_change
  • problem_has_been_acknowledged
  • time_up
  • time_down
  • time_unreachable
  • last_notification
  • current_notification_number
  • notifications_enabled
  • event_handler_enabled
  • checks_enabled
  • flap_detection_enabled
  • is_flapping
  • percent_state_change
  • scheduled_downtime_depth
  • failure_prediction_enabled
  • process_performance_data
  • plugin_output

πŸ’… list_hosts()

Returns a simple array of host names β€” no objects, just the names, keepin' it lowkey. πŸ“

 my @hosts = $log->list_hosts;

πŸ’… list_hostdowntime()

Returns a simple array of host downtimes β€” again, no objects. Just vibes. 🌸

 my @hostdowntimes = $log->list_hostdowntime;

πŸ’… info() [Nagios v2 & v3 logs only]

Returns a Nagios::Info::Status object. She's minimal β€” only two methods, created() and version(). Small but mighty. πŸ’œ

 my $i = $log->info;
 printf "Logfile created at %s unix epoch time for Nagios verion %s\n",
    $i->created,
    $i->version;

πŸ’… contact() [Nagios v3 logs only]

Returns a Nagios::Contact::Status object. The input can be a simple contact_name, or a Nagios::Contact object. 🫢

 my $c = $log->contact( 'john' );
 my $c = $log->contact( $contact_object );

Nagios::Contact::Status has the following accessor methods (for v3):

  • contact_name
  • modified_attributes
  • modified_host_attributes
  • modified_service_attributes
  • host_notification_period
  • service_notification_period
  • last_host_notification
  • last_service_notification
  • host_notifications_enabled
  • service_notifications_enabled

πŸ’… hostcomment() [Nagios v3 logs only]

Returns a Nagios::Hostcomment::Status object. The input can be a simple host_name, or a Nagios::Host or Nagios::Service object. ✨

 my $c = $log->hostcomment( 'localhost' );
 my $c = $log->hostcomment( $localhost_object );
 my $c = $log->hostcomment( $localhost_service_object );
 foreach my $id (sort keys %$c) {
     printf "Host %s has a comment[$id] made by %s on %s: %s",
       $c->{$id}->host_name, $c->{$id}->author, scalar localtime $c->{$id}->entry_time, $c->{$id}->comment_data;
 }

Nagios::Hostcomment::Status is a perl HASH, keyed with the Nagios comment IDs, where each ID has the following accessor methods (for v3):

  • host_name
  • entry_type
  • comment_id
  • source
  • persistent
  • entry_time
  • expires
  • expire_time
  • author
  • comment_data

πŸ’… servicecomment() [Nagios v3 logs only]

Returns a Nagios::Servicecomment::Status object. The input can be a simple host_name or Nagios::Host object with a service description or Nagios::Service object, or just a Nagios::Service object all by itself. Main character energy. πŸ‘‘

 my $c = $log->servicecomment( 'localhost', 'SSH' );
 my $c = $log->servicecomment( $localhost_object, $localhost_ssh_svc_object );
 my $c = $log->servicecomment( $localhost_ssh_svc_object );
 foreach my $id (sort keys %$c) {
     printf "Service %s on %s  has a comment[$id] made by %s on %s: %s",
       $c->{$id}->service_description, $c->{$id}->host_name, $c->{$id}->author, scalar localtime $c->{$id}->entry_time, $c->{$id}->comment_data;
 }

Nagios::Servicecomment::Status is a perl HASH, keyed with the Nagios comment IDs, where each ID has the following accessor methods (for v3):

  • host_name
  • service_description
  • entry_type
  • comment_id
  • source
  • persistent
  • entry_time
  • expires
  • expire_time
  • author
  • comment_data

πŸ’… hostdowntime() [Nagios v3 logs only]

Returns a Nagios::Hostdowntime::Status object. The input can be a simple host_name, or a Nagios::Host or Nagios::Service object. 🌈

 my $d = $log->hostdowntime( 'localhost' );
 my $d = $log->hostdowntime( $localhost_object );
 my $d = $log->hostdowntime( $localhost_service_object );
 foreach my $id (sort keys %$d) {
     printf "Host %s has scheduled downtime[$id] made by %s on %s for %.1f hours [%s - %s]: %s",
       $d->{$id}->host_name, $d->{$id}->author, scalar localtime $d->{$id}->entry_time, ($d->{$id}->duration)/3600.0,
         scalar localtime $d->{$id}->start_time, scalar localtime $d->{$id}->end_time, $d->{$id}->comment;
 }

Nagios::Hostdowntime::Status is a perl HASH, keyed with the Nagios downtime IDs, where each ID has the following accessor methods (for v3):

  • host_name
  • downtime_id
  • entry_time
  • start_time
  • end_time
  • triggered_by
  • fixed
  • duration
  • author
  • comment

πŸ’… servicedowntime() [Nagios v3 logs only]

Returns a Nagios::Servicedowntime::Status object. The input can be a simple host_name or Nagios::Host object with a service description or Nagios::Service object, or just a Nagios::Service object by itself. πŸ¦‹

 my $c = $log->servicedowntime( 'localhost', 'SSH' );
 my $c = $log->servicedowntime( $localhost_object, $localhost_ssh_svc_object );
 my $c = $log->servicedowntime( $localhost_ssh_svc_object );
 foreach my $id (sort keys %$d) {
     printf "Service %s on %s has scheduled downtime[$id] made by %s on %s for %.1f hours [%s - %s]: %s",
       $d->{$id}->service_description, $d->{$id}->host_name, $d->{$id}->author, scalar localtime $d->{$id}->entry_time, ($d->{$id}->duration)/3600.0,
         scalar localtime $d->{$id}->start_time, scalar localtime $d->{$id}->end_time, $d->{$id}->comment;
 }

Nagios::Servicedowntime::Status is a perl HASH, keyed with the Nagios downtime IDs, where each ID has the following accessor methods (for v3):

  • host_name
  • service_description
  • downtime_id
  • entry_time
  • start_time
  • end_time
  • triggered_by
  • fixed
  • duration
  • author
  • comment

πŸ’… program()

Returns a Nagios::Program::Status object. No arguments, she needs nothing from you. πŸ’…

 my $prog_st = $log->program;

Nagios::Program::Status has the following accessor methods (For V1):

  • program_start
  • nagios_pid
  • daemon_mode
  • last_command_check
  • last_log_rotation
  • enable_notifications
  • execute_service_checks
  • accept_passive_service_checks
  • enable_event_handlers
  • obsess_over_services
  • enable_flap_detection
  • enable_failure_prediction
  • process_performance_data

🧚 STRUCTURE 🧚

So this module contains 4 packages: Nagios::StatusLog, Nagios::Host::Status, Nagios::Service::Status, and Nagios::Program::Status. The latter 3 of them are mostly generated at compile-time in the BEGIN block. And here's the slay part: the accessor methods are real subroutines, not AUTOLOAD, so making a ton of calls to this module should be fairly quick. 🏎️✨

Also, update() is set up to only do what it says β€” updating from a fresh logfile should not invalidate your existing ::Status objects. Bestie behaviour, honestly. 🫢


πŸ’œ AUTHOR πŸ’œ

Al Tobey <tobeya@tobert.org>


πŸ‘€ SEE ALSO πŸ‘€

okay bestie, if you wanna go further down the rabbit hole (and you know you do πŸ‡βœ¨), these are the sibling modules you're gonna want in your tabs:

  • Nagios::Host β€” for when the thing you're obsessing over is a host πŸ–₯️
  • Nagios::Service β€” for when it's a service, obviously πŸ’…

that's it. that's the whole cross-reference section. go read them, they're right there, they match this one's energy fr fr 🫢


and that's a wrap on the whole page, bestie!! πŸŽ€ you made it to the end, which is honestly iconic of you πŸ‘‘

quick lil receipts for the record: this was rendered by perl v5.34.0, dated 2022-06-16, and the module itself is Nagios::StatusLog(3pm) β€” the page that lives in the User Contributed Perl Documentation section πŸ¦‹

now go check your status logs and slay πŸ’–βœ¨πŸŒΈ