memcache2graphite 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 (3) hide show
  1. data/bin/memcache2graphite +57 -0
  2. data/conf.yml +26 -0
  3. metadata +95 -0
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'simple-graphite'
4
+ require 'dalli'
5
+ require 'yaml'
6
+ require 'eventmachine'
7
+
8
+ conf = YAML.load_file(ARGV.fetch(0,"conf.yml"))
9
+
10
+ graphite = Graphite.new({
11
+ :host => conf["graphite"]["host"],
12
+ :port => conf["graphite"]["port"],
13
+ :type => conf["graphite"].fetch("type", "udp").to_sym
14
+ })
15
+
16
+ memcache_conf = conf["memcache"]
17
+ options = {}
18
+ if memcache_conf["username"]
19
+ options[:username] = bucket["username"]
20
+ end
21
+ if memcache_conf["password"]
22
+ options[:password] = bucket["password"]
23
+ end
24
+ memcache = Dalli::Client.new("#{memcache_conf.fetch("host","localhost")}:#{memcache_conf.fetch("port",11211)}", options)
25
+
26
+ def aggregate(metric, value, type, state)
27
+ if type == "sum"
28
+ prev = state[metric]
29
+ state[metric] = value
30
+ if prev
31
+ return value.to_f - prev.to_f
32
+ end
33
+ else
34
+ return value
35
+ end
36
+ end
37
+
38
+ def collect(conf, memcache, graphite, state)
39
+ metrics_filter = conf["metrics"]
40
+ message = {}
41
+ memcache.stats.each do |node, metrics|
42
+ metrics.select{|metric, value| metrics_filter.has_key?(metric)}.each do |metric, value|
43
+ to_send = aggregate(metric, value, metrics_filter[metric], state)
44
+ if to_send
45
+ message["#{conf["graphite"]["root-path"]}.#{metrics_filter[metric]}.#{metric}"] = value
46
+ end
47
+ end
48
+ end
49
+ graphite.send_metrics(message)
50
+ end
51
+
52
+ EventMachine.run {
53
+ state = {}
54
+ EventMachine.add_periodic_timer(conf.fetch("freq",1)) do
55
+ collect(conf, memcache, graphite, state)
56
+ end
57
+ }
data/conf.yml ADDED
@@ -0,0 +1,26 @@
1
+ freq : 1
2
+ graphite :
3
+ root-path : criteo.memcache.my_bucket.debian-sf
4
+ host : localhost
5
+ port : 3333
6
+ type : udp
7
+ memcache:
8
+ #host : mem01-fr.criteo.prod
9
+ host : localhost
10
+ port : 11220
11
+ #login : Catalog
12
+ metrics:
13
+ ops : sum
14
+ hit_ratio : avg
15
+ bytes_read : sum
16
+ bytes_written : sum
17
+ cmd_get : sum
18
+ cmd_set : sum
19
+ curr_connections : avg
20
+ curr_items : avg
21
+ evictions : sum
22
+ get_hits : sum
23
+ get_misses : sum
24
+ mem_used : avg
25
+ cpu_utilization_rate : avg
26
+ ep_resident_items_rate : avg
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: memcache2graphite
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Sébastien Foutrier
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: simple-graphite
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.1.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.1.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: dalli
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 2.6.4
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.6.4
46
+ - !ruby/object:Gem::Dependency
47
+ name: eventmachine
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.0.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
62
+ description: Dumps filtered stats a single memcached instance to a graphite server
63
+ email: sebastien.foutrier@gmail.com
64
+ executables:
65
+ - memcache2graphite
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - bin/memcache2graphite
70
+ - conf.yml
71
+ homepage: https://github.com/sfoutrier/memcache2graphite
72
+ licenses: []
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.23
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Dumps filtered stats a single memcached instance to a graphite server
95
+ test_files: []