An open API service indexing awesome lists of open source software.

https://github.com/fluent-plugins-nursery/fluent-plugin-elapsed-time

Fluentd plugin to measure elapsed time to process messages
https://github.com/fluent-plugins-nursery/fluent-plugin-elapsed-time

fluentd-output-plugin fluentd-plugin multioutput v10 v12 v14

Last synced: over 1 year ago
JSON representation

Fluentd plugin to measure elapsed time to process messages

Awesome Lists containing this project

README

          

# fluent-plugin-elapsed-time

[![Build Status](https://secure.travis-ci.org/sonots/fluent-plugin-elapsed-time.png?branch=master)](http://travis-ci.org/sonots/fluent-plugin-elapsed-time)

Fluentd plugin to measure elapsed time to process messages

## Installation

Use RubyGems:

gem install fluent-plugin-elapsed-time

## Illustration

This illustration draws how fluent-plugin-elapsed-time measures elapsed times.

```
+–––––––––––––+ +––––––––––––––+ +––––––––––––––+ +–––––––––––––––+
| Input | | ElapsedTime | | Output | | Output |
+––––––+––––––+ +––––––+–––––––+ +––––––+–––––––+ +–––––––+–––––––+
#on_message | | | |
+––––––––––––––––––> | |
| #emit | start = Time.now | |
| +––––––––––––––––––> |
| | #emit +–––––––––––––––––––>
| | | #emit |
| | <– – – – – – – – – +
| <– – – – – – – – – + |
| | elapsed = Time.now - start |
<– – – – – - – – – + | |
| | | |
+ + + +
```

## Configuration

Example:

Following example measures the max and average time taken to process [fluent-plugin-grep](https://github.com/sonots/fluent-plugin-grep) => out_stdout chain in messages. Please notice that this plugin measures the total processing time until match chain finishes.

```apache

type stdout

type stdout

type elapsed_time
tag elapsed
interval 60
each message

type grep
exclude foobar
add_tag_prefix greped

```

Output will be like

```
elapsed: {"max":1.011,"avg":0.002","num":10}
```

where `max` and `avg` are the maximum and average elapsed times, and `num` is the number of messages.

## Option Parameters

* interval

The time interval to emit measurement results

* each

Measure time for each `message` or `es` (event stream). Please notice that the event stream (would be a msgpack) will be unpacked if `message` is specified, which would cause performance degradation. Default is `es`.

* tag

The output tag name. Default is `elapsed`

* add_tag_prefix

Add tag prefix for output message

* remove_tag_prefix

Remove tag prefix for output message

* remove_tag_slice *min..max*

Remove tag parts by slice function. FYI: This option behaves like `tag.split('.').slice(min..max)`.

For example,

remove_tag_slice 0..-2

changes an input tag `foo.bar.host1` to `foo.bar`.

* aggregate

Measure and emit outputs for each `tag` or `all`. Default is `all`.

`all` measures `max` and `avg` for all input messages.
`tag` measures `max` and `avg` for each tag *modified* by `add_tag_prefix`, `remove_tag_prefix`, or `remove_tag_slice`.

* zero_emit *bool*

Emit 0 on the next interval. This is useful for some software which requires resetting data such as [GrowthForecast](http://kazeburo.github.io/GrowthForecast).

elapsed: {"max":1.013,"avg":0.123,"num"=>0}
# after @interval later
elapsed: {"max":0,"avg":0,"num"=>0}

## Relatives

* [fluent-plugin-measure_time](https://github.com/sonots/fluent-plugin-measure_time)

* This plugin make possible to measure the elapsed time of not only output plugins but also input plugins.
* Also, this plugin has a flexibility to measure arbitrary methods of plugins.
* But, this does not have flexibility of output messages such as `add_tag_prefix`, `aggregate` options because of its limitaion of internal mechanism.

## ChangeLog

See [CHANGELOG.md](CHANGELOG.md) for details.

## Contributing

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new [Pull Request](../../pull/new/master)

## Copyright

Copyright (c) 2014 Naotoshi Seo. See [LICENSE](LICENSE) for details.