riemann-tools 0.2.14 → 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.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/.docker/Dockerfile +7 -0
  3. data/.docker/publish.sh +35 -0
  4. data/.github/workflows/ci.yml +29 -0
  5. data/.gitignore +6 -0
  6. data/.rspec +2 -0
  7. data/.travis.yml +31 -0
  8. data/CHANGELOG.md +393 -0
  9. data/Gemfile +6 -0
  10. data/ISSUE_TEMPLATE.md +15 -0
  11. data/README.markdown +14 -1
  12. data/Rakefile +21 -0
  13. data/bin/riemann-apache-status +1 -0
  14. data/bin/riemann-bench +1 -0
  15. data/bin/riemann-cloudant +1 -0
  16. data/bin/riemann-consul +1 -0
  17. data/bin/riemann-dir-files-count +1 -0
  18. data/bin/riemann-dir-space +1 -0
  19. data/bin/riemann-diskstats +1 -0
  20. data/bin/riemann-fd +1 -0
  21. data/bin/riemann-freeswitch +1 -0
  22. data/bin/riemann-haproxy +1 -0
  23. data/bin/riemann-health +19 -11
  24. data/bin/riemann-kvminstance +1 -0
  25. data/bin/riemann-memcached +1 -0
  26. data/bin/riemann-net +1 -0
  27. data/bin/riemann-nginx-status +1 -0
  28. data/bin/riemann-ntp +1 -0
  29. data/bin/riemann-portcheck +1 -0
  30. data/bin/riemann-proc +1 -0
  31. data/bin/riemann-varnish +1 -0
  32. data/bin/riemann-zookeeper +1 -0
  33. data/lib/riemann/tools/utils.rb +17 -0
  34. data/lib/riemann/tools/version.rb +7 -0
  35. data/lib/riemann/tools.rb +12 -2
  36. data/riemann-tools.gemspec +39 -0
  37. data/tools/riemann-aws/LICENSE +21 -0
  38. data/tools/riemann-aws/README.md +54 -0
  39. data/tools/riemann-aws/Rakefile.rb +35 -0
  40. data/tools/riemann-aws/bin/riemann-aws-billing +87 -0
  41. data/tools/riemann-aws/bin/riemann-aws-rds-status +54 -0
  42. data/tools/riemann-aws/bin/riemann-aws-sqs-status +44 -0
  43. data/tools/riemann-aws/bin/riemann-aws-status +71 -0
  44. data/tools/riemann-aws/bin/riemann-elb-metrics +167 -0
  45. data/tools/riemann-aws/bin/riemann-s3-list +82 -0
  46. data/tools/riemann-aws/bin/riemann-s3-status +99 -0
  47. data/tools/riemann-chronos/LICENSE +21 -0
  48. data/tools/riemann-chronos/README.md +10 -0
  49. data/tools/riemann-chronos/Rakefile.rb +35 -0
  50. data/tools/riemann-chronos/bin/riemann-chronos +144 -0
  51. data/tools/riemann-docker/LICENSE +21 -0
  52. data/tools/riemann-docker/README.md +10 -0
  53. data/tools/riemann-docker/Rakefile.rb +34 -0
  54. data/tools/riemann-docker/bin/riemann-docker +217 -0
  55. data/tools/riemann-elasticsearch/LICENSE +21 -0
  56. data/tools/riemann-elasticsearch/README.md +10 -0
  57. data/tools/riemann-elasticsearch/Rakefile.rb +35 -0
  58. data/tools/riemann-elasticsearch/bin/riemann-elasticsearch +166 -0
  59. data/tools/riemann-marathon/LICENSE +21 -0
  60. data/tools/riemann-marathon/README.md +10 -0
  61. data/tools/riemann-marathon/Rakefile.rb +35 -0
  62. data/tools/riemann-marathon/bin/riemann-marathon +147 -0
  63. data/tools/riemann-mesos/LICENSE +21 -0
  64. data/tools/riemann-mesos/README.md +10 -0
  65. data/tools/riemann-mesos/Rakefile.rb +35 -0
  66. data/tools/riemann-mesos/bin/riemann-mesos +131 -0
  67. data/tools/riemann-munin/LICENSE +21 -0
  68. data/tools/riemann-munin/README.md +10 -0
  69. data/tools/riemann-munin/Rakefile.rb +34 -0
  70. data/tools/riemann-munin/bin/riemann-munin +37 -0
  71. data/tools/riemann-rabbitmq/LICENSE +21 -0
  72. data/tools/riemann-rabbitmq/README.md +10 -0
  73. data/tools/riemann-rabbitmq/Rakefile.rb +35 -0
  74. data/tools/riemann-rabbitmq/bin/riemann-rabbitmq +269 -0
  75. data/tools/riemann-riak/LICENSE +21 -0
  76. data/tools/riemann-riak/README.md +10 -0
  77. data/tools/riemann-riak/Rakefile.rb +34 -0
  78. data/tools/riemann-riak/bin/riemann-riak +331 -0
  79. data/tools/riemann-riak/bin/riemann-riak-keys +13 -0
  80. data/tools/riemann-riak/bin/riemann-riak-ring +9 -0
  81. data/tools/riemann-riak/riak_status/key_count.erl +13 -0
  82. data/tools/riemann-riak/riak_status/riak_status.rb +152 -0
  83. data/tools/riemann-riak/riak_status/ringready.erl +9 -0
  84. metadata +134 -34
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env ruby
2
+ Process.setproctitle($0)
3
+
4
+ $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../vodpod-common/lib")
5
+ require 'rubygems'
6
+ require 'vodpod-common'
7
+ require 'vodpod/alerts'
8
+ require 'vodpod/starling'
9
+ require 'net/http'
10
+ require 'yajl/json_gem'
11
+
12
+ class RiakStatus
13
+ PORT = 8098
14
+ PATH = '/stats'
15
+ INTERVAL = 10
16
+
17
+ FSM_LIMITS = {
18
+ :get => {
19
+ 50 => 1000,
20
+ 95 => 2000,
21
+ 99 => 10000
22
+ },
23
+ :put => {
24
+ 50 => 1000,
25
+ 95 => 2000,
26
+ 99 => 10000
27
+ }
28
+ }
29
+
30
+ def initialize(opts = {})
31
+ @host = opts[:host] || `hostname`.chomp
32
+ @port = opts[:port] || PORT
33
+ @path = opts[:path] || PATH
34
+ end
35
+
36
+ def alert(subservice, state, metric, description)
37
+ Vodpod.alert(
38
+ :service => "riak #{subservice}",
39
+ :state => state,
40
+ :metric => metric,
41
+ :description => description
42
+ )
43
+ end
44
+
45
+ def check_ring
46
+ str = `#{File.expand_path(File.dirname(__FILE__))}/ringready.erl riak@#{`hostname`}`.chomp
47
+ if str =~ /^TRUE/
48
+ alert 'ring', :ok, nil, str
49
+ else
50
+ alert 'ring', :warning, nil, str
51
+ end
52
+ end
53
+
54
+ def check_keys
55
+ keys = `#{File.expand_path(File.dirname(__FILE__))}/key_count.erl riak@#{`hostname`}`.chomp
56
+ if keys =~ /^\d+$/
57
+ alert 'keys', :ok, keys.to_i, keys
58
+ else
59
+ alert 'keys', :error, nil, keys
60
+ end
61
+ end
62
+
63
+ def check_disk
64
+ gb = `du -s /var/lib/riak/bitcask/`.split(/\s+/).first.to_i / (1024.0**2)
65
+ alert 'disk', :ok, gb, "#{gb} GB in bitcask"
66
+ end
67
+
68
+ # Returns the riak stat for the given fsm type and percentile.
69
+ def fsm_stat(type, percentile)
70
+ "node_#{type}_fsm_time_#{percentile == 50 ? 'median' : percentile}"
71
+ end
72
+
73
+ # Returns the alerts state for the given fsm.
74
+ def fsm_state(type, percentile, val)
75
+ limit = FSM_LIMITS[type][percentile]
76
+ case val
77
+ when 0 .. limit
78
+ :ok
79
+ when limit .. limit * 2
80
+ :warning
81
+ else
82
+ :critical
83
+ end
84
+ end
85
+
86
+ def check_stats
87
+ begin
88
+ res = Net::HTTP.start(@host, @port) do |http|
89
+ http.get('/stats')
90
+ end
91
+ rescue => e
92
+ Vodpod.alert(
93
+ :service => 'riak',
94
+ :state => :critical,
95
+ :description => "error fetching /stats: #{e.class}, #{e.message}"
96
+ )
97
+ return
98
+ end
99
+
100
+ if res.code.to_i == 200
101
+ stats = JSON.parse(res.body)
102
+ else
103
+ Vodpod.alert(
104
+ :service => 'riak',
105
+ :state => :critical,
106
+ :description => "stats returned HTTP #{res.code}:\n\n#{res.body}"
107
+ )
108
+ return
109
+ end
110
+
111
+ Vodpod.alert(
112
+ :service => 'riak',
113
+ :state => :ok
114
+ )
115
+
116
+ # Gets/puts/rr
117
+ [
118
+ 'vnode_gets',
119
+ 'vnode_puts',
120
+ 'node_gets',
121
+ 'node_puts',
122
+ 'read_repairs'
123
+ ].each do |s|
124
+ alert s, :ok, stats[s]/60.0, "#{stats[s]/60.0}/sec"
125
+ end
126
+
127
+ # FSMs
128
+ [:get, :put].each do |type|
129
+ [50, 95, 99].each do |percentile|
130
+ val = stats[fsm_stat(type, percentile)] || 0
131
+ val = 0 if val == 'undefined'
132
+ val /= 1000.0 # Convert us to ms
133
+ state = fsm_state(type, percentile, val)
134
+ alert "#{type} #{percentile}", state, val, "#{val} ms"
135
+ end
136
+ end
137
+ end
138
+
139
+ def run
140
+ loop do
141
+ # check_keys
142
+ check_stats
143
+ check_ring
144
+ check_disk
145
+ sleep INTERVAL
146
+ end
147
+ end
148
+ end
149
+
150
+ if $0 == __FILE__
151
+ RiakStatus.new.run
152
+ end
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env escript
2
+ Process.setproctitle($0)
3
+ %%! -name riakstatuscheck -setcookie riak -hidden
4
+
5
+ main([]) -> main(["riak@127.0.0.1"]);
6
+ main([Node]) ->
7
+ io:format("~p\n", [
8
+ rpc:call(list_to_atom(Node), riak_kv_console, ringready, [[]])
9
+ ]).
metadata CHANGED
@@ -1,35 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riemann-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.14
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Kingsbury
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-14 00:00:00.000000000 Z
11
+ date: 2022-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: riemann-client
14
+ name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.2'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 0.2.6
19
+ version: '1.8'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '0.2'
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
- version: 0.2.6
26
+ version: '1.8'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: optimist
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -51,47 +45,100 @@ dependencies:
51
45
  - !ruby/object:Gem::Version
52
46
  version: 3.0.0
53
47
  - !ruby/object:Gem::Dependency
54
- name: json
48
+ name: riemann-client
55
49
  requirement: !ruby/object:Gem::Requirement
56
50
  requirements:
57
51
  - - "~>"
58
52
  - !ruby/object:Gem::Version
59
- version: '1.8'
53
+ version: '1.0'
60
54
  type: :runtime
61
55
  prerelease: false
62
56
  version_requirements: !ruby/object:Gem::Requirement
63
57
  requirements:
64
58
  - - "~>"
65
59
  - !ruby/object:Gem::Version
66
- version: '1.8'
67
- description: Collection of utilities which submit events to Riemann.
68
- email: aphyr@aphyr.com
60
+ version: '1.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: github_changelog_generator
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ description: Collection of utilities which submit events to Riemann,
104
+ email:
105
+ - aphyr@aphyr.com
69
106
  executables:
70
107
  - riemann-apache-status
71
- - riemann-varnish
108
+ - riemann-bench
109
+ - riemann-cloudant
72
110
  - riemann-consul
73
- - riemann-net
111
+ - riemann-dir-files-count
112
+ - riemann-dir-space
74
113
  - riemann-diskstats
75
- - riemann-portcheck
76
- - riemann-memcached
77
- - riemann-zookeeper
114
+ - riemann-fd
115
+ - riemann-freeswitch
116
+ - riemann-haproxy
78
117
  - riemann-health
79
- - riemann-dir-space
80
- - riemann-cloudant
118
+ - riemann-kvminstance
119
+ - riemann-memcached
120
+ - riemann-net
81
121
  - riemann-nginx-status
82
- - riemann-proc
83
- - riemann-haproxy
84
- - riemann-freeswitch
85
122
  - riemann-ntp
86
- - riemann-fd
87
- - riemann-dir-files-count
88
- - riemann-bench
89
- - riemann-kvminstance
123
+ - riemann-portcheck
124
+ - riemann-proc
125
+ - riemann-varnish
126
+ - riemann-zookeeper
90
127
  extensions: []
91
128
  extra_rdoc_files: []
92
129
  files:
130
+ - ".docker/Dockerfile"
131
+ - ".docker/publish.sh"
132
+ - ".github/workflows/ci.yml"
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".travis.yml"
136
+ - CHANGELOG.md
137
+ - Gemfile
138
+ - ISSUE_TEMPLATE.md
93
139
  - LICENSE
94
140
  - README.markdown
141
+ - Rakefile
95
142
  - bin/riemann-apache-status
96
143
  - bin/riemann-bench
97
144
  - bin/riemann-cloudant
@@ -113,10 +160,64 @@ files:
113
160
  - bin/riemann-varnish
114
161
  - bin/riemann-zookeeper
115
162
  - lib/riemann/tools.rb
163
+ - lib/riemann/tools/utils.rb
164
+ - lib/riemann/tools/version.rb
165
+ - riemann-tools.gemspec
166
+ - tools/riemann-aws/LICENSE
167
+ - tools/riemann-aws/README.md
168
+ - tools/riemann-aws/Rakefile.rb
169
+ - tools/riemann-aws/bin/riemann-aws-billing
170
+ - tools/riemann-aws/bin/riemann-aws-rds-status
171
+ - tools/riemann-aws/bin/riemann-aws-sqs-status
172
+ - tools/riemann-aws/bin/riemann-aws-status
173
+ - tools/riemann-aws/bin/riemann-elb-metrics
174
+ - tools/riemann-aws/bin/riemann-s3-list
175
+ - tools/riemann-aws/bin/riemann-s3-status
176
+ - tools/riemann-chronos/LICENSE
177
+ - tools/riemann-chronos/README.md
178
+ - tools/riemann-chronos/Rakefile.rb
179
+ - tools/riemann-chronos/bin/riemann-chronos
180
+ - tools/riemann-docker/LICENSE
181
+ - tools/riemann-docker/README.md
182
+ - tools/riemann-docker/Rakefile.rb
183
+ - tools/riemann-docker/bin/riemann-docker
184
+ - tools/riemann-elasticsearch/LICENSE
185
+ - tools/riemann-elasticsearch/README.md
186
+ - tools/riemann-elasticsearch/Rakefile.rb
187
+ - tools/riemann-elasticsearch/bin/riemann-elasticsearch
188
+ - tools/riemann-marathon/LICENSE
189
+ - tools/riemann-marathon/README.md
190
+ - tools/riemann-marathon/Rakefile.rb
191
+ - tools/riemann-marathon/bin/riemann-marathon
192
+ - tools/riemann-mesos/LICENSE
193
+ - tools/riemann-mesos/README.md
194
+ - tools/riemann-mesos/Rakefile.rb
195
+ - tools/riemann-mesos/bin/riemann-mesos
196
+ - tools/riemann-munin/LICENSE
197
+ - tools/riemann-munin/README.md
198
+ - tools/riemann-munin/Rakefile.rb
199
+ - tools/riemann-munin/bin/riemann-munin
200
+ - tools/riemann-rabbitmq/LICENSE
201
+ - tools/riemann-rabbitmq/README.md
202
+ - tools/riemann-rabbitmq/Rakefile.rb
203
+ - tools/riemann-rabbitmq/bin/riemann-rabbitmq
204
+ - tools/riemann-riak/LICENSE
205
+ - tools/riemann-riak/README.md
206
+ - tools/riemann-riak/Rakefile.rb
207
+ - tools/riemann-riak/bin/riemann-riak
208
+ - tools/riemann-riak/bin/riemann-riak-keys
209
+ - tools/riemann-riak/bin/riemann-riak-ring
210
+ - tools/riemann-riak/riak_status/key_count.erl
211
+ - tools/riemann-riak/riak_status/riak_status.rb
212
+ - tools/riemann-riak/riak_status/ringready.erl
116
213
  homepage: https://github.com/aphyr/riemann-tools
117
214
  licenses:
118
215
  - MIT
119
- metadata: {}
216
+ metadata:
217
+ allowed_push_host: https://rubygems.org/
218
+ homepage_uri: https://github.com/aphyr/riemann-tools
219
+ source_code_uri: https://github.com/aphyr/riemann-tools
220
+ changelog_uri: https://github.com/aphyr/riemann-tools
120
221
  post_install_message:
121
222
  rdoc_options: []
122
223
  require_paths:
@@ -125,15 +226,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
226
  requirements:
126
227
  - - ">="
127
228
  - !ruby/object:Gem::Version
128
- version: 1.8.7
229
+ version: 2.5.0
129
230
  required_rubygems_version: !ruby/object:Gem::Requirement
130
231
  requirements:
131
232
  - - ">="
132
233
  - !ruby/object:Gem::Version
133
234
  version: '0'
134
235
  requirements: []
135
- rubyforge_project: riemann-tools
136
- rubygems_version: 2.6.14
236
+ rubygems_version: 3.2.5
137
237
  signing_key:
138
238
  specification_version: 4
139
239
  summary: Utilities which submit events to Riemann.