memcache2graphite 1.0.0

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