statsd 0.5.0 → 0.5.2
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.
- data/README.md +9 -3
- data/lib/statsd/mongo.rb +5 -3
- data/lib/statsd/server.rb +1 -1
- data/lib/statsd.rb +3 -2
- data/statsd.gemspec +3 -3
- metadata +6 -6
data/README.md
CHANGED
@@ -10,7 +10,7 @@ A network daemon for aggregating statistics (counters and timers), rolling them
|
|
10
10
|
|
11
11
|
### Configuration
|
12
12
|
|
13
|
-
Create config.yml to your liking. There are 2 flush protocols: graphite and mongo. The former
|
13
|
+
Create config.yml to your liking. There are 2 flush protocols: graphite and mongo. The former simply sends to carbon every flush interval. The latter flushes to MongoDB capped collections for 10s and 1min intervals.
|
14
14
|
|
15
15
|
Example config.yml
|
16
16
|
---
|
@@ -30,7 +30,7 @@ Example config.yml
|
|
30
30
|
|
31
31
|
# If you change these, you need to delete the capped collections yourself!
|
32
32
|
# Average mongo record size is 152 bytes
|
33
|
-
# 10s
|
33
|
+
# 10s and 1min data is transient so we'll use MongoDB's capped collections. These collections are fixed in size.
|
34
34
|
# 5min and 1d data is interesting to preserve long-term. These collections are not capped.
|
35
35
|
retentions:
|
36
36
|
- name: stats_per_10s
|
@@ -141,12 +141,18 @@ That translates to:
|
|
141
141
|
This has been a good tradeoff so far between size-of-file (round robin databases are fixed size) and data we care about. Each "stats" database is about 3.2 megs with these retentions.
|
142
142
|
|
143
143
|
|
144
|
+
MongoDB
|
145
|
+
-------------
|
146
|
+
|
147
|
+
Statd::Mongo will flush and aggregate data to a MongoDB. The average record size is 152 bytes. We use capped collections for the transient data and regular collections for long-term storage.
|
148
|
+
|
144
149
|
Inspiration
|
145
150
|
-----------
|
151
|
+
[Etsy's][etsy] [blog post][blog post].
|
146
152
|
|
147
153
|
StatsD was inspired (heavily) by the project (of the same name) at Flickr. Here's a post where Cal Henderson described it in depth:
|
148
154
|
[Counting and timing](http://code.flickr.com/blog/2008/10/27/counting-timing/). Cal re-released the code recently: [Perl StatsD](https://github.com/iamcal/Flickr-StatsD)
|
149
|
-
|
155
|
+
|
150
156
|
|
151
157
|
[graphite]: http://graphite.wikidot.com
|
152
158
|
[etsy]: http://www.etsy.com
|
data/lib/statsd/mongo.rb
CHANGED
@@ -92,9 +92,11 @@ module Statsd
|
|
92
92
|
retentions[1..-1].each_with_index do |retention,index|
|
93
93
|
# fine_stats_collection = db.collection(retentions[index]['name'])
|
94
94
|
coarse_stats_collection = db.collection(retention['name'])
|
95
|
+
puts "Aggregating #{retention['name']}"
|
95
96
|
step = retention['seconds']
|
96
97
|
current_coarse_bucket = current_bucket / step * step - step
|
97
98
|
previous_coarse_bucket = current_coarse_bucket - step
|
99
|
+
puts "#{Time.at(previous_coarse_bucket)}..#{Time.at(current_coarse_bucket)}"
|
98
100
|
# Look up previous bucket
|
99
101
|
if coarse_stats_collection.find({:ts => previous_coarse_bucket}).count == 0
|
100
102
|
# Aggregate
|
@@ -102,7 +104,7 @@ module Statsd
|
|
102
104
|
stats_to_aggregate = fine_stats_collection.find(
|
103
105
|
{:ts => {"$gte" => previous_coarse_bucket, "$lt" => current_coarse_bucket}})
|
104
106
|
rows = stats_to_aggregate.to_a
|
105
|
-
count =
|
107
|
+
count = rows.count
|
106
108
|
rows.group_by {|r| r["stat"] }.each_pair do |name,stats|
|
107
109
|
case stats.first['type']
|
108
110
|
when 'timer'
|
@@ -132,9 +134,9 @@ module Statsd
|
|
132
134
|
else
|
133
135
|
raise "unknown type #{stats.first['type']}"
|
134
136
|
end
|
135
|
-
docs.push(doc)
|
137
|
+
docs.push(doc)
|
136
138
|
end
|
137
|
-
coarse_stats_collection.insert(docs)
|
139
|
+
coarse_stats_collection.insert(docs) unless docs.empty?
|
138
140
|
end
|
139
141
|
end
|
140
142
|
|
data/lib/statsd/server.rb
CHANGED
data/lib/statsd.rb
CHANGED
data/statsd.gemspec
CHANGED
@@ -14,9 +14,9 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.required_rubygems_version = ">= 1.3.6"
|
16
16
|
|
17
|
-
s.add_dependency "eventmachine", "
|
18
|
-
s.add_dependency "mongo", "
|
19
|
-
s.add_dependency "erubis", "
|
17
|
+
s.add_dependency "eventmachine", ">= 0.12.10"
|
18
|
+
s.add_dependency "mongo", ">= 1.2.4"
|
19
|
+
s.add_dependency "erubis", ">= 2.6.6"
|
20
20
|
|
21
21
|
s.files = `git ls-files`.split("\n")
|
22
22
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: statsd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrew Coldham
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-
|
14
|
+
date: 2011-05-15 00:00:00 -07:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirement: &id001 !ruby/object:Gem::Requirement
|
21
21
|
none: false
|
22
22
|
requirements:
|
23
|
-
- -
|
23
|
+
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
25
|
version: 0.12.10
|
26
26
|
type: :runtime
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
requirement: &id002 !ruby/object:Gem::Requirement
|
32
32
|
none: false
|
33
33
|
requirements:
|
34
|
-
- -
|
34
|
+
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 1.2.4
|
37
37
|
type: :runtime
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirement: &id003 !ruby/object:Gem::Requirement
|
43
43
|
none: false
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 2.6.6
|
48
48
|
type: :runtime
|
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements: []
|
94
94
|
|
95
95
|
rubyforge_project:
|
96
|
-
rubygems_version: 1.
|
96
|
+
rubygems_version: 1.6.2
|
97
97
|
signing_key:
|
98
98
|
specification_version: 3
|
99
99
|
summary: Ruby version of statsd.
|