riemann-tools 0.2.14 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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.