sensu-plugins-postgres 0.1.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/CHANGELOG.md +14 -1
- data/bin/check-postgres-alive.rb +11 -1
- data/bin/check-postgres-connections.rb +13 -3
- data/bin/check-postgres-query.rb +12 -2
- data/bin/check-postgres-replication.rb +12 -5
- data/bin/metric-postgres-connections.rb +24 -5
- data/bin/metric-postgres-dbsize.rb +14 -4
- data/bin/metric-postgres-graphite.rb +16 -9
- data/bin/metric-postgres-locks.rb +14 -4
- data/bin/metric-postgres-statsbgwriter.rb +11 -1
- data/bin/metric-postgres-statsdb.rb +22 -12
- data/bin/metric-postgres-statsio.rb +20 -10
- data/bin/metric-postgres-statstable.rb +22 -12
- data/bin/metrics-postgres-query.rb +12 -2
- data/lib/sensu-plugins-postgres/version.rb +3 -3
- metadata +50 -34
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NDQ4ZGVhOGZlZDQ4MTFkZjdmMjU2NzgxNDM5YWUwNWMyYjNmNDEyNQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c8bd7d42a4da5586cf9bc1feb0d93f7006603ccf
|
4
|
+
data.tar.gz: ca622f7c1882130abb6f5923cf7b9500284f4df7
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MTc0NjQxNjk1MWQyZGY5Mzg5YzdiOGZmNTViMjJhMmQ3MGM3ZTgzOWY1NWFj
|
11
|
-
YWFhZjQwNDFhYmRmYzY3NmMzYTY4ZTk3YTVkMWQ5ZWYyNDVmMjM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MzY3Y2MwNzk1YWFkMjE2NWM3ZGM4N2Q5NDExMmNmMzk1ZGZlMTQ5OGUyOTg4
|
14
|
-
N2RkODA1ZGNlMzg5MGI1MTZjZGY3MTgyNDk2MWFlMjFlMTJmNzc1ODhhOTRm
|
15
|
-
NTc1ZTEwNjE5M2I4N2YxNjg2MzdlOTUxN2NkNjk1ZmNhZjczZjE=
|
6
|
+
metadata.gz: 675847f09f4ab9cd3cd0f86abf28df99c0396324dd8f1ef5da21c064ab8af23aa91fd26cc58a6b72fa0f4754f4883579ebf0d92ede19d666d61ad1858df33c95
|
7
|
+
data.tar.gz: 8d87a30589db442025420ee2c05961c29981c18f20b6344ac02c675d2023a51303de4a7d0b60c7b5bb5b9469f2999a9421c7df7218b38777c83aabc4f1e5aa6f
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,17 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
|
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
7
|
|
8
|
+
## [1.0.0] - 2016-12-27
|
9
|
+
### Fixed
|
10
|
+
- metric-postgres-connections: Handle postgres version 9.6 and above.
|
11
|
+
|
12
|
+
### Removed
|
13
|
+
- Ruby 1.9.3 and 2.0.0 support
|
14
|
+
|
15
|
+
### Added
|
16
|
+
- Ruby 2.3.0 support
|
17
|
+
- Update all the scripts to add an optional timeout setting.
|
18
|
+
|
8
19
|
## [0.1.1] - 2016-03-24
|
9
20
|
### Added
|
10
21
|
- metric-postgres-connections: Add new metric `total`
|
@@ -51,7 +62,9 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
|
|
51
62
|
### Added
|
52
63
|
- initial release
|
53
64
|
|
54
|
-
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/
|
65
|
+
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/1.0.0...HEAD
|
66
|
+
[1.0.0]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/0.1.1...1.0.0
|
67
|
+
[0.1.1]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/0.1.0...0.1.1
|
55
68
|
[0.1.0]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/0.0.7...0.1.0
|
56
69
|
[0.0.7]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/0.0.6...0.0.7
|
57
70
|
[0.0.6]: https://github.com/sensu-plugins/sensu-plugins-postgres/compare/0.0.5...0.0.6
|
data/bin/check-postgres-alive.rb
CHANGED
@@ -58,8 +58,18 @@ class CheckPostgres < Sensu::Plugin::Check::CLI
|
|
58
58
|
long: '--port PORT',
|
59
59
|
default: 5432
|
60
60
|
|
61
|
+
option :timeout,
|
62
|
+
description: 'Connection timeout (seconds)',
|
63
|
+
short: '-T TIMEOUT',
|
64
|
+
long: '--timeout TIMEOUT',
|
65
|
+
default: nil
|
66
|
+
|
61
67
|
def run
|
62
|
-
con = PG
|
68
|
+
con = PG.connect(host: config[:hostname],
|
69
|
+
dbname: config[:database],
|
70
|
+
user: config[:user],
|
71
|
+
password: config[:password],
|
72
|
+
connect_timeout: config[:timeout])
|
63
73
|
res = con.exec('select version();')
|
64
74
|
info = res.first
|
65
75
|
|
@@ -58,7 +58,7 @@ class CheckPostgresConnections < Sensu::Plugin::Check::CLI
|
|
58
58
|
long: '--port PORT',
|
59
59
|
default: 5432
|
60
60
|
|
61
|
-
option :
|
61
|
+
option :database,
|
62
62
|
description: 'Database name',
|
63
63
|
short: '-d DB',
|
64
64
|
long: '--db DB',
|
@@ -67,7 +67,7 @@ class CheckPostgresConnections < Sensu::Plugin::Check::CLI
|
|
67
67
|
option :warning,
|
68
68
|
description: 'Warning threshold number or % of connections. (default: 200 connections)',
|
69
69
|
short: '-w WARNING',
|
70
|
-
long: '--warning
|
70
|
+
long: '--warning WARNING',
|
71
71
|
default: 200,
|
72
72
|
proc: proc(&:to_i)
|
73
73
|
|
@@ -85,9 +85,19 @@ class CheckPostgresConnections < Sensu::Plugin::Check::CLI
|
|
85
85
|
boolean: true,
|
86
86
|
default: false
|
87
87
|
|
88
|
+
option :timeout,
|
89
|
+
description: 'Connection timeout (seconds)',
|
90
|
+
short: '-T TIMEOUT',
|
91
|
+
long: '--timeout TIMEOUT',
|
92
|
+
default: nil
|
93
|
+
|
88
94
|
def run
|
89
95
|
begin
|
90
|
-
con = PG
|
96
|
+
con = PG.connect(host: config[:hostname],
|
97
|
+
dbname: config[:database],
|
98
|
+
user: config[:user],
|
99
|
+
password: config[:password],
|
100
|
+
connect_timeout: config[:timeout])
|
91
101
|
max_conns = con.exec('SHOW max_connections').getvalue(0, 0).to_i
|
92
102
|
current_conns = con.exec('SELECT count(*) from pg_stat_activity').getvalue(0, 0).to_i
|
93
103
|
rescue PG::Error => e
|
data/bin/check-postgres-query.rb
CHANGED
@@ -57,7 +57,7 @@ class CheckPostgresQuery < Sensu::Plugin::Check::CLI
|
|
57
57
|
long: '--port PORT',
|
58
58
|
default: 5432
|
59
59
|
|
60
|
-
option :
|
60
|
+
option :database,
|
61
61
|
description: 'Database name',
|
62
62
|
short: '-d DB',
|
63
63
|
long: '--db DB',
|
@@ -88,9 +88,19 @@ class CheckPostgresQuery < Sensu::Plugin::Check::CLI
|
|
88
88
|
long: '--critical CRITICAL',
|
89
89
|
default: nil
|
90
90
|
|
91
|
+
option :timeout,
|
92
|
+
description: 'Connection timeout (seconds)',
|
93
|
+
short: '-T TIMEOUT',
|
94
|
+
long: '--timeout TIMEOUT',
|
95
|
+
default: nil
|
96
|
+
|
91
97
|
def run
|
92
98
|
begin
|
93
|
-
con = PG
|
99
|
+
con = PG.connect(host: config[:hostname],
|
100
|
+
dbname: config[:database],
|
101
|
+
user: config[:user],
|
102
|
+
password: config[:password],
|
103
|
+
connect_timeout: config[:timeout])
|
94
104
|
res = con.exec(config[:query].to_s)
|
95
105
|
rescue PG::Error => e
|
96
106
|
unknown "Unable to query PostgreSQL: #{e.message}"
|
@@ -78,6 +78,12 @@ class CheckPostgresReplicationStatus < Sensu::Plugin::Check::CLI
|
|
78
78
|
# #YELLOW
|
79
79
|
proc: lambda { |s| s.to_i }) # rubocop:disable Lambda
|
80
80
|
|
81
|
+
option(:timeout,
|
82
|
+
short: '-T',
|
83
|
+
long: '--timeout',
|
84
|
+
default: nil,
|
85
|
+
description: 'Connection timeout (seconds)')
|
86
|
+
|
81
87
|
def compute_lag(master, slave, m_segbytes)
|
82
88
|
m_segment, m_offset = master.split('/')
|
83
89
|
s_segment, s_offset = slave.split('/')
|
@@ -92,7 +98,8 @@ class CheckPostgresReplicationStatus < Sensu::Plugin::Check::CLI
|
|
92
98
|
dbname: config[:database],
|
93
99
|
user: config[:user],
|
94
100
|
password: config[:password],
|
95
|
-
sslmode: ssl_mode
|
101
|
+
sslmode: ssl_mode,
|
102
|
+
connect_timeout: config[:timeout])
|
96
103
|
|
97
104
|
master = conn_master.exec('SELECT pg_current_xlog_location()').getvalue(0, 0)
|
98
105
|
m_segbytes = conn_master.exec('SHOW wal_segment_size').getvalue(0, 0).sub(/\D+/, '').to_i << 20
|
@@ -103,7 +110,8 @@ class CheckPostgresReplicationStatus < Sensu::Plugin::Check::CLI
|
|
103
110
|
dbname: config[:database],
|
104
111
|
user: config[:user],
|
105
112
|
password: config[:password],
|
106
|
-
sslmode: ssl_mode
|
113
|
+
sslmode: ssl_mode,
|
114
|
+
connect_timeout: config[:timeout])
|
107
115
|
|
108
116
|
slave = conn_slave.exec('SELECT pg_last_xlog_receive_location()').getvalue(0, 0)
|
109
117
|
conn_slave.close
|
@@ -114,10 +122,9 @@ class CheckPostgresReplicationStatus < Sensu::Plugin::Check::CLI
|
|
114
122
|
|
115
123
|
message = "replication delayed by #{lag_in_mb}MB :: master:#{master} slave:#{slave} m_segbytes:#{m_segbytes}"
|
116
124
|
|
117
|
-
|
118
|
-
when lag_in_mb >= config[:crit]
|
125
|
+
if lag_in_mb >= config[:crit]
|
119
126
|
critical message
|
120
|
-
|
127
|
+
elsif lag_in_mb >= config[:warn]
|
121
128
|
warning message
|
122
129
|
else
|
123
130
|
ok message
|
@@ -55,7 +55,7 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
55
55
|
long: '--port PORT',
|
56
56
|
default: 5432
|
57
57
|
|
58
|
-
option :
|
58
|
+
option :database,
|
59
59
|
description: 'Database name',
|
60
60
|
short: '-d DB',
|
61
61
|
long: '--db DB',
|
@@ -66,13 +66,32 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
66
66
|
long: '--scheme SCHEME',
|
67
67
|
default: "#{Socket.gethostname}.postgresql"
|
68
68
|
|
69
|
+
option :timeout,
|
70
|
+
description: 'Connection timeout (seconds)',
|
71
|
+
short: '-T TIMEOUT',
|
72
|
+
long: '--timeout TIMEOUT',
|
73
|
+
default: nil
|
74
|
+
|
69
75
|
def run
|
70
76
|
timestamp = Time.now.to_i
|
71
77
|
|
72
|
-
con = PG
|
78
|
+
con = PG.connect(host: config[:hostname],
|
79
|
+
dbname: config[:database],
|
80
|
+
user: config[:user],
|
81
|
+
password: config[:password],
|
82
|
+
connect_timeout: config[:timeout])
|
83
|
+
request = [
|
84
|
+
"select case when count(*) = 1 then 'waiting' else",
|
85
|
+
"'case when wait_event_type is null then false else true end' end as wait_col",
|
86
|
+
'from information_schema.columns',
|
87
|
+
"where table_name = 'pg_stat_activity' and table_schema = 'pg_catalog'",
|
88
|
+
"and column_name = 'waiting'"
|
89
|
+
]
|
90
|
+
wait_col = con.exec(request.join(' ')).first['wait_col']
|
91
|
+
|
73
92
|
request = [
|
74
|
-
|
75
|
-
"where datname = '#{config[:
|
93
|
+
"select count(*), #{wait_col} as waiting from pg_stat_activity",
|
94
|
+
"where datname = '#{config[:database]}' group by #{wait_col}"
|
76
95
|
]
|
77
96
|
|
78
97
|
metrics = {
|
@@ -93,7 +112,7 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
93
112
|
metrics[:total] = (metrics[:waiting].to_i + metrics[:active].to_i)
|
94
113
|
|
95
114
|
metrics.each do |metric, value|
|
96
|
-
output "#{config[:scheme]}.connections.#{config[:
|
115
|
+
output "#{config[:scheme]}.connections.#{config[:database]}.#{metric}", value, timestamp
|
97
116
|
end
|
98
117
|
|
99
118
|
ok
|
@@ -55,7 +55,7 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
55
55
|
long: '--port PORT',
|
56
56
|
default: 5432
|
57
57
|
|
58
|
-
option :
|
58
|
+
option :database,
|
59
59
|
description: 'Database name',
|
60
60
|
short: '-d DB',
|
61
61
|
long: '--db DB',
|
@@ -66,17 +66,27 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
66
66
|
long: '--scheme SCHEME',
|
67
67
|
default: "#{Socket.gethostname}.postgresql"
|
68
68
|
|
69
|
+
option :timeout,
|
70
|
+
description: 'Connection timeout (seconds)',
|
71
|
+
short: '-T TIMEOUT',
|
72
|
+
long: '--timeout TIMEOUT',
|
73
|
+
default: nil
|
74
|
+
|
69
75
|
def run
|
70
76
|
timestamp = Time.now.to_i
|
71
77
|
|
72
|
-
con = PG
|
78
|
+
con = PG.connect(host: config[:hostname],
|
79
|
+
dbname: config[:database],
|
80
|
+
user: config[:user],
|
81
|
+
password: config[:password],
|
82
|
+
connect_timeout: config[:timeout])
|
73
83
|
request = [
|
74
|
-
"select pg_database_size('#{config[:
|
84
|
+
"select pg_database_size('#{config[:database]}')"
|
75
85
|
]
|
76
86
|
|
77
87
|
con.exec(request.join(' ')) do |result|
|
78
88
|
result.each do |row|
|
79
|
-
output "#{config[:scheme]}.size.#{config[:
|
89
|
+
output "#{config[:scheme]}.size.#{config[:database]}", row['pg_database_size'], timestamp
|
80
90
|
end
|
81
91
|
end
|
82
92
|
|
@@ -70,16 +70,19 @@ class CheckpostgresReplicationStatus < Sensu::Plugin::Metric::CLI::Graphite
|
|
70
70
|
long: '--port PORT',
|
71
71
|
default: 5432
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
@dbusername = config[:user]
|
79
|
-
@password = config[:pass]
|
73
|
+
option :timeout,
|
74
|
+
description: 'Connection timeout (seconds)',
|
75
|
+
short: '-T TIMEOUT',
|
76
|
+
long: '--timeout TIMEOUT',
|
77
|
+
default: nil
|
80
78
|
|
79
|
+
def run
|
81
80
|
# Establishing connections to the master
|
82
|
-
conn_master =
|
81
|
+
conn_master = PG.connect(host: config[:master_host],
|
82
|
+
dbname: config[:database],
|
83
|
+
user: config[:user],
|
84
|
+
password: config[:password],
|
85
|
+
connect_timeout: config[:timeout])
|
83
86
|
res1 = conn_master.exec('SELECT pg_current_xlog_location()').getvalue(0, 0)
|
84
87
|
m_segbytes = conn_master.exec('SHOW wal_segment_size').getvalue(0, 0).sub(/\D+/, '').to_i << 20
|
85
88
|
conn_master.close
|
@@ -91,7 +94,11 @@ class CheckpostgresReplicationStatus < Sensu::Plugin::Metric::CLI::Graphite
|
|
91
94
|
end
|
92
95
|
|
93
96
|
# Establishing connections to the slave
|
94
|
-
conn_slave =
|
97
|
+
conn_slave = PG.connect(host: config[:slave_host],
|
98
|
+
dbname: config[:database],
|
99
|
+
user: config[:user],
|
100
|
+
password: config[:password],
|
101
|
+
connect_timeout: config[:timeout])
|
95
102
|
res = conn_slave.exec('SELECT pg_last_xlog_receive_location()').getvalue(0, 0)
|
96
103
|
conn_slave.close
|
97
104
|
|
@@ -55,7 +55,7 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
55
55
|
long: '--port PORT',
|
56
56
|
default: 5432
|
57
57
|
|
58
|
-
option :
|
58
|
+
option :database,
|
59
59
|
description: 'Database name',
|
60
60
|
short: '-d DB',
|
61
61
|
long: '--db DB',
|
@@ -66,15 +66,25 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
66
66
|
long: '--scheme SCHEME',
|
67
67
|
default: "#{Socket.gethostname}.postgresql"
|
68
68
|
|
69
|
+
option :timeout,
|
70
|
+
description: 'Connection timeout (seconds)',
|
71
|
+
short: '-T TIMEOUT',
|
72
|
+
long: '--timeout TIMEOUT',
|
73
|
+
default: nil
|
74
|
+
|
69
75
|
def run
|
70
76
|
timestamp = Time.now.to_i
|
71
77
|
|
72
78
|
locks_per_type = Hash.new(0)
|
73
79
|
|
74
|
-
con = PG
|
80
|
+
con = PG.connect(host: config[:hostname],
|
81
|
+
dbname: config[:database],
|
82
|
+
user: config[:user],
|
83
|
+
password: config[:password],
|
84
|
+
connect_timeout: config[:timeout])
|
75
85
|
request = [
|
76
86
|
'SELECT mode, count(mode) FROM pg_locks',
|
77
|
-
"where database = (select oid from pg_database where datname = '#{config[:
|
87
|
+
"where database = (select oid from pg_database where datname = '#{config[:database]}')",
|
78
88
|
'group by mode'
|
79
89
|
]
|
80
90
|
|
@@ -86,7 +96,7 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
86
96
|
end
|
87
97
|
|
88
98
|
locks_per_type.each do |lock_type, count|
|
89
|
-
output "#{config[:scheme]}.locks.#{config[:
|
99
|
+
output "#{config[:scheme]}.locks.#{config[:database]}.#{lock_type}", count, timestamp
|
90
100
|
end
|
91
101
|
|
92
102
|
ok
|
@@ -60,10 +60,20 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
60
60
|
long: '--scheme SCHEME',
|
61
61
|
default: "#{Socket.gethostname}.postgresql"
|
62
62
|
|
63
|
+
option :timeout,
|
64
|
+
description: 'Connection timeout (seconds)',
|
65
|
+
short: '-T TIMEOUT',
|
66
|
+
long: '--timeout TIMEOUT',
|
67
|
+
default: nil
|
68
|
+
|
63
69
|
def run
|
64
70
|
timestamp = Time.now.to_i
|
65
71
|
|
66
|
-
con = PG
|
72
|
+
con = PG.connect(host: config[:hostname],
|
73
|
+
dbname: 'postgres',
|
74
|
+
user: config[:user],
|
75
|
+
password: config[:password],
|
76
|
+
connect_timeout: config[:timeout])
|
67
77
|
request = [
|
68
78
|
'select checkpoints_timed, checkpoints_req,',
|
69
79
|
'buffers_checkpoint, buffers_clean,',
|
@@ -56,7 +56,7 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
56
56
|
long: '--port PORT',
|
57
57
|
default: 5432
|
58
58
|
|
59
|
-
option :
|
59
|
+
option :database,
|
60
60
|
description: 'Database name',
|
61
61
|
short: '-d DB',
|
62
62
|
long: '--db DB',
|
@@ -67,27 +67,37 @@ class PostgresStatsDBMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
67
67
|
long: '--scheme SCHEME',
|
68
68
|
default: "#{Socket.gethostname}.postgresql"
|
69
69
|
|
70
|
+
option :timeout,
|
71
|
+
description: 'Connection timeout (seconds)',
|
72
|
+
short: '-T TIMEOUT',
|
73
|
+
long: '--timeout TIMEOUT',
|
74
|
+
default: nil
|
75
|
+
|
70
76
|
def run
|
71
77
|
timestamp = Time.now.to_i
|
72
78
|
|
73
|
-
con = PG
|
79
|
+
con = PG.connect(host: config[:hostname],
|
80
|
+
dbname: config[:database],
|
81
|
+
user: config[:user],
|
82
|
+
password: config[:password],
|
83
|
+
connect_timeout: config[:timeout])
|
74
84
|
request = [
|
75
85
|
'select xact_commit, xact_rollback,',
|
76
86
|
'blks_read, blks_hit,',
|
77
87
|
'tup_returned, tup_fetched, tup_inserted, tup_updated, tup_deleted',
|
78
|
-
"from pg_stat_database where datname='#{config[:
|
88
|
+
"from pg_stat_database where datname='#{config[:database]}'"
|
79
89
|
]
|
80
90
|
con.exec(request.join(' ')) do |result|
|
81
91
|
result.each do |row|
|
82
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
83
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
84
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
85
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
86
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
87
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
88
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
89
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
90
|
-
output "#{config[:scheme]}.statsdb.#{config[:
|
92
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.xact_commit", row['xact_commit'], timestamp
|
93
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.xact_rollback", row['xact_rollback'], timestamp
|
94
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.blks_read", row['blks_read'], timestamp
|
95
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.blks_hit", row['blks_hit'], timestamp
|
96
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.tup_returned", row['tup_returned'], timestamp
|
97
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.tup_fetched", row['tup_fetched'], timestamp
|
98
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.tup_inserted", row['tup_inserted'], timestamp
|
99
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.tup_updated", row['tup_updated'], timestamp
|
100
|
+
output "#{config[:scheme]}.statsdb.#{config[:database]}.tup_deleted", row['tup_deleted'], timestamp
|
91
101
|
end
|
92
102
|
end
|
93
103
|
|
@@ -56,7 +56,7 @@ class PostgresStatsIOMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
56
56
|
long: '--port PORT',
|
57
57
|
default: 5432
|
58
58
|
|
59
|
-
option :
|
59
|
+
option :database,
|
60
60
|
description: 'Database name',
|
61
61
|
short: '-d DB',
|
62
62
|
long: '--db DB',
|
@@ -73,10 +73,20 @@ class PostgresStatsIOMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
73
73
|
long: '--scheme SCHEME',
|
74
74
|
default: "#{Socket.gethostname}.postgresql"
|
75
75
|
|
76
|
+
option :timeout,
|
77
|
+
description: 'Connection timeout (seconds)',
|
78
|
+
short: '-T TIMEOUT',
|
79
|
+
long: '--timeout TIMEOUT',
|
80
|
+
default: nil
|
81
|
+
|
76
82
|
def run
|
77
83
|
timestamp = Time.now.to_i
|
78
84
|
|
79
|
-
con = PG
|
85
|
+
con = PG.connect(host: config[:hostname],
|
86
|
+
dbname: config[:database],
|
87
|
+
user: config[:user],
|
88
|
+
password: config[:password],
|
89
|
+
connect_timeout: config[:timeout])
|
80
90
|
request = [
|
81
91
|
'select sum(heap_blks_read) as heap_blks_read, sum(heap_blks_hit) as heap_blks_hit,',
|
82
92
|
'sum(idx_blks_read) as idx_blks_read, sum(idx_blks_hit) as idx_blks_hit,',
|
@@ -86,14 +96,14 @@ class PostgresStatsIOMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
86
96
|
]
|
87
97
|
con.exec(request.join(' ')) do |result|
|
88
98
|
result.each do |row|
|
89
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
90
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
91
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
92
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
93
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
94
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
95
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
96
|
-
output "#{config[:scheme]}.statsio.#{config[:
|
99
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.heap_blks_read", row['heap_blks_read'], timestamp
|
100
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.heap_blks_hit", row['heap_blks_hit'], timestamp
|
101
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.idx_blks_read", row['idx_blks_read'], timestamp
|
102
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.idx_blks_hit", row['idx_blks_hit'], timestamp
|
103
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.toast_blks_read", row['toast_blks_read'], timestamp
|
104
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.toast_blks_hit", row['toast_blks_hit'], timestamp
|
105
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.tidx_blks_read", row['tidx_blks_read'], timestamp
|
106
|
+
output "#{config[:scheme]}.statsio.#{config[:database]}.tidx_blks_hit", row['tidx_blks_hit'], timestamp
|
97
107
|
end
|
98
108
|
end
|
99
109
|
|
@@ -56,7 +56,7 @@ class PostgresStatsTableMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
56
56
|
long: '--port PORT',
|
57
57
|
default: 5432
|
58
58
|
|
59
|
-
option :
|
59
|
+
option :database,
|
60
60
|
description: 'Database name',
|
61
61
|
short: '-d DB',
|
62
62
|
long: '--db DB',
|
@@ -73,10 +73,20 @@ class PostgresStatsTableMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
73
73
|
long: '--scheme SCHEME',
|
74
74
|
default: "#{Socket.gethostname}.postgresql"
|
75
75
|
|
76
|
+
option :timeout,
|
77
|
+
description: 'Connection timeout (seconds)',
|
78
|
+
short: '-T TIMEOUT',
|
79
|
+
long: '--timeout TIMEOUT',
|
80
|
+
default: nil
|
81
|
+
|
76
82
|
def run
|
77
83
|
timestamp = Time.now.to_i
|
78
84
|
|
79
|
-
con = PG
|
85
|
+
con = PG.connect(host: config[:hostname],
|
86
|
+
dbname: config[:database],
|
87
|
+
user: config[:user],
|
88
|
+
password: config[:password],
|
89
|
+
connect_timeout: config[:timeout])
|
80
90
|
request = [
|
81
91
|
'select sum(seq_scan) as seq_scan, sum(seq_tup_read) as seq_tup_read,',
|
82
92
|
'sum(idx_scan) as idx_scan, sum(idx_tup_fetch) as idx_tup_fetch,',
|
@@ -86,16 +96,16 @@ class PostgresStatsTableMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
86
96
|
]
|
87
97
|
con.exec(request.join(' ')) do |result|
|
88
98
|
result.each do |row|
|
89
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
90
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
91
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
92
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
93
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
94
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
95
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
96
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
97
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
98
|
-
output "#{config[:scheme]}.statstable.#{config[:
|
99
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.seq_scan", row['seq_scan'], timestamp
|
100
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.seq_tup_read", row['seq_tup_read'], timestamp
|
101
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.idx_scan", row['idx_scan'], timestamp
|
102
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.idx_tup_fetch", row['idx_tup_fetch'], timestamp
|
103
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.n_tup_ins", row['n_tup_ins'], timestamp
|
104
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.n_tup_upd", row['n_tup_upd'], timestamp
|
105
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.n_tup_del", row['n_tup_del'], timestamp
|
106
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.n_tup_hot_upd", row['n_tup_hot_upd'], timestamp
|
107
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.n_live_tup", row['n_live_tup'], timestamp
|
108
|
+
output "#{config[:scheme]}.statstable.#{config[:database]}.n_dead_tup", row['n_dead_tup'], timestamp
|
99
109
|
end
|
100
110
|
end
|
101
111
|
|
@@ -53,7 +53,7 @@ class MetricsPostgresQuery < Sensu::Plugin::Metric::CLI::Graphite
|
|
53
53
|
long: '--port PORT',
|
54
54
|
default: 5432
|
55
55
|
|
56
|
-
option :
|
56
|
+
option :database,
|
57
57
|
description: 'Database name',
|
58
58
|
short: '-d DB',
|
59
59
|
long: '--db DB',
|
@@ -78,9 +78,19 @@ class MetricsPostgresQuery < Sensu::Plugin::Metric::CLI::Graphite
|
|
78
78
|
long: '--scheme SCHEME',
|
79
79
|
default: 'postgres'
|
80
80
|
|
81
|
+
option :timeout,
|
82
|
+
description: 'Connection timeout (seconds)',
|
83
|
+
short: '-T TIMEOUT',
|
84
|
+
long: '--timeout TIMEOUT',
|
85
|
+
default: nil
|
86
|
+
|
81
87
|
def run
|
82
88
|
begin
|
83
|
-
con = PG
|
89
|
+
con = PG.connect(host: config[:hostname],
|
90
|
+
dbname: config[:database],
|
91
|
+
user: config[:user],
|
92
|
+
password: config[:password],
|
93
|
+
connect_timeout: config[:timeout])
|
84
94
|
res = con.exec(config[:query].to_s)
|
85
95
|
rescue PG::Error => e
|
86
96
|
unknown "Unable to query PostgreSQL: #{e.message}"
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-postgres
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sensu-Plugins and contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sensu-plugin
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -56,134 +56,150 @@ dependencies:
|
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.7'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.7'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: codeclimate-test-reporter
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.4'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.4'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: github-markup
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '1.3'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.3'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: pry
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - ~>
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0.10'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - ~>
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.10'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rainbow
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.1.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.1.0
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rake
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- - ~>
|
129
|
+
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
131
|
version: '10.0'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- - ~>
|
136
|
+
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '10.0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: redcarpet
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- - ~>
|
143
|
+
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
145
|
version: '3.2'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- - ~>
|
150
|
+
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '3.2'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rspec
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- - ~>
|
157
|
+
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
159
|
version: '3.1'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- - ~>
|
164
|
+
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '3.1'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: rubocop
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
|
-
- -
|
171
|
+
- - "~>"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
173
|
+
version: 0.40.0
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
|
-
- -
|
178
|
+
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
180
|
+
version: 0.40.0
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: yard
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
|
-
- - ~>
|
185
|
+
- - "~>"
|
172
186
|
- !ruby/object:Gem::Version
|
173
187
|
version: '0.8'
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
|
-
- - ~>
|
192
|
+
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
194
|
version: '0.8'
|
181
|
-
description:
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
195
|
+
description: |-
|
196
|
+
This plugin provides native PostgreSQL
|
197
|
+
instrumentation for monitoring and metrics
|
198
|
+
collection, including: service health, database
|
199
|
+
connectivity, database locks, replication status,
|
200
|
+
database size, `pg_stat_bgwriter` metrics, and
|
201
|
+
more.
|
202
|
+
email: "<sensu-users@googlegroups.com>"
|
187
203
|
executables:
|
188
204
|
- check-postgres-alive.rb
|
189
205
|
- check-postgres-connections.rb
|
@@ -223,7 +239,7 @@ homepage: https://github.com/sensu-plugins/sensu-plugins-postgres
|
|
223
239
|
licenses:
|
224
240
|
- MIT
|
225
241
|
metadata:
|
226
|
-
maintainer:
|
242
|
+
maintainer: "@tas50"
|
227
243
|
development_status: active
|
228
244
|
production_status: unstable - testing recommended
|
229
245
|
release_draft: 'false'
|
@@ -235,12 +251,12 @@ require_paths:
|
|
235
251
|
- lib
|
236
252
|
required_ruby_version: !ruby/object:Gem::Requirement
|
237
253
|
requirements:
|
238
|
-
- -
|
254
|
+
- - ">="
|
239
255
|
- !ruby/object:Gem::Version
|
240
|
-
version: 1.
|
256
|
+
version: 2.1.0
|
241
257
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
258
|
requirements:
|
243
|
-
- -
|
259
|
+
- - ">="
|
244
260
|
- !ruby/object:Gem::Version
|
245
261
|
version: '0'
|
246
262
|
requirements: []
|