Dzahn has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/382906 )
Change subject: postgresql: remove all ganglia support
......................................................................
postgresql: remove all ganglia support
Bug: T177225
Change-Id: Icb5bf587185a7527a6a8bbe0f888bf24b9ee3013
---
D modules/postgresql/files/ganglia/postgresql.py
D modules/postgresql/manifests/ganglia.pp
D modules/postgresql/spec/classes/postgresql_ganglia.rb
D modules/postgresql/templates/ganglia/postgresql.pyconf.erb
D modules/postgresql/tests/ganglia.pp
M modules/role/manifests/postgres/master.pp
M modules/role/manifests/postgres/slave.pp
7 files changed, 0 insertions(+), 510 deletions(-)
Approvals:
jenkins-bot: Verified
Dzahn: Looks good to me, approved
diff --git a/modules/postgresql/files/ganglia/postgresql.py
b/modules/postgresql/files/ganglia/postgresql.py
deleted file mode 100644
index e879ce1..0000000
--- a/modules/postgresql/files/ganglia/postgresql.py
+++ /dev/null
@@ -1,394 +0,0 @@
-#!/bin/env python
-
-import os
-import threading
-import time
-import psycopg2
-
-descriptors = list()
-_Worker_Thread = None
-_Lock = threading.Lock() # synchronization lock
-metric_results = {}
-
-
-def metric_of(name):
- global metric_results
- return metric_results.get(name, 0)
-
-
-# These are the defaults set for the metric attributes
-Desc_Skel = {
- "name": "N/A",
- "call_back": metric_of,
- "time_max": 60,
- "value_type": "uint",
- "units": "N/A",
- "slope": "both", # zero|positive|negative|both
- "format": "%d",
- "description": "N/A",
- "groups": "PostgreSQL",
- }
-
-# Create your queries here. Keys whose names match those defined in the default
-# set are overridden. Any additional key-value pairs (i.e. query) will not be
-# added to the Ganglia metric definition but can be useful for data purposes.
-metric_defs = {
- "pg_backends_waiting": {
- "description": "Number of postgres backends that are waiting",
- "units": "backends",
- "query": "SELECT count(*) AS backends_waiting FROM " +
- "pg_stat_activity WHERE waiting = 't';"
- },
- "pg_database_size": {
- "description": "Total size of all databases in bytes",
- "value_type": "double",
- "format": "%.0f",
- "units": "bytes",
- "query": "SELECT sum(pg_database_size(d.oid)) AS " +
- "size_database FROM pg_database d ORDER BY 1 DESC;"
- },
- "pg_idx_blks_read": {
- "description": "Total index blocks read",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(idx_blks_read) AS idx_blks_read " +
- "FROM pg_statio_all_indexes;"
- },
- "pg_idx_blks_hit": {
- "description": "Total index blocks hit",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(idx_blks_hit) AS idx_blks_hit " +
- "FROM pg_statio_all_indexes;"
- },
- "pg_locks": {
- "description": "Number of locks held",
- "units": "locks",
- "query": "SELECT count(*) FROM pg_locks;"
- },
- "pg_query_time_idle_in_txn": {
- "description": 'Age of longest _idle in transaction_ transaction',
- "units": "seconds",
- "query": "SELECT COALESCE(max(COALESCE(ROUND(EXTRACT(epoch " +
- "FROM now()-query_start)),0)),0) AS " +
- "query_time_idle_in_txn FROM pg_stat_activity " +
- "WHERE current_query = '% in transaction';"
- },
- "pg_max_idle_txn_time": {
- "description": "Age of longest idle transaction",
- "units": "seconds",
- "query": "SELECT COALESCE(max(COALESCE(ROUND(EXTRACT(epoch " +
- "FROM now()-query_start)),0)),0) as query_time_max FROM " +
- "pg_stat_activity WHERE current_query <> '<IDLE>';"
- },
- "pg_txn_time_max": {
- "description": "Age of longest transaction",
- "units": "seconds",
- "query": "SELECT max(COALESCE(ROUND(EXTRACT(epoch " +
- "FROM now()-xact_start)),0)) as txn_time_max " +
- "FROM pg_stat_activity WHERE xact_start IS NOT NULL;"
- },
- "pg_connections": {
- "description": "Number of connections",
- "units": "connctions",
- "query": "SELECT sum(numbackends) FROM pg_stat_database;"
- },
- "pg_wal_files": {
- "description": "number of wal files in pg_xlog directory",
- "units": "# wal files",
- "query": "SELECT count(*) AS wal_files FROM " +
- "pg_ls_dir('pg_xlog') WHERE pg_ls_dir ~ E'^[0-9A-F]{24}$';"
- },
- "pg_xact_commit": {
- "description": "Transactions committed",
- "slope": "positive",
- "units": "transactions",
- "query": "SELECT sum(xact_commit) as xact_commit FROM " +
- "pg_stat_database;",
- },
- "pg_xact_rollback": {
- "description": "Transactions rolled back",
- "slope": "positive",
- "units": "transactions",
- "query": "SELECT sum(xact_rollback) as xact_rollback FROM " +
- "pg_stat_database;",
- },
- "pg_blks_read": {
- "description": "Blocks read",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(blks_read) as blks_read FROM " +
- "pg_stat_database;",
- },
- "pg_blks_hit": {
- "description": "Blocks hit",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(blks_hit) as blks_hit FROM " +
- "pg_stat_database;",
- },
- "pg_tup_returned": {
- "description": "Tuples returned",
- "slope": "positive",
- "units": "tuples",
- "query": "SELECT sum(tup_returned) as tup_returned FROM " +
- "pg_stat_database;",
- },
- "pg_tup_fetched": {
- "description": "Tuples fetched",
- "slope": "positive",
- "units": "tuples",
- "query": "SELECT sum(tup_fetched) as tup_fetched FROM " +
- "pg_stat_database;",
- },
- "pg_tup_inserted": {
- "description": "Tuples inserted",
- "slope": "positive",
- "units": "tuples",
- "query": "SELECT sum(tup_inserted) as tup_inserted FROM " +
- "pg_stat_database;",
- },
- "pg_tup_updated": {
- "description": "Tuples updated",
- "slope": "positive",
- "units": "tuples",
- "query": "SELECT sum(tup_updated) as tup_updated FROM " +
- "pg_stat_database;",
- },
- "pg_tup_deleted": {
- "description": "Tuples deleted",
- "slope": "positive",
- "units": "tuples",
- "query": "SELECT sum(tup_deleted) as tup_deleted FROM " +
- "pg_stat_database;",
- },
- "pg_heap_blks_read": {
- "description": "Heap blocks read",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(heap_blks_read) as heap_blks_read FROM " +
- "pg_statio_all_tables;",
- },
- "pg_heap_blks_hit": {
- "description": "Heap blocks hit",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(heap_blks_hit) as heap_blks_hit FROM " +
- "pg_statio_all_tables;",
- },
- "pg_idx_blks_read_tbl": {
- "description": "Index blocks read",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(idx_blks_read) as idx_blks_read_tbl FROM " +
- "pg_statio_all_tables;",
- },
- "pg_idx_blks_hit_tbl": {
- "description": "Index blocks hit",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(idx_blks_hit) as idx_blks_hit_tbl FROM " +
- "pg_statio_all_tables;",
- },
- "pg_toast_blks_read": {
- "description": "Toast blocks read",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(toast_blks_read) as toast_blks_read FROM " +
- "pg_statio_all_tables;",
- },
- "pg_toast_blks_hit": {
- "description": "Toast blocks hit",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(toast_blks_hit) as toast_blks_hit FROM " +
- "pg_statio_all_tables;",
- },
- "pg_tidx_blks_read": {
- "description": "Toast index blocks read",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(tidx_blks_read) as tidx_blks_read FROM " +
- "pg_statio_all_tables;",
- },
- "pg_tidx_blks_hit": {
- "description": "Toast index blocks hit",
- "slope": "positive",
- "units": "blocks",
- "query": "SELECT sum(tidx_blks_hit) as tidx_blks_hit FROM " +
- "pg_statio_all_tables;",
- },
- "pg_bgwriter_buffers_checkpoint": {
- "description": "Buffers written at checkpoint",
- "slope": "positive",
- "units": "buffers",
- "query": "SELECT buffers_checkpoint FROM " +
- "pg_stat_bgwriter;",
- },
- "pg_bgwriter_buffers_clean": {
- "description": "Buffers cleaned by bgwriter",
- "slope": "positive",
- "units": "buffers",
- "query": "SELECT buffers_clean FROM " +
- "pg_stat_bgwriter;",
- },
- "pg_bgwriter_buffers_backend": {
- "description": "Buffers written by backends and not bgwriter",
- "slope": "positive",
- "units": "buffers",
- "query": "SELECT buffers_backend FROM " +
- "pg_stat_bgwriter;",
- },
- "pg_bgwriter_buffers_alloc": {
- "description": "Buffers allocated globally",
- "slope": "positive",
- "units": "buffers",
- "query": "SELECT buffers_checkpoint FROM " +
- "pg_stat_bgwriter;",
- },
-}
-
-
-def print_exception(custom_msg, exception):
- error_msg = custom_msg or "An error has occurred"
- print "%s %s" % (error_msg, exception),
- print "Code: %s, Message: %s" % (exception.pgcode, exception.pgerror)
-
-
-class UpdateMetricThread(threading.Thread):
- def __init__(self, params):
- threading.Thread.__init__(self)
- self.running = False
- self.shuttingdown = False
- self.refresh_rate = 30
- self.host = "localhost"
- self.dbuser = "postgres"
- self.dbpass = "secret"
- self.database = "template1"
- self.port = 5432
-
- param_list = ["host", "port", "dbuser", "dbpass", "database",
- "refresh_rate"]
- for attr in param_list:
- if attr in params:
- setattr(self, attr, params[attr])
-
- 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()
- try:
- self.update_metric()
- except psycopg2.OperationalError, e:
- print_exception("Unable to update metrics", e)
- _Lock.release()
- time.sleep(int(self.refresh_rate))
-
- self.running = False
-
- def update_metric(self):
- global metric_results
- try:
- conn = psycopg2.connect(host=self.host, port=self.port,
- database=self.database,
- user=self.dbuser, password=self.dbpass)
- except psycopg2.OperationalError, e:
- print_exception("Could not connect to database", e)
- raise
-
- converter = {
- 'float': float,
- 'uint': int
- }
-
- for metric_name, metric_attrs in metric_defs.iteritems():
- cur = conn.cursor()
- cur.execute(metric_attrs['query'])
- query_results = cur.fetchone()
- convert_fn = converter.get(
- metric_defs[metric_name].get('value_type'), int)
- metric_results[metric_name] = convert_fn(query_results[0])
- cur.close()
-
- conn.close()
-
-
-def metric_init(params):
- global descriptors, Desc_Skel, _Worker_Thread
-
- _Worker_Thread = UpdateMetricThread(params)
- _Worker_Thread.start()
-
- for metric_desc in metric_defs:
- descriptors.append(create_desc(
- metric_desc, Desc_Skel, metric_defs[metric_desc]))
-
- return descriptors
-
-
-def create_desc(metric_name, skel, prop):
- return dict(
- skel.items() +
- [('name', metric_name)] +
- [(k, v) for k, v in prop.items() if k in skel]
- )
-
-
-def metric_cleanup():
- _Worker_Thread.shutdown()
-
-
-if __name__ == '__main__':
- import argparse
-
- parser = argparse.ArgumentParser(
- description='Debug the Ganglia PostgreSQL module.')
- parser.add_argument(
- '--host', default='localhost',
- help='The PostgreSQL database host (default: %(default)s).')
- parser.add_argument(
- '--port', type=int, default=5432,
- help='The PostgreSQL database network port (default: %(default)s).')
- parser.add_argument(
- '--dbuser', default='postgres',
- help='The PostgreSQL database user (default: postgres).')
- parser.add_argument(
- '--dbpass', default='secret',
- help='The PostgreSQL database password.(default: %(default)s). ' +
- 'WARNING: Specifying passwords on the commandline is insecure. ' +
- 'Consider the -W option.')
- parser.add_argument(
- '-W', dest='prompt_pass', action='store_true',
- help='Prompt for the PostgreSQL database password.')
- parser.add_argument(
- '--database', default='template1',
- help='The PostgreSQL database to use. (default: %(default)s).')
- parser.add_argument(
- '--refresh_rate', type=int, default=10,
- help='The interval, in seconds, between query executions ' +
- 'metric collection. (default: %(default)s).')
- args = parser.parse_args()
- params = vars(args)
- if params['prompt_pass']:
- import getpass
- script_name = os.path.basename(__file__)
- params['dbpass'] = getpass.getpass(
- prompt="%s password: " % script_name)
- try:
- 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)
- print
- time.sleep(5)
- except KeyboardInterrupt:
- time.sleep(0.2)
- os._exit(1)
diff --git a/modules/postgresql/manifests/ganglia.pp
b/modules/postgresql/manifests/ganglia.pp
deleted file mode 100644
index 537d1a3..0000000
--- a/modules/postgresql/manifests/ganglia.pp
+++ /dev/null
@@ -1,37 +0,0 @@
-# == Class postgresql::ganglia
-# This installs a Ganglia plugin for postgresql
-#
-class postgresql::ganglia(
- $pgstats_user,
- $pgstats_pass,
- $pgstats_db = 'template1',
- $pgstats_host = '127.0.0.1',
- $pgstats_port = '5432',
- $pgstats_refresh_rate = 15,
- $ensure='present') {
- Class['postgresql::server'] -> Class['postgresql::ganglia']
-
- if !defined(Package['python-psycopg2']) {
- package { 'python-psycopg2':
- ensure => $ensure,
- }
- }
-
- file { '/usr/lib/ganglia/python_modules/postgresql.py':
- ensure => $ensure,
- owner => 'root',
- group => 'root',
- mode => '0444',
- source => "puppet:///modules/${module_name}/ganglia/postgresql.py",
- notify => Service['ganglia-monitor'],
- }
-
- file { '/etc/ganglia/conf.d/postgresql.pyconf':
- ensure => $ensure,
- owner => 'root',
- group => 'root',
- mode => '0444',
- content => template('postgresql/ganglia/postgresql.pyconf.erb'),
- notify => Service['ganglia-monitor'],
- }
-}
diff --git a/modules/postgresql/spec/classes/postgresql_ganglia.rb
b/modules/postgresql/spec/classes/postgresql_ganglia.rb
deleted file mode 100644
index d85d26e..0000000
--- a/modules/postgresql/spec/classes/postgresql_ganglia.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'spec_helper'
-
-describe 'postgresql::ganglia', :type => :class do
- let(:params) { {
- :ensure => 'present',
- }
- }
-
- context 'ensure present' do
- it { should
contain_file('/usr/lib/ganglia/python_modules/postgresql.py').with_ensure('present')
}
- it { should
contain_file('/etc/ganglia/conf.d/postgresql.pyconf').with_ensure('present') }
- end
-end
-
-describe 'postgresql::slave', :type => :class do
- let(:params) { {
- :ensure => 'absent',
- }
- }
-
- context 'ensure absent' do
- it { should
contain_file('/usr/lib/ganglia/python_modules/postgresql.py').with_ensure('absent')
}
- it { should
contain_file('/etc/ganglia/conf.d/postgresql.pyconf').with_ensure('absent') }
- end
-end
diff --git a/modules/postgresql/templates/ganglia/postgresql.pyconf.erb
b/modules/postgresql/templates/ganglia/postgresql.pyconf.erb
deleted file mode 100644
index b9f1488..0000000
--- a/modules/postgresql/templates/ganglia/postgresql.pyconf.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-modules {
- module {
- name = 'PostgreSQL'
- language = 'python'
-
- param host {
- value = '<%= @pgstats_host %>'
- }
- param port {
- value = '<%= @pgstats_port %>'
- }
- param dbuser {
- value = '<%= @pgstats_user %>'
- }
- param dbpass {
- value = '<%= @pgstats_pass %>'
- }
- param database {
- value = '<%= @pgstats_db %>'
- }
- # This parameter determines the interval, in seconds, between the execution
- # of queries which gather the statistics of the database
- param refresh_rate {
- value = <%= @pgstats_refresh_rate %>
- }
- }
-}
-
-collection_group {
- collect_every = 15
- time_threshold = 90
-
- metric {
- name_match = "pg_(.+)"
- value_threshold = 0
- }
-}
diff --git a/modules/postgresql/tests/ganglia.pp
b/modules/postgresql/tests/ganglia.pp
deleted file mode 100644
index c331090..0000000
--- a/modules/postgresql/tests/ganglia.pp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-
-include ::postgresql::server
-class {'::postgresql::ganglia':
- pgstats_user => 'test',
- pgstats_pass => 'test',
-}
diff --git a/modules/role/manifests/postgres/master.pp
b/modules/role/manifests/postgres/master.pp
index fe06b89..c9f754d 100644
--- a/modules/role/manifests/postgres/master.pp
+++ b/modules/role/manifests/postgres/master.pp
@@ -9,11 +9,6 @@
root_dir => $role::postgres::common::root_dir,
}
- class { 'postgresql::ganglia':
- pgstats_user => $passwords::postgres::ganglia_user,
- pgstats_pass => $passwords::postgres::ganglia_pass,
- }
-
system::role { 'postgres::master':
ensure => 'present',
description => 'Postgres db master',
diff --git a/modules/role/manifests/postgres/slave.pp
b/modules/role/manifests/postgres/slave.pp
index 43cd954..06ebb34 100644
--- a/modules/role/manifests/postgres/slave.pp
+++ b/modules/role/manifests/postgres/slave.pp
@@ -17,9 +17,4 @@
includes => 'tuning.conf',
root_dir => $role::postgres::common::root_dir,
}
-
- class { 'postgresql::ganglia':
- pgstats_user => $passwords::postgres::ganglia_user,
- pgstats_pass => $passwords::postgres::ganglia_pass,
- }
}
--
To view, visit https://gerrit.wikimedia.org/r/382906
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Icb5bf587185a7527a6a8bbe0f888bf24b9ee3013
Gerrit-PatchSet: 2
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Dzahn <[email protected]>
Gerrit-Reviewer: Alexandros Kosiaris <[email protected]>
Gerrit-Reviewer: Dzahn <[email protected]>
Gerrit-Reviewer: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: Giuseppe Lavagetto <[email protected]>
Gerrit-Reviewer: Volans <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits