-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Graphite Input Parsing Proposal #2996
Comments
Quick suggestion -- how about making this detailed description a README.md in |
And Support can also lift the markdown into online docs. |
Sounds good. I'll move this there once there is a PR ready. |
Great, I did that for precreator, and it is pretty handy. https://github.com/influxdb/influxdb/blob/master/services/precreator/README.md |
Generally makes sense to me.
|
Oh -- I see the "customized config" -- studying that now. |
OK, cool, I think this should work. |
Generally looks brilliant to me, and I have a few questions.
|
Looks great; simple but flexible to use. |
I like the proposal, was thinking along similar lines for how to translate graphite metric paths to measurement and key/value pairs |
Fixed by #3125 |
Introduction
This issue provides details on the proposed changes to the graphite plugin. The current graphite input assumes a format for incoming metrics in order to be able to pull out relevant pieces to use as tags.
Unfortunately, many systems do not use this format and are unable to change how metrics are sent which makes it difficult to switch to this plugin. The graphite plugin needs more flexibility in how it receives and parses graphite metrics.
There has been some discussion and proposed changes to the graphite plugin. See these issues for more discussion and background:
This proposals builds on the ideas found in those two issues and aims to make the plugin usable for all graphite inputs but also allow for the ability to extract tags without requiring a custom format to be used.
Design
By default, enabling the graphite plugin will allow you to collect metrics and store them as they are written. If you send a metric named
servers.localhost.cpu.loadavg.10
, it will store the the full metric name as the measurement with no extracted tags.While this default setup works, it is not the ideal way to store measurements in InfluxDB since it does not take advantage of tags. It also will not perform optimally with a large dataset sizes since queries will be forced to use regexes which is known to not scale well.
To extract tags from metrics, one or more templates must be configured to parse metrics into tags and measurements.
Templates
Templates allow matching parts of a metric name to use as tag names in the stored metric. They have a similar format to graphite metric names. The values in between the separators are used as the tag name. The location of the tag name that matches the same position as the graphite metric section is used as the value. If there is no value, the graphite portion is skipped.
The special value measurement is used to define the measurement name. It can have a trailing
*
to indicate that the remainder of the metric should be used. If a measurement is not specified, the full metic name is used.Basic Matching
servers.localhost.cpu.loadavg.10
.host.resource.measurement*
loading.10
tags =host=localhost resource=cpu
Adding Tags
Additional tags can be added to a metric that don't exist on the received metric. You can add additional tags by specifying them after the pattern. Tags have the same format as the line protocol. Multiple tags are separate by commas.
servers.localhost.cpu.loadavg.10
.host.resource.measurement* region=us-west,zone=1a
loading.10
tags =host=localhost resource=cpu region=us-west zone=1a
Multiple Templates
One template may not match all metrics. For example, using multiple plugins with diamond will produce metrics is different formats. If you need to use multiple template, you'll need to define a prefix filter that must match before the template can be applied.
Filters
Filters have a similar format to templates but work more like wildcard expressions. When multiple filters would match a metric, the more specific one is chosen. Filters are configured by adding them before the template.
For example,
servers.*
would match all valuesservers.*.mysql
would matchservers.host456.mysql.tx_count 10
servers.localhost.*
would matchservers.localhost.cpu.loadavg
Default Templates
If no template filters are defined or you want to just have one basic template, you can define a default template. This template will apply to any metric that has not already matched a filter.
env.app.measurement*
would createrequests.200
tags=env=dev,app=http
errors.count
tags=env=prod,app=myapp
queries.count
tags=env=dev,app=db
Global Tags
If you need to add the same set of tags to all metrics, you can define them globally at the plugin level and not within each template description.
Minimal Config
Customized Config
The text was updated successfully, but these errors were encountered: