Dzahn has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/382922 )
Change subject: memcached: remove ganglia monitoring ...................................................................... memcached: remove ganglia monitoring Bug: T177225 Change-Id: I46403f6307e4c5a1b49bb66b417ee21cc4435ea5 --- M hieradata/role/common/memcached.yaml D modules/memcached/files/ganglia/gmond_memcached.py D modules/memcached/files/ganglia/gmond_memcached.pyconf D modules/memcached/manifests/ganglia.pp M modules/memcached/manifests/init.pp D modules/memcached/manifests/monitoring.pp 6 files changed, 1 insertion(+), 537 deletions(-) Approvals: jenkins-bot: Verified Dzahn: Looks good to me, approved diff --git a/hieradata/role/common/memcached.yaml b/hieradata/role/common/memcached.yaml index b5cf27c..93b1384 100644 --- a/hieradata/role/common/memcached.yaml +++ b/hieradata/role/common/memcached.yaml @@ -7,3 +7,4 @@ profile::memcached::extended_options: - 'slab_reassign' profile::memcached::port: '11211' +standard::has_ganglia: false diff --git a/modules/memcached/files/ganglia/gmond_memcached.py b/modules/memcached/files/ganglia/gmond_memcached.py deleted file mode 100644 index c85110d..0000000 --- a/modules/memcached/files/ganglia/gmond_memcached.py +++ /dev/null @@ -1,373 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import sys -import traceback -import os -import threading -import time -import socket -import select - -descriptors = list() -Desc_Skel = {} -_Worker_Thread = None -_Lock = threading.Lock() # synchronization lock -Debug = False - - -def dprint(f, *v): - if Debug: - print >>sys.stderr, "DEBUG: "+f % v - - -def floatable(str): - try: - float(str) - return True - except: - return False - - -class UpdateMetricThread(threading.Thread): - - def __init__(self, params): - threading.Thread.__init__(self) - self.running = False - self.shuttingdown = False - self.refresh_rate = 15 - if "refresh_rate" in params: - self.refresh_rate = int(params["refresh_rate"]) - self.metric = {} - self.last_metric = {} - self.timeout = 2 - - self.host = "localhost" - self.port = 11211 - if "host" in params: - self.host = params["host"] - if "port" in params: - self.port = int(params["port"]) - self.type = params["type"] - self.mp = params["metrix_prefix"] - - def shutdown(self): - self.shuttingdown = True - if not self.running: - return - self.join() - - def run(self): - self.running = True - - while not self.shuttingdown: - _Lock.acquire() - self.update_metric() - _Lock.release() - time.sleep(self.refresh_rate) - - self.running = False - - def update_metric(self): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - msg = "" - self.last_metric = self.metric.copy() - try: - dprint("connect %s:%d", self.host, self.port) - sock.connect((self.host, self.port)) - sock.send("stats\r\n") - - while True: - rfd, wfd, xfd = select.select([sock], [], [], self.timeout) - if not rfd: - print >>sys.stderr, "ERROR: select timeout" - break - - for fd in rfd: - if fd == sock: - data = fd.recv(8192) - msg += data - - if msg.find("END"): - break - - sock.close() - except socket.error, e: - print >>sys.stderr, "ERROR: %s" % e - - for m in msg.split("\r\n"): - d = m.split(" ") - if len(d) == 3 and d[0] == "STAT" and floatable(d[2]): - self.metric[self.mp+"_"+d[1]] = float(d[2]) - - def metric_of(self, name): - val = 0 - mp = name.split("_")[0] - name_tail = name.rsplit("_", 1) - if (name_tail[1] == "rate" and - name_tail[0] in self.metric): - _Lock.acquire() - name = name_tail[0] - if name in self.last_metric: - num = self.metric[name]-self.last_metric[name] - period = self.metric[mp+"_time"]-self.last_metric[mp+"_time"] - try: - val = num/period - except ZeroDivisionError: - val = 0 - _Lock.release() - elif (name_tail[1] == "ratio" and - "hits" in name_tail[0] and - name_tail[0] in self.metric and - name_tail[0].replace("hits", "misses") in self.metric): - _Lock.acquire() - hits_name = name_tail[0] - misses_name = hits_name.replace("hits", "misses") - if (hits_name in self.last_metric and - misses_name in self.last_metric): - hits = self.metric[hits_name]-self.last_metric[hits_name] - misses = self.metric[misses_name]-self.last_metric[misses_name] - try: - val = hits/(hits+misses) - except ZeroDivisionError: - val = 0 - _Lock.release() - elif name in self.metric: - _Lock.acquire() - val = self.metric[name] - _Lock.release() - return val - - -def metric_init(params): - global descriptors, Desc_Skel, _Worker_Thread, Debug - - print '[memcached] memcached protocol "stats"' - if "type" not in params: - params["type"] = "memcached" - - if "metrix_prefix" not in params: - if params["type"] == "memcached": - params["metrix_prefix"] = "mc" - elif params["type"] == "Tokyo Tyrant": - params["metrix_prefix"] = "tt" - - print params - - # initialize skeleton of descriptors - Desc_Skel = { - 'name': 'XXX', - 'call_back': metric_of, - 'time_max': 60, - 'value_type': 'float', - 'format': '%.0f', - 'units': 'XXX', - 'slope': 'XXX', # zero|positive|negative|both - 'description': 'XXX', - 'groups': params["type"], - } - - if "refresh_rate" not in params: - params["refresh_rate"] = 15 - if "debug" in params: - Debug = params["debug"] - dprint("%s", "Debug mode on") - - _Worker_Thread = UpdateMetricThread(params) - _Worker_Thread.start() - - # IP:HOSTNAME - if "spoof_host" in params: - Desc_Skel["spoof_host"] = params["spoof_host"] - - mp = params["metrix_prefix"] - - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_curr_items", - "units": "items", - "slope": "both", - "description": "Current number of items stored", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_get", - "units": "commands", - "slope": "positive", - "description": "Cumulative number of retrieval reqs", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_set", - "units": "commands", - "slope": "positive", - "description": "Cumulative number of storage reqs", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_bytes_read", - "units": "bytes", - "slope": "positive", - "description": "Total number of bytes read by this server from network", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_bytes_written", - "units": "bytes", - "slope": "positive", - "description": "Total number of bytes sent by this server to network", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_bytes", - "units": "bytes", - "slope": "both", - "description": "Current number of bytes used to store items", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_limit_maxbytes", - "units": "bytes", - "slope": "both", - "description": "Number of bytes this server is allowed to use for storage", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_curr_connections", - "units": "connections", - "slope": "both", - "description": "Number of open connections", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_evictions", - "units": "items", - "slope": "both", - "description": "Number of valid items removed from cache to free memory for new items", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_get_hits", - "units": "items", - "slope": "positive", - "description": "Number of keys that have been requested and found present", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_get_misses", - "units": "items", - "slope": "positive", - "description": "Number of items that have been requested and not found", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_get_hits_rate", - "units": "items", - "slope": "both", - "description": "Hits per second", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_get_misses_rate", - "units": "items", - "slope": "both", - "description": "Misses per second", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_get_rate", - "units": "commands", - "slope": "both", - "description": "Gets per second", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_set_rate", - "units": "commands", - "slope": "both", - "description": "Sets per second", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_get_hits_ratio", - "units": "items", - "slope": "positive", - "description": "Get hits ratio (hits/(hits+misses)", - })) - - # Tokyo Tyrant - if "type" in params and params["type"].lower().find("tokyo") == 0: - dtmp = descriptors[:] - for d in dtmp: - if d["name"] in [ - mp+"_bytes_read", - mp+"_bytes_written", - mp+"_limit_maxbytes", - mp+"_curr_connections", - mp+"_evictions", - ]: - descriptors.remove(d) - for d in descriptors: - if d["name"] == mp+"_get_hits": - d["name"] = mp+"_cmd_get_hits" - if d["name"] == mp+"_get_misses": - d["name"] = mp+"_cmd_get_misses" - - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_set_hits", - "units": "items", - "slope": "positive", - "description": "Number of keys that have been stored and found present", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_set_misses", - "units": "items", - "slope": "positive", - "description": "Number of items that have been stored and not found", - })) - - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_delete", - "units": "commands", - "slope": "positive", - "description": "Cumulative number of delete reqs", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_delete_hits", - "units": "items", - "slope": "positive", - "description": "Number of keys that have been deleted and found present ", - })) - descriptors.append(create_desc(Desc_Skel, { - "name": mp+"_cmd_delete_misses", - "units": "items", - "slope": "positive", - "description": "Number of items that have been deleted and not found", - })) - - return descriptors - - -def create_desc(skel, prop): - d = skel.copy() - for k, v in prop.iteritems(): - d[k] = v - return d - - -def metric_of(name): - return _Worker_Thread.metric_of(name) - - -def metric_cleanup(): - _Worker_Thread.shutdown() - - -if __name__ == '__main__': - try: - params = { - "host": "localhost", - "port": 11211, - # "host": "tt101", - # "port": 1978, - # "type": "Tokyo Tyrant", - # "metrix_prefix": "tt101", - "debug": True, - } - metric_init(params) - - while True: - for d in descriptors: - v = d['call_back'](d['name']) - print ('value for %s is '+d['format']) % (d['name'], v) - time.sleep(5) - except KeyboardInterrupt: - time.sleep(0.2) - os._exit(1) - except: - traceback.print_exc() - os._exit(1) diff --git a/modules/memcached/files/ganglia/gmond_memcached.pyconf b/modules/memcached/files/ganglia/gmond_memcached.pyconf deleted file mode 100644 index c915c13..0000000 --- a/modules/memcached/files/ganglia/gmond_memcached.pyconf +++ /dev/null @@ -1,109 +0,0 @@ -modules { - module { - name = "gmond_memcached" - language = "python" - - param host { - value = "localhost" - } - param port { - value = 11211 - } - param type { - value = "memcached" - } - - param refresh_rate { - value = 15 - } - - # param metrix_prefix { - # value = "mc" - # } - # param spoof_host { - # value = "__IPADDRESS__:__HOSTNAME__" - # } - } -} - -collection_group { - collect_every = 20 - time_threshold = 90 - - metric { - name = "mc_curr_items" - title = "Current number of items stored" - value_threshold = 0 - } - metric { - name = "mc_cmd_get" - title = "Cumulative number of retrieval reqs" - value_threshold = 0 - } - metric { - name = "mc_cmd_set" - title = "Cumulative number of storage reqs" - value_threshold = 0 - } - metric { - name = "mc_cmd_get_rate" - title = "Retrieval reqs/sec" - value_threshold = 0 - } - metric { - name = "mc_cmd_set_rate" - title = "Storage reqs/sec" - value_threshold = 0 - } - metric { - name = "mc_bytes_read" - title = "Total number of bytes read by this server from network" - value_threshold = 0 - } - metric { - name = "mc_bytes_written" - title = "Total number of bytes sent by this server to network" - value_threshold = 0 - } - metric { - name = "mc_bytes" - title = "Current number of bytes used to store items" - value_threshold = 0 - } - metric { - name = "mc_limit_maxbytes" - title = "Number of bytes this server is allowed to use for storage" - value_threshold = 0 - } - metric { - name = "mc_curr_connections" - title = "Number of open connections" - value_threshold = 0 - } - metric { - name = "mc_evictions" - title = "Number of valid items removed from cache to free memory for new items" - value_threshold = 0 - } - metric { - name = "mc_get_hits" - title = "Number of keys that have been requested and found present " - value_threshold = 0 - } - metric { - name = "mc_get_misses" - title = "Number of items that have been requested and not found" - value_threshold = 0 - } - metric { - name = "mc_get_hits_rate" - title = "Hits/sec" - value_threshold = 0 - } - metric { - name = "mc_get_misses_rate" - title = "Misses/sec" - value_threshold = 0 - } - -} diff --git a/modules/memcached/manifests/ganglia.pp b/modules/memcached/manifests/ganglia.pp deleted file mode 100644 index e4b2af9..0000000 --- a/modules/memcached/manifests/ganglia.pp +++ /dev/null @@ -1,26 +0,0 @@ -# memcached/ganglia.pp - -class memcached::ganglia { - file { '/usr/lib/ganglia/python_modules/memcached.py': - ensure => absent, - } - file { '/usr/lib/ganglia/python_modules/gmond_memcached.py': - owner => 'root', - group => 'root', - mode => '0444', - source => "puppet:///modules/${module_name}/ganglia/gmond_memcached.py", - require => File['/usr/lib/ganglia/python_modules'], - notify => Service['ganglia-monitor'], - } - file { '/usr/lib/ganglia/python_modules/memcached.pyconf': - ensure => absent, - } - file { '/etc/ganglia/conf.d/gmond_memcached.pyconf': - owner => 'root', - group => 'root', - mode => '0444', - source => "puppet:///modules/${module_name}/ganglia/gmond_memcached.pyconf", - require => File['/usr/lib/ganglia/python_modules/gmond_memcached.py'], - notify => Service['ganglia-monitor'], - } -} diff --git a/modules/memcached/manifests/init.pp b/modules/memcached/manifests/init.pp index 37863ff..f80754b 100644 --- a/modules/memcached/manifests/init.pp +++ b/modules/memcached/manifests/init.pp @@ -89,9 +89,6 @@ } include ::standard - if $::standard::has_ganglia { - include ::memcached::ganglia - } diamond::collector { 'Memcached': settings => { diff --git a/modules/memcached/manifests/monitoring.pp b/modules/memcached/manifests/monitoring.pp deleted file mode 100644 index ca2ce0d..0000000 --- a/modules/memcached/manifests/monitoring.pp +++ /dev/null @@ -1,26 +0,0 @@ -# == Class: memcached::monitoring -# -# Provisions Ganglia metric-gathering modules for memcached. -# -class memcached::monitoring { - include ::ganglia - - file { '/usr/lib/ganglia/python_modules/memcached.py': - source => 'puppet:///modules/memcached/ganglia/memcached.py', - owner => 'root', - group => 'root', - mode => '0444', - before => File['/etc/ganglia/conf.d/memcached.pyconf'], - require => Package['ganglia-monitor'], - notify => Service['ganglia-monitor'], - } - - file { '/etc/ganglia/conf.d/memcached.pyconf': - source => 'puppet:///modules/memcached/ganglia/memcached.pyconf', - owner => 'root', - group => 'root', - mode => '0444', - require => Package['ganglia-monitor'], - notify => Service['ganglia-monitor'], - } -} -- To view, visit https://gerrit.wikimedia.org/r/382922 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I46403f6307e4c5a1b49bb66b417ee21cc4435ea5 Gerrit-PatchSet: 4 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Dzahn <dz...@wikimedia.org> Gerrit-Reviewer: Dzahn <dz...@wikimedia.org> Gerrit-Reviewer: Volans <rcocci...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits