require 'optparse' require 'net/http' require 'aws-sdk-resources' # bundle exec ruby cloudwatch_put_process.rb --process nginx opts = ARGV.getopts('', 'process:') process = opts['process'] METADATA_ENDPOINT = 'http://169.254.169.254/latest/meta-data' instance_id = Net::HTTP.get(URI.parse("#{METADATA_ENDPOINT}/instance-id")) process_count = `ps awux | grep -w #{process} | grep -v grep | grep -v "cloudwatch_put_process.rb --process" | wc -l` cloudwatch = Aws::CloudWatch::Client.new(region: 'ap-northeast-1') cloudwatch.put_metric_data( namespace: 'Custom Metrix', metric_data: [ { metric_name: "#{process}Processes", dimensions: [ { name: 'InstanceId', value: instance_id, } ], value: process_count, unit: 'Count', } ] )