Commit ec1332476d5c5fb2ea22e10f198474005c80a043
1 parent
f38cf00c
Exists in
master
and in
62 other branches
Monitoring support with munin
- all servers have munin-node installed - unless an external munin master is specified, munin master will be installed to reverseproxy - munin master for production will be managed separately
Showing
10 changed files
with
139 additions
and
1 deletions
Show diff stats
Rakefile
| ... | ... | @@ -58,6 +58,12 @@ $nodes.each do |node| |
| 58 | 58 | node.data['firewall'] = firewall |
| 59 | 59 | end |
| 60 | 60 | |
| 61 | +# In the absence of a dedicated munin master, reverseproxy will do that. | |
| 62 | +if !config['munin_master'] | |
| 63 | + config['munin_master'] = ips['reverseproxy'] | |
| 64 | + $nodes.find { |node| node.hostname == 'reverseproxy' }.data['run_list'] << 'role[monitoring_server]' | |
| 65 | +end | |
| 66 | + | |
| 61 | 67 | task :console do |
| 62 | 68 | require 'pry' |
| 63 | 69 | binding.pry | ... | ... |
config/prod/config.yaml
| ... | ... | @@ -17,3 +17,4 @@ external_outgoing_mail_relay: 189.9.150.53 |
| 17 | 17 | external_outgoing_mail_domain: serpro.gov.br |
| 18 | 18 | raven_dsn: https://4418146896924efe9b73d557f803f047:8a59f39b5f584ff589ecf3dd47faaead@sentry.tracy.com.br/13 |
| 19 | 19 | google_analytics_id: 'UA-64206731-1' |
| 20 | +munin_master: 10.21.0.10 | ... | ... |
cookbooks/firewall/templates/default/iptables.erb
| ... | ... | @@ -16,11 +16,19 @@ |
| 16 | 16 | -A INPUT -p icmp --icmp-type 11 -j ACCEPT |
| 17 | 17 | -A INPUT -p icmp --icmp-type 12 -j ACCEPT |
| 18 | 18 | |
| 19 | +# allow ping between the peers | |
| 20 | +<% node['peers'].each do |hostname,ip| %> | |
| 21 | +-A INPUT -s <%= ip %> -p icmp --icmp-type 8 -j ACCEPT | |
| 22 | +<% end %> | |
| 23 | + | |
| 19 | 24 | -A INPUT -i lo -j ACCEPT |
| 20 | 25 | |
| 21 | 26 | # Everybody need to accept SSH from integration |
| 22 | 27 | -A INPUT -s <%= node['peers']['integration'] %> -p tcp -m state --state NEW --dport 22 -j ACCEPT |
| 23 | 28 | |
| 29 | +# Everybody needs to accept munin connections from munin master | |
| 30 | +-A INPUT -s <%= node['config']['munin_master'] %> -p tcp -m state --state NEW --dport 4949 -j ACCEPT | |
| 31 | + | |
| 24 | 32 | <%= node['firewall'] %> |
| 25 | 33 | <%= render 'iptables-filter.erb' %> |
| 26 | 34 | ... | ... |
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +location /munin/static/ { | |
| 2 | + alias /var/www/html/munin/static/; | |
| 3 | + expires modified +1w; | |
| 4 | +} | |
| 5 | +location /munin/ { | |
| 6 | + # auth_basic "Restricted"; | |
| 7 | + # # Create the htpasswd file with the htpasswd tool. | |
| 8 | + # auth_basic_user_file /etc/nginx/munin_htpasswd; | |
| 9 | + | |
| 10 | + alias /var/www/html/munin/; | |
| 11 | + expires modified +310s; | |
| 12 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,60 @@ |
| 1 | +#!/bin/sh | |
| 2 | +# | |
| 3 | +# Copyright (c) 2009 Sven-Hendrik Haase | |
| 4 | +# Copyright (C) 2004 Jimmy Olsen | |
| 5 | +# | |
| 6 | +# This program is free software; you can redistribute it and/or | |
| 7 | +# modify it under the terms of the GNU General Public License | |
| 8 | +# as published by the Free Software Foundation; version 2 dated June, | |
| 9 | +# 1991. | |
| 10 | +# | |
| 11 | +# This program is distributed in the hope that it will be useful, | |
| 12 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | +# GNU General Public License for more details. | |
| 15 | +# | |
| 16 | +# You should have received a copy of the GNU General Public License | |
| 17 | +# along with this program; if not, write to the Free Software | |
| 18 | +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| 19 | +# | |
| 20 | +# | |
| 21 | +# Plugin to monitor packet loss | |
| 22 | +# | |
| 23 | +# Please note that sometimes it can take quite long for the plugin to return | |
| 24 | +# a value on a network with lots of packet loss. | |
| 25 | +# You therefore need to account for it by appending the following to your | |
| 26 | +# plugin-conf.d/munin-node. Remember to restart munin-node afterwards. | |
| 27 | +# Append the next 3 lines to plugin-conf.d/munin-node: | |
| 28 | +# [packetloss_*] | |
| 29 | +# timeout 60 | |
| 30 | +# user root | |
| 31 | +# | |
| 32 | +# Parameters: | |
| 33 | +# | |
| 34 | +# ping_args - Arguments to ping (default "-c 2") | |
| 35 | +# ping_args2 - Arguments after the host name (required for Solaris) | |
| 36 | +# ping - Ping program to use | |
| 37 | +# host - Host to ping | |
| 38 | +# | |
| 39 | +# Arguments for Solaris: | |
| 40 | +# ping_args -s | |
| 41 | +# ping_args2 56 2 | |
| 42 | +# | |
| 43 | +#%# family=manual | |
| 44 | + | |
| 45 | +file_host=`basename $0 | sed 's/^packetloss_//g'` | |
| 46 | +host=${host:-${file_host:-www.google.com}} | |
| 47 | + | |
| 48 | +if [ "$1" = "config" ]; then | |
| 49 | + echo "graph_title Packet loss to $host (in %)" | |
| 50 | + echo 'graph_args --upper-limit 100 -l 0' | |
| 51 | + echo 'graph_vlabel %' | |
| 52 | + echo 'graph_category network' | |
| 53 | + echo 'graph_info This graph shows packet loss statistics.' | |
| 54 | + echo "packetloss.label $host" | |
| 55 | + echo "packetloss.info Packet loss statistics for $host." | |
| 56 | + echo 'packetloss.draw LINE2' | |
| 57 | + exit 0 | |
| 58 | +fi | |
| 59 | + | |
| 60 | +${ping:-ping} ${ping_args:-'-c 10'} ${host} ${ping_args2} | perl -n -e 'print "packetloss.value $1\n" if /(\d+)% packet loss/;' | ... | ... |
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +package 'munin' | |
| 2 | + | |
| 3 | +template '/etc/munin/conf.d/hosts.conf' | |
| 4 | + | |
| 5 | +package 'nginx' | |
| 6 | +service 'nginx' do | |
| 7 | + supports :reload => true | |
| 8 | +end | |
| 9 | +cookbook_file '/etc/nginx/default.d/munin.conf' do | |
| 10 | + source 'nginx.conf' | |
| 11 | + notifies :reload, 'service[nginx]' | |
| 12 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,32 @@ |
| 1 | +package 'munin-node' | |
| 2 | + | |
| 3 | +service 'munin-node' do | |
| 4 | + action [:enable, :start] | |
| 5 | +end | |
| 6 | + | |
| 7 | +directory '/usr/local/share/munin/plugins' do | |
| 8 | + recursive true | |
| 9 | +end | |
| 10 | +cookbook_file '/usr/local/share/munin/plugins/packetloss' do | |
| 11 | + mode 0755 | |
| 12 | +end | |
| 13 | + | |
| 14 | +node['peers'].each do |hostname,ip| | |
| 15 | + link '/etc/munin/plugins/packetloss_' + hostname do | |
| 16 | + to '/usr/local/share/munin/plugins/packetloss' | |
| 17 | + end | |
| 18 | +end | |
| 19 | + | |
| 20 | +bash "allow connections from munin master" do | |
| 21 | + ip = node['config']['munin_master'] | |
| 22 | + code "echo 'cidr_allow #{ip}/32' >> /etc/munin/munin-node.conf" | |
| 23 | + not_if "grep 'cidr_allow #{ip}/32' /etc/munin/munin-node.conf" | |
| 24 | + notifies :restart, 'service[munin-node]' | |
| 25 | +end | |
| 26 | + | |
| 27 | +bash "set munin-node hostname" do | |
| 28 | + hostname = node['fqdn'] | |
| 29 | + code "sed -i -e '/^host_name\s*localhost/d; $a host_name #{hostname}' /etc/munin/munin-node.conf" | |
| 30 | + not_if "grep 'host_name #{hostname}' /etc/munin/munin-node.conf" | |
| 31 | + notifies :restart, 'service[munin-node]' | |
| 32 | +end | ... | ... |
roles/server.rb