Clone the opscode cookbook
$ git clone git@github.com:opscode-cookbooks/nagios.git
Create some berkshelf dependency stuff to make your life easier
( I’m going to assume you have berkshelf installed, if not
gem install berkself
and read this http://berkshelf.com/ )
$ cd nagios $ cat>Berksfile<<EOF metadata cookbook 'bluepill' cookbook 'perl' cookbook 'rsyslog' cookbook 'nginx' cookbook 'nginx_simplecgi' group :test do # cookbook 'minitest-handler', git: "git://github.com/btm/minitest-handler-cookbook.git" end EOF
Pull in your dependencies using Berkshelf and upload it to your chef-server
$ berks install $ berks upload
Create your data bag for your nagios admin user
$ knife data bag create users $ openssl passwd -1 -salt '78hJASHDGuywelhfsdkiukshdkfusdhgfu' 'nagiosadmin' "$1$78hJASHD$KlWqNTM0UXf/iM6imQ.9F1"
$ cat>nagiosadmin.json<<EOF { "id": "nagiosadmin", "groups": "sysadmin", "htpasswd": "$1$78hJASHD$KlWqNTM0UXf/iM6imQ.9F1", "nagios": { "pager": "nagiosadmin_pager@example.com", "email": "nagiosadmin@example.com" } } EOF
Upload your nagiosadmin user to data bag on your chef-server
$ knife data bag from file users nagiosadmin.json
Create a chef role for “monitoring”
$ cat>monitoring.rb<<EOF name "monitoring" run_list %w[ recipe[nagios::server] ] default_attributes({ :nagios => { :server => { ### START Install Verison and Method :install_method => "package", ### END Install Version and Method :service_name => "nagios3", :home => "/usr/lib/nagios3", :conf_dir => "/etc/nagios3", :config_dir => "/etc/nagios3/conf.d", :cache_dir => "/var/cache/nagios3", :state_dir => "/var/lib/nagios3", :run_dir => "/var/run/nagios3", :docroot => "/usr/share/nagios3/htdocs", :server_name => "nagios", :web_server => "apache" }, :client => { :install_method => "package" }, :server_auth_method => "htauth", :url => "nagios.mydomain.com" } }) EOF
Upload the “monitoring” role to chef-server and then apply the role and run chef-client
$ knife role from file monitoring.rb $ knife node run_list add nagios.mydomain.com -r "role[monitoring]" $ knife ssh -a ipaddress name:nagios.mydomain.com "chef-client"
Edit your local system’s host file to point the domain to the ip of your server if you don’t have DNS
10.0.1.1 nagios.mydomain.com
login at
http://nagios.mydomain.com/nagios3
username/password = nagiosadmin
Add the nrpe configurations on your clients
Create the application cookbook for your custom nrpe service checks
$ knife cookbook create mydomain_nrpe $ cd mydomain_nrpe/recipes $ cat>default.rb<<EOF # # Cookbook Name:: monitoring # Recipe:: base_monitoring # # Copyright 2013, Example Company, Inc. # # This recipe defines the necessary NRPE commands for base system monitoring # in Example Company Inc's Chef environment. include_recipe 'nagios::client' # Check for high load. This check defines warning levels and attributes nagios_nrpecheck "check_load" do command "#{node['nagios']['plugin_dir']}/check_load" warning_condition "6" critical_condition "10" action :add end # Check all non-NFS/tmp-fs disks. nagios_nrpecheck "check_all_disks" do command "#{node['nagios']['plugin_dir']}/check_disk" warning_condition "8%" critical_condition "5%" parameters "-A -x /dev/shm -X nfs -i /boot" action :add end # Check for excessive users. This command relies on the service definition to # define what the warning/critical levels and attributes are nagios_nrpecheck "check_users" do command "#{node['nagios']['plugin_dir']}/check_users" action :add end EOF
Upload the cookbook
$ knife cookbook upload mydomain_nrpe
Add the recipe to the run list of a node you want the nrpe services installed to or just assign it to a role
$ knife node run_list add james.mydomain "recipe[mydomain_nrpe]" $ knife ssh -a ipaddress -x root name:james.mydomain "chef-client"
Add services to your nagios server using data bag entires in “nagios_services” data bag
$ knife data bag create nagios_services $ mkdir nagios_services $ cd nagios_services
$ cat>ssh.json<<EOF { "id": "ssh", "hostgroup_name": "linux", "command_line": "$USER1$/check_ssh $HOSTADDRESS$" } EOF
$ cat>pingme.json<EOF { "id": "pingme", "hostgroup_name": "linux", "use_existing_command": "check-host-alive" } EOF
$ wget https://raw.github.com/opscode-cookbooks/nagios/master/examples/nagios_services/users.json $ wget https://raw.github.com/opscode-cookbooks/nagios/master/examples/nagios_services/load.json $ wget https://raw.github.com/opscode-cookbooks/nagios/master/examples/nagios_services/all_disks.json
Ingest all the nagios json service files to chef-server and run chef-client on the nagios server
$ ls |while read i ; do knife data bag from file nagios_services $i ; done $ knife ssh -a ipaddress -x root name:nagios.mydomain.com "chef-client"
Install a system that’s not managed by chef
$ knife data bag create nagios_unmanagedhosts
$ cat >my host.json<EOF { "address": "myhost.mydomain.com", "hostgroups": ["linux"], "id": "myhost", "notifications": 0 } EOF
$ knife data bag from file nagios_unmanagedhosts host.json $ knife ssh -x root -a ipaddress name:nagios.mydomain.com "chef-client"