Nagios Check_ping
1. Introduction
Nagios is a widely used open-source monitoring system that allows you to monitor the availability and performance of network services, hosts, devices, and applications. One of the essential features of Nagios is the ability to perform various checks on remote hosts, such as ping tests. In this article, we will explore the check_ping
plugin, which is used to test the availability and response time of a remote host using ICMP echo requests.
2. Overview of check_ping
The check_ping
plugin is a part of the Nagios Plugin collection and is used to monitor the availability and packet loss of a remote host by sending ICMP echo requests. It uses the ping
command-line utility to send a series of echo requests to the remote host and measures the response time and packet loss.
The check_ping
plugin takes several parameters, including the hostname or IP address of the remote host, the warning and critical thresholds for response time and packet loss, and the number of echo requests to send. It then sends ICMP echo requests to the specified host and analyzes the responses to determine the status of the host.
Here is an example command using the check_ping
plugin:
check_ping -H 192.168.0.1 -w 100,20% -c 200,40% -p 5
In this example, the plugin sends 5 ICMP echo requests to the host with the IP address 192.168.0.1. It sets the warning threshold for response time at 100 milliseconds with a 20% packet loss, and the critical threshold at 200 milliseconds with a 40% packet loss.
3. Code Example
To demonstrate the usage of the check_ping
plugin, let's consider a Python script that utilizes the subprocess
module to execute the check_ping
command and process its output. Here is the code example:
import subprocess
def check_ping(host, warning, critical, count):
command = f"check_ping -H {host} -w {warning} -c {critical} -p {count}"
output = subprocess.check_output(command.split()).decode()
lines = output.splitlines()
for line in lines:
if line.startswith("PING OK"):
status = "OK"
elif line.startswith("PING WARNING"):
status = "WARNING"
elif line.startswith("PING CRITICAL"):
status = "CRITICAL"
elif line.startswith("PING UNKNOWN"):
status = "UNKNOWN"
elif line.startswith("RTA"):
response_time = float(line.split()[2])
elif line.startswith("PL"):
packet_loss = float(line.split()[2][:-1])
return status, response_time, packet_loss
host = "192.168.0.1"
warning = "100,20%"
critical = "200,40%"
count = 5
status, response_time, packet_loss = check_ping(host, warning, critical, count)
print(f"Status: {status}")
print(f"Response Time: {response_time} ms")
print(f"Packet Loss: {packet_loss}%")
In this example, the check_ping()
function takes the host, warning threshold, critical threshold, and count as input parameters. It constructs the check_ping
command and uses the subprocess.check_output()
function to execute the command and capture its output.
The output is then parsed to extract the status, response time, and packet loss values. Finally, the function returns these values, which can be used for further processing or display.
4. Sequence Diagram
The following sequence diagram illustrates the flow of interactions between the components involved in the execution of the check_ping
command:
sequenceDiagram
participant User
participant Script
participant check_ping
participant ping
User->>Script: Execute script
Script->>check_ping: call check_ping()
check_ping->>ping: Execute ping command
ping-->>check_ping: Return ping output
check_ping-->>Script: Return check_ping output
Script->>User: Display check_ping output
In this diagram, the User initiates the execution of the script. The Script calls the check_ping()
function, which in turn executes the ping
command. The ping
command returns the output to the check_ping
function, which processes it and returns the result to the Script. Finally, the Script displays the output to the User.
5. Class Diagram
The following class diagram represents the main components involved in the check_ping
functionality:
classDiagram
class Script {
+check_ping(host, warning, critical, count)
}
class check_ping {
+ping(host, count)
+parse_output(output)
}
class ping {
+execute(command)
}
Script --|> check_ping
check_ping --|> ping
ping --|> execute
In this diagram, the Script
class represents the main script that executes the check_ping
functionality. It has a dependency on the check_ping
class, which handles the execution of the ping
command and parsing of its output. The `