sensu-plugins-mysql 2.2.1 → 2.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: baddc0a5723b41abb3ac70c992d6e187ec596ae8873f55b45603128763a7087f
4
- data.tar.gz: 7a0c548a8a354e74200f5305289a3560fa646c1c30c469ea27fe7d92850c0538
2
+ SHA1:
3
+ metadata.gz: b5e5653712ab73a7fb12a37a97c8472ffab497df
4
+ data.tar.gz: 556cff86d0e9ceb1a7a2954527f858a2e5b7be1b
5
5
  SHA512:
6
- metadata.gz: 73798587a0a64f42d7e80f1254cad4762484bcd59790d979eb5841f323391ba342803f0e575df33af23095d986ceec775631c9bee30a8474ddef88c4e9724b9c
7
- data.tar.gz: c5afa4efa3be6434402ead37d0820d3d941561dd79f89fa87c5d1ada804d6548160f7ceb6f7a30e8c010d40428c82c229d84cd9560bddee275088b2a6c30a6c3
6
+ metadata.gz: 0166be616c39d39a56314c683e3f91fe09aad4cdad696a34a5115fb14fcc2f77ff389e149f5733d523e36c290719189f1ab3279f57f919bc6b900e20209e2c39
7
+ data.tar.gz: 900c46efc192ba7c71b9ac3d975dd924e6ffc9beec6e75f366178e0498a6e6041219de8db613a8cdfe09d2e8381fb8c237c3ae717badde9a8d5ef5414d2205b7
@@ -5,6 +5,13 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.3.0] - 2018-03-17
9
+ ### Added
10
+ - check-mysql-msr-replication-status.rb: new script that helps with monitoring mysql multi-source replication (@ndelic0)
11
+
12
+ ### Changed
13
+ - appeased cops (@majormoses)
14
+
8
15
  ## [2.1.1] - 2018-02-07
9
16
  ### Fixed
10
17
  - check-mysql-status.rb: if --socket flag is specified, it overrides config (@tinle)
@@ -114,7 +121,8 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
114
121
  ### Added
115
122
  - initial release
116
123
 
117
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-mysql/compare/2.2.1...HEAD
124
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-mysql/compare/2.3.0...HEAD
125
+ [2.3.0]: https://github.com/sensu-plugins/sensu-plugins-mysql/compare/2.2.1...2.3.0
118
126
  [2.2.1]: https://github.com/sensu-plugins/sensu-plugins-mysql/compare/2.2.0..2.2.1
119
127
  [2.2.0]: https://github.com/sensu-plugins/sensu-plugins-mysql/compare/2.1.1...2.2.0
120
128
  [2.1.2]: https://github.com/sensu-plugins/sensu-plugins-mysql/compare/2.1.1...2.1.2
data/README.md CHANGED
@@ -17,6 +17,7 @@
17
17
  * bin/check-mysql-innodb-lock.rb
18
18
  * bin/check-mysql-threads.rb
19
19
  * bin/check-mysql-query-result-count.rb
20
+ * bin/check-mysql-msr-replication-status.rb
20
21
  * bin/metrics-mysql-graphite.rb
21
22
  * bin/metrics-mysql-processes.rb
22
23
  * bin/metrics-mysql-raw.rb
@@ -76,6 +77,11 @@ $ /opt/sensu/embedded/bin/check-mysql-threads.rb --host=<DBHOST> --ini=/etc/sens
76
77
  $ /opt/sensu/embedded/bin/check-mysql-replication-status.rb --host=<SLAVE> --ini=/etc/sensu/my.ini
77
78
  ```
78
79
 
80
+ **check-mysql-msr-replication-status** example
81
+ ```bash
82
+ $ /opt/sensu/embedded/bin/check-mysql-replication-status.rb --host=<SLAVE> --ini=/etc/sensu/my.ini
83
+ ```
84
+
79
85
  **check-mysql-query-result-count** example
80
86
  ```bash
81
87
  /opt/sensu/embedded/bin$ /opt/sensu/embedded/bin/ruby check-mysql-query-result-count.rb --host=localhost --port=3306 --user=collectd --pass=tflypass --socket=/data/mysql.sock --warning 1 --critical 10 --query 'SELECT DISTINCT(t.id) FROM table t where t.failed = true'
@@ -98,6 +104,7 @@ In keeping with the principle of least privilege you should create a new user wi
98
104
  | check-mysql-innodb-lock.rb | `PROCESS` |
99
105
  | check-mysql-query-result-count.rb | depends on query |
100
106
  | check-mysql-replication-status.rb | `SUPER` OR `REPLICATION_CLIENT` (the latter is preferable)|
107
+ | check-mysql-msr-replication-status.rb | `SELECT` |
101
108
  | check-mysql-status.rb | `SELECT` |
102
109
  | check-mysql-threads.rb | `SELECT` |
103
110
  | metrics-mysql-graphite.rb | `SELECT` |
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # MySQL Multi-source Replication Status
4
+ # ===
5
+ #
6
+ #
7
+ # EXAMPLE
8
+ # check-mysql-msr-replication-status.rb -h db01 --ini '/etc/sensu/my.cnf'
9
+ # check-mysql-msr-replication-status.rb -h db01 --ini '/etc/sensu/my.cnf' --ini-section customsection
10
+ #
11
+ # MY.CNF INI FORMAT
12
+ # [client]
13
+ # user=sensu
14
+ # password="abcd1234"
15
+ #
16
+ # [customsection]
17
+ # user=user
18
+ # password="password"
19
+ #
20
+
21
+ require 'sensu-plugin/check/cli'
22
+ require 'mysql'
23
+ require 'inifile'
24
+
25
+ class CheckMysqlMSRReplicationStatus < Sensu::Plugin::Check::CLI
26
+ option :host,
27
+ short: '-h',
28
+ long: '--host VALUE',
29
+ description: 'Database host'
30
+
31
+ option :port,
32
+ short: '-P',
33
+ long: '--port VALUE',
34
+ description: 'Database port',
35
+ default: 3306,
36
+ proc: proc(&:to_i)
37
+
38
+ option :socket,
39
+ short: '-s SOCKET',
40
+ long: '--socket SOCKET',
41
+ description: 'Socket to use'
42
+
43
+ option :user,
44
+ short: '-u',
45
+ long: '--username VALUE',
46
+ description: 'Database username'
47
+
48
+ option :pass,
49
+ short: '-p',
50
+ long: '--password VALUE',
51
+ description: 'Database password'
52
+
53
+ option :ini,
54
+ short: '-i',
55
+ long: '--ini VALUE',
56
+ description: 'My.cnf ini file'
57
+
58
+ option :ini_section,
59
+ description: 'Section in my.cnf ini file',
60
+ long: '--ini-section VALUE',
61
+ default: 'client'
62
+
63
+ option :warn,
64
+ short: '-w',
65
+ long: '--warning VALUE',
66
+ description: 'Warning threshold for replication lag',
67
+ default: 900,
68
+ proc: proc(&:to_i)
69
+
70
+ option :crit,
71
+ short: '-c',
72
+ long: '--critical=VALUE',
73
+ description: 'Critical threshold for replication lag',
74
+ default: 1800,
75
+ proc: proc(&:to_i)
76
+
77
+ def run
78
+ if config[:ini]
79
+ ini = IniFile.load(config[:ini])
80
+ section = ini[config[:ini_section]]
81
+ db_user = section['user']
82
+ db_pass = section['password']
83
+ else
84
+ db_user = config[:user]
85
+ db_pass = config[:pass]
86
+ end
87
+ db_host = config[:host]
88
+
89
+ if [db_host, db_user, db_pass].any?(&:nil?)
90
+ unknown 'Must specify host, user, password'
91
+ end
92
+
93
+ begin
94
+ ok_statuses = []
95
+ warn_statuses = []
96
+ crit_statuses = []
97
+ output = []
98
+
99
+ db = Mysql.new(db_host, db_user, db_pass, nil, config[:port], config[:socket])
100
+ channels = db.query('SELECT channel_name FROM performance_schema.replication_connection_status')
101
+
102
+ channels.num_rows.times do
103
+ channel = channels.fetch_hash
104
+ results = db.query("SHOW SLAVE STATUS FOR CHANNEL \'#{channel['channel_name']}\'")
105
+ results.each_hash do |row|
106
+ io_thread_status = row['Slave_IO_Running']
107
+ sql_thread_status = row['Slave_SQL_Running']
108
+ seconds_behind_master = row['Seconds_Behind_Master'].to_i
109
+ status = 0
110
+ if io_thread_status == 'No' || sql_thread_status == 'No' || seconds_behind_master > config[:crit]
111
+ status = 2
112
+ end
113
+ if seconds_behind_master > config[:warn] && seconds_behind_master <= config[:crit]
114
+ status = 1
115
+ end
116
+ message = "#{channel['channel_name']} STATES:"
117
+ message += " Slave_IO_Running=#{io_thread_status}"
118
+ message += ", Slave_SQL_Running=#{sql_thread_status}"
119
+ message += ", Seconds_Behind_Master=#{seconds_behind_master}"
120
+
121
+ if status.zero?
122
+ ok_statuses << message
123
+ elsif status == 1
124
+ warn_statuses << message
125
+ elsif status == 2
126
+ crit_statuses << message
127
+ else
128
+ puts 'Undefined status.'
129
+ end
130
+ end
131
+ end
132
+ output << crit_statuses unless crit_statuses.empty?
133
+ output << warn_statuses unless warn_statuses.empty?
134
+ output << ok_statuses unless ok_statuses.empty?
135
+
136
+ if !crit_statuses.empty?
137
+ critical output
138
+ elsif !warn_statuses.empty?
139
+ warning output
140
+ else
141
+ ok output
142
+ end
143
+ rescue Mysql::Error => e
144
+ errstr = "Error code: #{e.errno} Error message: #{e.error}"
145
+ errstr += "SQLSTATE: #{e.sqlstate}" if e.respond_to?('sqlstate')
146
+ critical errstr
147
+ rescue StandardError => e
148
+ critical "unhandled exception: #{e}"
149
+ ensure
150
+ db.close if db
151
+ end
152
+ end
153
+ end
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsMySql
2
2
  module Version
3
3
  MAJOR = 2
4
- MINOR = 2
5
- PATCH = 1
4
+ MINOR = 3
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.3.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: 2018-02-07 00:00:00.000000000 Z
11
+ date: 2018-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inifile
@@ -186,19 +186,20 @@ description: |-
186
186
  sending metrics to a MySQL database.
187
187
  email: "<sensu-users@googlegroups.com>"
188
188
  executables:
189
- - check-mysql-alive.rb
190
- - check-mysql-connections.rb
189
+ - metrics-mysql-query-result-count.rb
191
190
  - check-mysql-disk.rb
191
+ - metrics-mysql.rb
192
192
  - check-mysql-innodb-lock.rb
193
+ - check-mysql-alive.rb
193
194
  - check-mysql-query-result-count.rb
195
+ - metrics-mysql-graphite.rb
194
196
  - check-mysql-replication-status.rb
195
- - check-mysql-status.rb
196
197
  - check-mysql-threads.rb
197
- - metrics-mysql-graphite.rb
198
+ - check-mysql-msr-replication-status.rb
198
199
  - metrics-mysql-processes.rb
199
- - metrics-mysql-query-result-count.rb
200
200
  - metrics-mysql-raw.rb
201
- - metrics-mysql.rb
201
+ - check-mysql-connections.rb
202
+ - check-mysql-status.rb
202
203
  extensions: []
203
204
  extra_rdoc_files: []
204
205
  files:
@@ -209,6 +210,7 @@ files:
209
210
  - bin/check-mysql-connections.rb
210
211
  - bin/check-mysql-disk.rb
211
212
  - bin/check-mysql-innodb-lock.rb
213
+ - bin/check-mysql-msr-replication-status.rb
212
214
  - bin/check-mysql-query-result-count.rb
213
215
  - bin/check-mysql-replication-status.rb
214
216
  - bin/check-mysql-status.rb
@@ -247,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
249
  version: '0'
248
250
  requirements: []
249
251
  rubyforge_project:
250
- rubygems_version: 2.7.5
252
+ rubygems_version: 2.5.2.1
251
253
  signing_key:
252
254
  specification_version: 4
253
255
  summary: Sensu plugins for MySql