Fluent plugin to send metrics to mackerel.io
Ruby
Latest commit 935eb27 Nov 21, 2016 @itchyny itchyny committed on GitHub Merge pull request #21 from mackerelio/fix-api-document-link
Fix the links to the api documents

README.md

fluent-plugin-mackerel Build Status

Overview

This is the plugin for sending metrics to mackerel.io using Fluentd.

This plugin includes two components, MackerelOutput and MackerelHostidTagOutput. The former is used to send metrics to Mackerel and the latter is used to append the Mackerel hostid for tagging or recording.

Installation

Install with either the gem or fluent-gem command as shown:

# for fluentd
$ gem install fluent-plugin-mackerel

# for td-agent
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mackerel

Configuration

MackerelOutput

This plugin uses mackerel.io's APIv0.

<match ...>
  @type mackerel
  api_key 123456
  hostid xyz
  metrics_name http_status.${out_key}
  use_zero_for_empty
  out_keys 2xx_count,3xx_count,4xx_count,5xx_count
</match>

Metric data that has been sent will look like this:

{
  "hostId": "xyz",
  "name": "custom.http_status.2xx_count",
  "time": 1399997498,
  "value": 100.0
}

As shown above, ${out_key} will be replaced with out_key like "2xx_count" when sending metrics.

In the case an outkey does not have any value, the value will be set to 0 with use_zero_for_empty, the default of which is true. For example, if you have set out_keys 2xx_count,3xx_count,4xx_count,5xx_count, but only get 2xx_count, 3xx_count and 4xx_count, then 5xx_count will be set to 0 with use_zero_for_empty.

out_key_pattern can be used instead of out_keys. Input records whose keys match the pattern set to out_key_pattern will be sent. Either out_keys or out_key_pattern is required.

<match ...>
  @type mackerel
  api_key 123456
  service yourservice
  metrics_name http_status.${out_key}
  out_key_pattern [2-5]xx_count

${[n]} can be used as a tag for metrics_name where n represents any decimal number including negative values.

<match mackerel.*>
  @type mackerel
  api_key 123456
  hostid xyz
  metrics_name ${[1]}.${out_key}
  out_keys 2xx_count,3xx_count,4xx_count,5xx_count
</match>

This indicates the value of the n th index of the array. By splitting the tag with a . (dot) the following output can be got when the tag is mackerel.http_status.

{
  "hostId": "xyz",
  "name": "custom.http_status.2xx_count",
  "time": 1399997498,
  "value": 100.0
}

"custom" will be automatically appended to the name attribute before sending metrics to mackerel.

You can also send service metrics as shown.

<match ...>
  @type mackerel
  api_key 123456
  service yourservice
  metrics_name http_status.${out_key}
  out_keys 2xx_count,3xx_count,4xx_count,5xx_count
</match>

When sending service metrics, the prefix "custom" can be removed with remove_prefix as follows. This option is not availabe when sending host metrics.

<match ...>
  @type mackerel
  api_key 123456
  service yourservice
  remove_prefix
  metrics_name http_status.${out_key}
  out_keys 2xx_count,3xx_count,4xx_count,5xx_count
</match>

flush_interval may not be set to less than 60 seconds so as not to send API requests more than once per minute.

This plugin overwrites the default values of buffer_queue_limit and buffer_chunk_limit as shown.

  • buffer_queue_limit to 4096
  • buffer_chunk_limit to 100K

Unless there is some particular reason to change these values, we suggest leaving them as is.

From version 0.0.4 and on, metrics_prefix has been removed and metrics_name should be used instead.

MackerelHostidTagOutput

Let's say you want to add the hostid to the record with a specific key name...

<match ...>
  @type mackerel_hostid_tag
  add_to record
  key_name mackerel_hostid
</match>

As shown above, the key_name field is required. For example if the host_id is "xyz" and input is ["test", 1407650400, {"val1"=>1, "val2"=>2, "val3"=>3, "val4"=>4}], you'll get ["test", 1407650400, {"val1"=>1, "val2"=>2, "val3"=>3, "val4"=>4, "mackerel_hostid"=>"xyz"}]

To append the hostid to the tag, you can simply configure "add_to" as "tag" like this.

<match ...>
  @type mackerel_hostid_tag
  add_to tag
</match>

If the input is ["test", 1407650400, {"val1"=>1, "val2"=>2, "val3"=>3, "val4"=>4}], then the output will be ["test.xyz", 1407650400, {"val1"=>1, "val2"=>2, "val3"=>3, "val4"=>4}]

Both add_prefix and remove_prefix options are availale to control rebuilding tags.

TODO

Pull requests are very welcome!!

For developers

You'll need to run the command below when starting development.

$ bundle install --path vendor/bundle

To run tests...

$ VERBOSE=1 bundle exec rake test

If you want to run a certain file, run rake like this

$ VERBOSE=1 bundle exec rake test TEST=test/plugin/test_out_mackerel.rb

Additionally, you can run a specific method like this.

$ VERBOSE=1 bundle exec rake test TEST=test/plugin/test_out_mackerel.rb TESTOPTS="--name=test_configure"

When releasing, call rake release as shown.

$ bundle exec rake release

For debugging purposes, you can change the Mackerel endpoint with an origin parameter like this.

<match ...>
  @type mackerel
  api_key 123456
  hostid xyz
  metrics_name http_status.${out_key}
  out_keys 2xx_count,3xx_count,4xx_count,5xx_count
  origin https://example.com
</match>

References

Authors

  • Takashi Someda (@tksmd)
  • Mackerel Development Team

Copyright

  • Copyright (c) 2014- Hatena Co., Ltd. and Authors
  • Apache License, Version 2.0