Skip to content

Instantly share code, notes, and snippets.

@idlecool
Created February 18, 2015 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save idlecool/bc3f6d2620d7ae672ea5 to your computer and use it in GitHub Desktop.
Save idlecool/bc3f6d2620d7ae672ea5 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'socket'
require 'redis'
require 'aws-sdk'
ip_address = Socket.ip_address_list.select do |ip|
ip.ipv4_private?
end.first.ip_address
keys = %w(used_memory used_memory_rss used_memory_peak used_memory_lua
used_cpu_sys used_cpu_user used_cpu_sys_children used_cpu_user_children
rdb_changes_since_last_save rdb_bgsave_in_progress rdb_last_save_time
rdb_last_bgsave_status rdb_last_bgsave_time_sec rdb_current_bgsave_time_sec
connected_clients total_connections_received total_commands_processed
instantaneous_ops_per_sec rejected_connections expired_keys evicted_keys
keyspace_hits keyspace_misses)
redis = Redis.new
info = redis.info
filter_info = info.select {|k,v| keys.include? k}
begin
filter_info["rdb_last_bgsave_status"] =
filter_info["rdb_last_bgsave_status"].upcase.split("").map do |s|
s.ord.to_s
end.join
rescue StandardError
filter_info["rdb_last_bgsave_status"] = 100
end
complete_payload = filter_info.map do |key, value|
{:metric_name => key, :value => value}
end
cloudwatch = Aws::CloudWatch::Client.new(region: 'us-east-1')
namespace = "redis/#{ip_address}"
complete_payload.each_slice(20) do |payload|
cloudwatch.put_metric_data(
:namespace => namespace,
:metric_data => payload
)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment