SSH based plugin¶
The class NagiosPluginSSH that inherits from NagiosPlugin is responsible to init a plugin that makes use of SSH to check something.
If you show the help with --help, you will see extra arguments provided by the class. It uses the same mechanics as we saw in Creating a new plugin, the basics section. It overrides NagiosPlugin.define_plugin_arguments() to define new arguments and NagiosPlugin.verify_plugin_arguments() to do arguments checking.
Getting started¶
Instanciate a new SSH plugin with:
>>> import logging
>>> from monitoring.nagios.plugin import NagiosPluginSSH
>>> logger = logging.getLogger('plugin')
>>> plugin = NagiosPluginSSH(version="1.0",
>>> description="Do something using SSH.")
Default plugin arguments¶
The class defines the following default set of arguments.
- -H: The hostaddress of the server to connect on.
- -P: Port to connect to (default to 22).
- -u, --username: Login user. Default to current logged in user.
- -p, --password: Login user password. Default is to use pub key of the current user.
- -t, --timeout: Connection timeout in seconds (default to 10 secs).
Remote actions¶
Use attribute ssh to make use of the SSH probe. Look at deeper details within the API reference for ProbeSSH class.
Get a command output¶
Here is how you can execute a command:
>>> cmd = plugin.ssh.execute("ls -l /")
This will return a CommandResult instance with useful attributes like CommandResult.output for lines on stdout, CommandResult.errors for lines on stderr and CommandResult.status for status code of the command.
Read output of the command and get a list with:
>>> cmd.output
['total 160',
'drwxr-xr-x 2 root root 4096 janv. 15 08:53 bin',
'drwxr-xr-x 4 root root 12288 f\xc3\xa9vr. 25 17:41 boot',
'drwxr-xr-x 2 root root 4096 d\xc3\xa9c. 4 2012 cdrom',
'drwxr-xr-x 16 root root 4280 mars 5 08:38 dev',
'drwxr-xr-x 170 root root 12288 mars 5 08:38 etc',
'drwxr-xr-x 3 root root 4096 d\xc3\xa9c. 4 2012 home',
'...']
As this is a list, you can easily iterate over each lines:
>>> for line in cmd.output:
>>> # Do something with line...
The method ProbeSSH.execute() will raise ProbeSSH.SSHCommandTimeout exception if timeout is reached (as defined by the -t plugin argument).
You can also get the command status code instead:
>>> if cmd.status == 0:
>>> print "Command executed successfully ;-)"
Get a list of files in a directory¶
The SSH probe has suppport to easily find files within a directory that match a pattern. It has support for recursion but disabled by default.
Search for *.txt files in /tmp:
>>> text_files = plugin.ssh.list_files(directory="/tmp", glob="*.txt")
['/tmp/c.txt',
'/tmp/e.txt',
'/tmp/d.txt',
'/tmp/o.txt',
'/tmp/t.txt',
'/tmp/y.txt',
'/tmp/b.txt',
'/tmp/r.txt',
'/tmp/a.txt']
Now with recursion up to 5 sub-directories:
>>> text_files = plugin.ssh.list_files(directory="/tmp", glob="*.txt", depth=5)
['/tmp/c.txt',
'/tmp/e.txt',
'/tmp/d.txt',
'/tmp/o.txt',
'/tmp/tata/a.txt',
'/tmp/t.txt',
'/tmp/y.txt',
'/tmp/toto/b/b.txt',
'/tmp/toto/c/b.txt',
'/tmp/toto/a/b.txt',
'/tmp/b.txt',
'/tmp/r.txt',
'/tmp/a.txt']
Get file or directory last modified time¶
The SSH probe defines methods to obtain the last modified time of a file or directory.
ProbeSSH.get_file_lastmodified_minutes() will give you for how much minutes the file was last modified.
ProbeSSH.get_file_lastmodified_timestamp() will give you the last modified time as a Unix Timestamp (UTC).
Example:
>>> plugin.ssh.get_file_lastmodified_minutes("/etc/motd")
16
>>> plugin.get_file_lastmodified_timestamp("/etc/motd")
1294765528