Pynag a tool and a library for managing nagios configuration and provides a framework to write plugins.
Pynag command-line utility offers the following features:
- list python object definitions (e.g. list all hosts/services)
- create new object definitions from command line
- copy object definitions
- remove object definitions
- edit nagios.cfg from command-line
Pynag also has the following modules:
- Model - Easy way to work with configuration as python objects
- Plugins - convenience classes for writing python plugins
- Parsers - Various parsers for nagios configuration files
- Control - Control of Nagios daemon
Using fedora/redhat:
yum install pynag
Using debian/ubuntu:
apt-get install python-pynag pynag
Using pip:
pip install pynag
Install latest git repository from source:
git clone https://github.com/pynag/pynag.git
cd pynag
python setup.py build
python setup.py install
List all services:
import pynag.Model
all_services pynag.Model.Service.objects.all
for i in all_services:
print i.host_name, i.service_description
Change an address of a host:
import pynag.Model
myhost = pynag.Model.Host.objects.get_by_shortname('myhost.example.com')
myhost.address = '127.0.0.1'
myhost.save()
# See what the host definition looks like after change:
print myhost
Create a new ssh service check for every host in the unix hostgroup:
import pynag.Model
hosts = pynag.Model.Host.objects.filter(hostgroup="unixservers")
for host in hosts:
new_service = pynag.Model.Service()
new_service.host_name = host.host_name
new_service.service_description = "SSH Connectivity"
new_service.check_command = "check_ssh"
# optionally control where new object is saved:
new_service.set_filename( host.get_filename() )
new_service.save()
We blatantly admit that documentation is scarce in pynag. Most of the documentation is in-line in pydoc strings in the respective python modules.
Any help with improving the documentation is much appreciated. For more documentation see
- http://docs.pynag.org/
- The pynag/examples directory
- Our github wiki: https://github.com/pynag/pynag/wiki
Pynag also comes with a command-line tool that gives good examples what is possible with the library. Some example commands:
list all hosts and their ip address:
pynag list host_name address where object_type=host
Change contactgroup for all services for a particular host:
pynag update set contactgroups=admins where host_name="myhost" and object_type=service
Copy a host, give it a new hostname and ip address:
pynag copy set host_name=newhost address=newaddress where object_type=host and host_name=oldhost
# Same for all its services:
pynag copy set host_name=newhost where object_type=service and host_name=oldhost
Model module's get_effective_* functions are not complete if your configuration is using regular expressions. For example, pynag.Model.Service.get_effective_hosts will fail on the following service definition:
define service {
service_description check http
check_command check_http
host_name www*
}
Same applies for exemptions like this one:
define service {
service_description check http
check_command check_http
hostgroup_name webservers
host_name !dmzhost1,dmzhost2
}
There are a few open source projects out there that use pynag. The ones we know of are:
- Adagios: Impressive web configuration and status interface
- Okconfig: Monitoring pack generator for Nagios
- RESTlos: generic RESTful api for nagios-like monitoring systems
Pynag is also used by lots of plugins around the world including:
- check_eva.py
- check_hpacucly.py
- check_ipa/check_ipa_replication
Know of more projects using pynag ? Contact us and we'll add them here.
If you need any help, want to contribute or just want to talk about pynag you can find us on one of the following:
- Bug reports, feature requests: https://github.com/pynag/pynag/issues
- Mailing list: https://groups.google.com/forum/?fromgroups#!forum/pynag-discuss
- Irc chat: #pynag on freenode