Class: LogStash::Inputs::CloudWatch
- Inherits:
- 
      Base
      
        - Object
- Base
- LogStash::Inputs::CloudWatch
 
- Includes:
- PluginMixins::AwsConfig::V2
- Defined in:
- lib/logstash/inputs/cloudwatch.rb
Overview
Pull events from the Amazon Web Services CloudWatch API.
To use this plugin, you must have an AWS account, and the following policy.
Typically, you should setup an IAM policy, create a user and apply the IAM policy to the user.
A sample policy for EC2 metrics is as follows:
- source,json
- 
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1444715676000", "Effect": "Allow", "Action": [ "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics" ], "Resource": "*" }, { "Sid": "Stmt1444716576170", "Effect": "Allow", "Action": [ "ec2:DescribeInstances" ], "Resource": "*" } ]} 
See aws.amazon.com/iam/ for more details on setting up AWS identities.
# Configuration Example
- source, ruby
- 
input { cloudwatch { namespace => "AWS/EC2" metrics => [ "CPUUtilization" ] filters => { "tag:Group" => "API-Production" } region => "us-east-1" }} input { cloudwatch { namespace => "AWS/EBS" metrics => ["VolumeQueueLength"] filters => { "tag:Monitoring" => "Yes" } region => "us-east-1" }} input { cloudwatch { namespace => "AWS/RDS" metrics => ["CPUUtilization", "CPUCreditUsage"] filters => { "EngineName" => "mysql" } # Only supports EngineName, DatabaseClass and DBInstanceIdentifier region => "us-east-1" }} 
Instance Method Summary collapse
- #aws_service_endpoint(region) ⇒ Object
- 
  
    
      #filters_required?(namespace)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    def register. 
- #register ⇒ Object
- 
  
    
      #run(queue)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Runs the poller to get metrics for the provided namespace. 
Instance Method Details
#aws_service_endpoint(region) ⇒ Object
| 124 125 126 | # File 'lib/logstash/inputs/cloudwatch.rb', line 124 def aws_service_endpoint(region) { region: region } end | 
#filters_required?(namespace) ⇒ Boolean
def register
| 136 137 138 139 140 141 142 143 | # File 'lib/logstash/inputs/cloudwatch.rb', line 136 def filters_required?(namespace) case namespace when 'AWS/EC2' false else true end end | 
#register ⇒ Object
| 128 129 130 131 132 133 134 | # File 'lib/logstash/inputs/cloudwatch.rb', line 128 def register raise 'Interval needs to be higher than period' unless @interval >= @period raise 'Interval must be divisible by period' unless @interval % @period == 0 raise "Filters must be defined for when using #{@namespace} namespace" if @filters.nil? && filters_required?(@namespace) @last_check = Time.now end | 
#run(queue) ⇒ Object
Runs the poller to get metrics for the provided namespace
| 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | # File 'lib/logstash/inputs/cloudwatch.rb', line 148 def run(queue) while !stop? start = Time.now @logger.info('Polling CloudWatch API') raise 'No metrics to query' unless metrics_for(@namespace).count > 0 # For every metric metrics_for(@namespace).each do |metric| @logger.debug "Polling metric #{metric}" if @filters.nil? from_resources(queue, metric) else @logger.debug "Filters: #{aws_filters}" @combined ? from_filters(queue, metric) : from_resources(queue, metric) end end sleep_for = @interval - (Time.now - start) Stud.stoppable_sleep(sleep_for) { stop? } if sleep_for > 0 end # loop end |