Alexandros Kosiaris has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/172553

Change subject: Introduce role::ganglia classes
......................................................................

Introduce role::ganglia classes

Introducing role classes for ganglia, based on the ganglia_new module
which also gets some new functionality. For now the role::ganglia::web
exists only but more stuff needs to be migrated in the future.

Update ganglia_new module to support:
* gmetad configuration
* rrdcached
* Override the default gmetad upstart script for RRDCACHED support
* gmetad configuration in the role
* Some preliminary tests support
* ganglia web frontend configuration

Change-Id: Iedd12f64b8a733c8c9c7df706d1c33397754cc37
---
A manifests/role/ganglia.pp
A modules/ganglia_new/manifests/gmetad.pp
A modules/ganglia_new/manifests/gmetad/rrdcached.pp
A modules/ganglia_new/manifests/web.pp
A modules/ganglia_new/templates/conf_production.php.erb
A modules/ganglia_new/templates/ganglia.wikimedia.org.erb
A modules/ganglia_new/templates/gmetad.conf.erb
A modules/ganglia_new/templates/gmetad.upstart
A modules/ganglia_new/templates/rrdcached.default.erb
A modules/ganglia_new/tests/Makefile
A modules/ganglia_new/tests/gmetad.pp
A modules/ganglia_new/tests/web.pp
12 files changed, 402 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/53/172553/1

diff --git a/manifests/role/ganglia.pp b/manifests/role/ganglia.pp
new file mode 100644
index 0000000..431c06b
--- /dev/null
+++ b/manifests/role/ganglia.pp
@@ -0,0 +1,106 @@
+class role::ganglia::config {
+    # TODO: hiera this
+    $rra_sizes = '"RRA:AVERAGE:0.5:1:360" "RRA:AVERAGE:0.5:24:245" 
"RRA:AVERAGE:0.5:168:241" "RRA:AVERAGE:0.5:672:241" "RRA:AVERAGE:0.5:5760:371"'
+
+    $data_sources = {
+        'Video scalers eqiad'            => 'tmh1001.eqiad.wmnet 
tmh1002.eqiad.wmnet',
+        'Image scalers eqiad'            => 'mw1153.eqiad.wmnet 
mw1154.eqiad.wmnet',
+        'API application servers eqiad'  => 'mw1114.eqiad.wmnet 
mw1115.eqiad.wmnet',
+        'Application servers eqaid'      => 'mw1054.eqiad.wmnet 
mw1055.eqiad.wmnet',
+        'HHVM Appservers eqiad'          => 'mw1017.eqiad.wmnet 
mw1018.eqiad.wmnet',
+        'Jobrunners eqiad'               => 'mw1001.eqiad.wmnet 
mw1002.eqiad.wmnet',
+        'MySQL'                          => 'db1050.eqiad.wmnet',
+        'PDF servers eqiad'              => 'ocg1001.eqiad.wmnet',
+        'Fundraising eqiad'              => 'pay-lvs1001.frack.eqiad.wmnet 
pay-lvs1002.frack.eqiad.wmnet',
+        'SSL cluster esams'              => 'hooft.esams.wikimedia.org:11675 
ssl3001.esams.wikimedia.org ssl3002.esams.wikimedia.org',
+        'Virtualization cluster eqiad'   => 'labnet1001.eqiad.wmnet 
virt1000.wikimedia.org',
+        'Labs NFS cluster eqiad'         => 'labstore1001.eqiad.wmnet 
labstore1003.eqiad.wmnet',
+        'MySQL eqiad'                    => 'db1053.eqiad.wmnet 
db1054.eqiad.wmnet db1057.eqiad.wmnet',
+        'LVS loadbalancers eqiad'        => 'lvs1001.wikimedia.org 
lvs1002.wikimedia.org',
+        'LVS loadbalancers codfw'        => 'install2001.wikimedia.org:10651 
lvs2001.codfw.wmnet lvs2002.codfw.wmnet',
+        'Miscellaneous eqiad'            => 'carbon.wikimedia.org 
ms1004.eqiad.wmnet',
+        'Miscellaneous codfw'            => 'install2001.wikimedia.org:10657',
+        'Mobile caches eqiad'            => 'cp1046.eqiad.wmnet 
cp1047.eqiad.wmnet',
+        'Mobile caches esams'            => 'hooft.esams.wikimedia.org:11677',
+        'Bits caches eqiad'              => 'cp1056.eqiad.wmnet 
cp1057.eqiad.wmnet',
+        'Upload caches eqiad'            => 'cp1048.eqiad.wmnet 
cp1061.eqiad.wmnet',
+        'SSL cluster eqiad'              => 'ssl1001.wikimedia.org 
ssl1002.wikimedia.org',
+        'Swift eqiad'                    => 'ms-fe1001.eqiad.wmnet 
ms-fe1002.eqiad.wmnet',
+        'Swift esams'                    => 'hooft.esams.wikimedia.org:11676',
+        'Swift codfw'                    => 'install2001.wikimedia.org:10676',
+        'Search eqiad'                   => 'search1001.eqiad.wmnet 
search1002.eqiad.wmnet',
+        'Bits caches esams'              => 'hooft.esams.wikimedia.org:11670 
cp3019.esams.wikimedia.org cp3020.esams.wikimedia.org',
+        'LVS loadbalancers esams'        => 'hooft.esams.wikimedia.org:11651 
lvs3001.esams.wmnet lvs3002.esams.wmnet',
+        'Miscellaneous esams'            => 'hooft.esams.wikimedia.org:11657',
+        'Analytics cluster eqiad'        => 'analytics1009.eqiad.wmnet 
analytics1010.eqiad.wmnet analytics1014.eqiad.wmnet',
+        'Memcached eqiad'                => 'mc1001.eqiad.wmnet 
mc1002.eqiad.wmnet',
+        'Text caches esams'              => 'hooft.esams.wikimedia.org:11669',
+        'Upload caches esams'            => 'hooft.esams.wikimedia.org:11671 
cp3003.esams.wikimedia.org cp3004.esams.wikimedia.org',
+        'Parsoid eqiad'                  => 'wtp1001.eqiad.wmnet 
wtp1002.eqiad.wmnet',
+        'Parsoid Varnish eqiad'          => 'cp1045.eqiad.wmnet 
cp1058.eqiad.wmnet',
+        'Redis eqiad'                    => 'rdb1001.eqiad.wmnet 
rdb1002.eqiad.wmnet',
+        'Text caches eqiad'              => 'cp1052.eqiad.wmnet 
cp1053.eqiad.wmnet',
+        'Misc Web caches eqiad'          => 'cp1043.eqiad.wmnet 
cp1044.eqiad.wmnet',
+        'LVS loadbalancers ulsfo'        => 'lvs4001.ulsfo.wmnet 
lvs4003.ulsfo.wmnet',
+        'Bits caches ulsfo'              => 'cp4001.ulsfo.wmnet 
cp4003.ulsfo.wmnet',
+        'Upload caches ulsfo'            => 'cp4005.ulsfo.wmnet 
cp4013.ulsfo.wmnet',
+        'Mobile caches ulsfo'            => 'cp4011.ulsfo.wmnet 
cp4019.ulsfo.wmnet',
+        'Text caches ulsfo'              => 'cp4008.ulsfo.wmnet 
cp4016.ulsfo.wmnet',
+        'Elasticsearch eqiad'            => 'elastic1001.eqiad.wmnet 
elastic1007.eqiad.wmnet elastic1013.eqiad.wmnet',
+        'Logstash eqiad'                 => 'logstash1001.eqiad.wmnet 
logstash1003.eqiad.wmnet',
+        'RCStream eqiad'                 => 'rcs1001.eqiad.wmnet',
+        'Analytics Kafka cluster eqiad'  => 'analytics1012.eqiad.wmnet 
analytics1018.eqiad.wmnet analytics1022.eqiad.wmnet',
+        'Service Cluster A eqiad'        => 'sca1001.eqiad.wmnet 
sca1002.eqiad.wmnet',
+        'Corp OIT LDAP mirror eqiad'     => 'plutonium.wikimedia.org',
+        'Corp OIT LDAP mirror codfw'     => 'pollux.wikimedia.org',
+    }
+}
+
+# A role that includes all the needed stuff to run a ganglia web frontend
+class role::ganglia::web {
+    include role::ganglia::params
+
+    $gmetad_root = '/srv/ganglia'
+    $rrd_rootdir = "${gmetad_root}/rrds"
+    $gmetad_socket = '/var/run/rrdcached-gmetad.sock'
+    $gweb_socket = '/var/run/rrdcached-gweb.sock'
+
+    class { 'ganglia_new::gmetad::rrdcached':
+        rrdpath       => $rrd_rootdir,
+        gmetad_socket => $gmetad_socket,
+        gweb_socket   => $gwebsocket,
+    }
+
+    # TODO: Automate the gmetad trusted hosts variable
+    class { 'ganglia_new::gmetad':
+        grid             => 'Wikimedia',
+        authority        => 'http://ganglia.wikimedia.org/latest',
+        rrd_rootdir      => $rrd_rootdir,
+        rrd_cachedsocket => $gmetad_socket,
+        trusted_hosts    => [
+                        '208.80.154.149', # bast1001
+                        '208.80.154.14', # neon
+                        '10.64.32.13', # terbium
+                        ],
+        data_sources     => $role::ganglia::params::datasources,
+        rra_sizes        => $role::ganglia::params::rra_sizes,
+    }
+
+    class { 'ganglia_new::web':
+        rrdcached_socket => $gweb_socket,
+        gmetad_root      => $gmetad_root,
+    }
+
+    # Get better insight into how disks are faring
+    ganglia::plugin::python { 'diskstat': }
+
+    monitor_service { 'ganglia_http':
+        description   => 'HTTP',
+        check_command => 'check_http',
+    }
+    include role::backup::host
+    backup::set { '/var/lib/ganglia': }
+
+    Class['ganglia_new::gmetad::rrdcached'] -> Class['ganglia_new::gmetad']
+    Class['ganglia_new::gmetad'] -> Class['ganglia_new::web']
+}
diff --git a/modules/ganglia_new/manifests/gmetad.pp 
b/modules/ganglia_new/manifests/gmetad.pp
new file mode 100644
index 0000000..3617132
--- /dev/null
+++ b/modules/ganglia_new/manifests/gmetad.pp
@@ -0,0 +1,40 @@
+class ganglia_new::gmetad(
+        $ensure='present',
+        $grid,
+        $rrd_rootdir,
+        $rrdcached_socket,
+        $authority,
+        $trusted_hosts,
+        $data_sources,
+        $rra_sizes,
+) {
+
+    package { 'gmetad':
+        ensure => $ensure,
+    }
+
+    file { '/etc/ganglia/gmetad.conf':
+        ensure  => $ensure,
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0444',
+        content => template('ganglia_new/gmetad.conf.erb'),
+    }
+
+    service { 'gmetad':
+        ensure   => ensure_service($ensure),
+        provider => 'upstart',
+    }
+
+    # We override the shipped by ubuntu upstart. We want to use rrdcached
+    file { '/etc/init/gmetad.conf':
+        ensure => $ensure,
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0444',
+        content => template('ganglia_new/gmetad.upstart'),
+    }
+
+    Package['gmetad'] -> File['/etc/ganglia/gmetad.conf'] -> Service['gmetad']
+    Package['gmetad'] -> File['/etc/init/gmetad.conf'] -> Service['gmetad']
+}
diff --git a/modules/ganglia_new/manifests/gmetad/rrdcached.pp 
b/modules/ganglia_new/manifests/gmetad/rrdcached.pp
new file mode 100644
index 0000000..07e7f8e
--- /dev/null
+++ b/modules/ganglia_new/manifests/gmetad/rrdcached.pp
@@ -0,0 +1,26 @@
+# Only support trusty
+class ganglia_new::gmetad::rrdcached(
+    $ensure='present',
+    $rrdpath,
+    $gmetasocket,
+    $gwebsocket,
+) {
+    package { 'rrdcached':
+        ensure => $ensure,
+    }
+
+    file { '/etc/default/rrdcached':
+        ensure  => $ensure,
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0444',
+        content => template('ganglia_new/rrdcached.default.erb'),
+    }
+
+    service { 'rrdcached':
+        ensure   => $ensure,
+        provider => 'upstart',
+    }
+
+    Package['rrdcached'] -> File['/etc/default/rrdcached'] -> 
Service['rrdcached']
+}
diff --git a/modules/ganglia_new/manifests/web.pp 
b/modules/ganglia_new/manifests/web.pp
new file mode 100644
index 0000000..4fc105d
--- /dev/null
+++ b/modules/ganglia_new/manifests/web.pp
@@ -0,0 +1,41 @@
+# Class for the ganglia frontend machine
+class ganglia_new::web(
+                    $ensure='present',
+                    $rrdcached_socket,
+                    $gmetad_root,
+) {
+    include ::apache
+    include ::apache::mod::php5
+    include ::apache::mod::ssl
+    include ::apache::mod::rewrite
+
+    $ganglia_servername = 'ganglia.wikimedia.org'
+    $ganglia_serveralias = 'nickel.wikimedia.org uranium.wikimedia.org'
+    $ganglia_webdir = '/usr/share/ganglia-webfrontend'
+    $ganglia_confdir = '/var/lib/ganglia-web'
+    $ganglia_ssl_cert = '/etc/ssl/certs/ganglia.wikimedia.org.pem'
+    $ganglia_ssl_key = '/etc/ssl/private/ganglia.wikimedia.org.key'
+    $ssl_settings = ssl_ciphersuite('apache-2.2', 'compat')
+
+    package { [ 'php5-gd',
+                'php5-mysql',
+                'rrdtool',
+                'librrds-perl',
+                'ganglia-webfrontend',
+            ]:
+        ensure => $ensure,
+    }
+
+    apache::site { $ganglia_servername:
+        content => template("ganglia_new/${ganglia_servername}.erb"),
+    }
+
+    file { '/etc/ganglia-webfrontend/conf.php':
+        ensure  => $ensure,
+        mode    => '0444',
+        owner   => 'root',
+        group   => 'root',
+        content => template('ganglia_new/conf_production.php.erb'),
+        require => Package['ganglia-webfrontend'],
+    }
+}
diff --git a/modules/ganglia_new/templates/conf_production.php.erb 
b/modules/ganglia_new/templates/conf_production.php.erb
new file mode 100644
index 0000000..439ea99
--- /dev/null
+++ b/modules/ganglia_new/templates/conf_production.php.erb
@@ -0,0 +1,24 @@
+<?php
+
+#
+# If you installed gmetad in a directory other than the default
+# make sure you change it here.
+#
+
+# Where gmetad stores the rrd archives.
+$conf['gmetad_root'] = "<%= @gmeta_root %>"
+$conf['rrds'] = "${conf['gmetad_root']}/rrds";
+
+# If you want to grab data from a different ganglia source specify it here.
+# Although, it would be strange to alter the IP since the Round-Robin
+# databases need to be local to be read.
+#
+$conf['ganglia_ip'] = "127.0.0.1";
+$conf['ganglia_port'] = 8654;
+
+#
+# Default metric
+#
+$conf['default_metric'] = "cpu_report";
+
+?>
diff --git a/modules/ganglia_new/templates/ganglia.wikimedia.org.erb 
b/modules/ganglia_new/templates/ganglia.wikimedia.org.erb
new file mode 100644
index 0000000..daadda5
--- /dev/null
+++ b/modules/ganglia_new/templates/ganglia.wikimedia.org.erb
@@ -0,0 +1,43 @@
+<VirtualHost *:80>
+    ServerName <%= @ganglia_servername %>
+    ServerAlias <%= @ganglia_serveralias %>
+    DocumentRoot /var/www
+    ServerAdmin [email protected]
+
+    <Directory "/var/www">
+    Options FollowSymLinks
+    AllowOverride None
+    Require all granted
+    </Directory>
+
+    Alias /latest <%= @ganglia_webdir %>
+
+    RedirectMatch ^/$ http://<%= @ganglia_servername %>/latest
+    ErrorLog /var/log/apache2/ganglia.wikimedia.org-error.log
+    LogLevel warn
+</VirtualHost>
+<% if @ganglia_ssl_cert %>
+<VirtualHost *:443>
+    ServerName <%= @ganglia_servername %>
+    ServerAlias <%= @ganglia_serveralias %>
+    DocumentRoot /var/www
+    ServerAdmin [email protected]
+
+    SSLEngine on
+    SSLCertificateFile <%= @ganglia_ssl_cert %>
+    SSLCertificateKeyFile <%= @ganglia_ssl_key %>
+    <%= @ssl_settings.join("\n") %>
+
+    <Directory "/var/www">
+    Options FollowSymLinks
+    AllowOverride None
+    Require all granted
+    </Directory>
+
+    Alias /latest <%= @ganglia_webdir %>
+
+    RedirectMatch ^/$ https://<%= @ganglia_servername %>/latest
+    ErrorLog /var/log/apache2/ganglia.wikimedia.org-error.log
+    LogLevel warn
+</VirtualHost>
+<% end %>
diff --git a/modules/ganglia_new/templates/gmetad.conf.erb 
b/modules/ganglia_new/templates/gmetad.conf.erb
new file mode 100644
index 0000000..5792f9b
--- /dev/null
+++ b/modules/ganglia_new/templates/gmetad.conf.erb
@@ -0,0 +1,54 @@
+# Ganglia Meta Daemon for <%= @grid %>
+#
+# This file is managed by Puppet!
+#
+
+<% if @realm == "labs" then %>
+# BEGIN AUTOGEN FROM CRON
+# END AUTOGEN FROM CRON
+<% end %>
+<% if @data_sources %>
+<% @data_sources.keys.sort.each do |ds_key| -%>
+data_source "<%= ds_key %>" <%= @data_sources[ds_key] %>
+<% end -%>
+<% end %>
+
+#
+# Round-Robin Archives
+# You can specify custom Round-Robin archives here (defaults are listed below)
+#
+# RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" 
"RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \
+#      "RRA:AVERAGE:0.5:5760:374"
+#
+
+# Custom RRA sizes, see 
http://bugzilla.ganglia.info/cgi-bin/bugzilla/show_bug.cgi?id=119
+<% if @rra_sizes %>
+RRAs <%= @rra_sizes %>
+<% end %>
+
+<% if @grid %>
+gridname "<%= @grid %>"
+<% end %>
+
+# The authority URL for this grid. Used by other gmetads to locate graphs
+<% if @authority %>
+authority "<%= @authority %>"
+<% end %>
+
+# List of machines this gmetad will share XML with. Localhost
+# is always trusted.
+# default: There is no default value
+# trusted_hosts 127.0.0.1 169.229.50.165 my.gmetad.org
+<% if @trusted_hosts %>
+trusted_hosts <%= @trusted_hosts.join(' ') %>
+<% end %>
+xml_port 8653
+interactive_port 8654
+#The number of simultaneous connections allowed to connect to the listen ports.
+server_threads <%= @processorcount.to_i/2 %>
+# Where gmetad stores its round-robin databases
+# default: "/var/lib/ganglia/rrds"
+# rrd_rootdir "/some/other/place"
+<% if @rrd_rootdir %>
+rrd_rootdir "<%= @rrd_rootdir %>"
+<% end %>
diff --git a/modules/ganglia_new/templates/gmetad.upstart 
b/modules/ganglia_new/templates/gmetad.upstart
new file mode 100644
index 0000000..d9f4bd4
--- /dev/null
+++ b/modules/ganglia_new/templates/gmetad.upstart
@@ -0,0 +1,15 @@
+# Upstart job for Ganglia gmetad
+
+description "Ganglia Metadata Daemon"
+author "Bernard Li <[email protected]> Alexandros Kosiaris 
<[email protected]>"
+
+expect daemon
+respawn
+
+start on runlevel [2345]
+stop on runlevel [!2345]
+
+env PIDFILE="/var/run/gmetad.pid"
+env RRDCACHED_ADDRESS="<%= @rrdcached_socket %>"
+
+exec /usr/sbin/gmetad --pid-file=$PIDFILE
diff --git a/modules/ganglia_new/templates/rrdcached.default.erb 
b/modules/ganglia_new/templates/rrdcached.default.erb
new file mode 100644
index 0000000..c67e781
--- /dev/null
+++ b/modules/ganglia_new/templates/rrdcached.default.erb
@@ -0,0 +1,25 @@
+###
+### THIS FILE IS MANAGED BY PUPPET
+###
+
+# /etc/default/rrdcached
+
+# 0: start rrdcached on boot, 1: do not start rrdcached on boot
+# default: 0
+DISABLE=0
+
+# options to be passed to rrdcached
+# (do not specify -p <pidfile> - this is handled by the init script)
+# default: see /etc/init.d/rrdcached
+#OPTS=""
+OPTS="-s nogroup -l unix:<%= @gmetadsocket %> -s www-data -P 
PENDING,FLUSH,STATS -l unix:<%= @gwebsocket %> -j /var/lib/rrdcached/journal/ 
-b <%= @rrdpath %> -B"
+
+# number of seconds to wait for rrdcached to shut down
+# (writing the data to disk may take some time;
+# tune this according to your setup)
+# default: 30
+MAXWAIT=30
+
+# 0: do not enable core-files, 1: enable core-files ... if rrdcached crashes
+# default: 0
+ENABLE_COREFILES=0
diff --git a/modules/ganglia_new/tests/Makefile 
b/modules/ganglia_new/tests/Makefile
new file mode 100644
index 0000000..76cd656
--- /dev/null
+++ b/modules/ganglia_new/tests/Makefile
@@ -0,0 +1,13 @@
+MANIFESTS=$(wildcard *.pp)
+OBJS=$(MANIFESTS:.pp=.po)
+TESTS_DIR=$(dir $(CURDIR))
+MODULE_DIR=$(TESTS_DIR:/=)
+MODULES_DIR=$(dir $(MODULE_DIR))
+
+all:   test
+
+test:  $(OBJS)
+
+%.po:  %.pp
+       puppet parser validate $<
+       puppet apply --noop --modulepath $(MODULES_DIR) $<
diff --git a/modules/ganglia_new/tests/gmetad.pp 
b/modules/ganglia_new/tests/gmetad.pp
new file mode 100644
index 0000000..bb77fc8
--- /dev/null
+++ b/modules/ganglia_new/tests/gmetad.pp
@@ -0,0 +1,9 @@
+#
+
+class { 'ganglia_new::gmetad':
+    grid                => 'mygrid',
+    rrd_rootdir         => '/var/lib/ganglia/rrds',
+    rrdcached_socket    => '/var/lib/ganglia/rrds',
+    authority           => 'http://localhost/ganglia',
+    trusted_hosts       => ['192.168.10.10', '192.168.20.20']
+}
diff --git a/modules/ganglia_new/tests/web.pp b/modules/ganglia_new/tests/web.pp
new file mode 100644
index 0000000..2f21708
--- /dev/null
+++ b/modules/ganglia_new/tests/web.pp
@@ -0,0 +1,6 @@
+#
+
+class { 'ganglia_new::web':
+    rrdcached_socket => '/var/run/gweb.sock',
+    gmetad_root      => '/var/lib/ganglia/',
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/172553
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iedd12f64b8a733c8c9c7df706d1c33397754cc37
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Alexandros Kosiaris <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to