2020-02-07 04:40:03 +08:00
# Template Processor
2020-02-07 05:34:36 +08:00
The `template` processor applies a Go template to metrics to generate a new
tag. The primary use case of this plugin is to create a tag that can be used
for dynamic routing to multiple output plugins or using an output specific
routing option.
2020-02-07 04:40:03 +08:00
2020-02-07 05:34:36 +08:00
The template has access to each metric's measurement name, tags, fields, and
timestamp using the [interface in `/template_metric.go` ](template_metric.go ).
Read the full [Go Template Documentation][].
2020-02-07 04:40:03 +08:00
2021-11-25 02:47:11 +08:00
## Configuration
2020-02-07 04:40:03 +08:00
```toml
2020-02-07 05:34:36 +08:00
[[processors.template]]
## Tag to set with the output of the template.
tag = "topic"
## Go template used to create the tag value. In order to ease TOML
## escaping requirements, you may wish to use single quotes around the
## template string.
template = '{{ .Tag "hostname" }}.{{ .Tag "level" }}'
2020-02-07 04:40:03 +08:00
```
2021-12-24 00:51:26 +08:00
## Examples
2020-02-07 04:40:03 +08:00
2021-12-24 00:51:26 +08:00
### Combine multiple tags to create a single tag
2021-11-25 02:47:11 +08:00
2020-02-07 05:34:36 +08:00
```toml
[[processors.template]]
tag = "topic"
template = '{{ .Tag "hostname" }}.{{ .Tag "level" }}'
```
```diff
- cpu,level=debug,hostname=localhost time_idle=42
+ cpu,level=debug,hostname=localhost,topic=localhost.debug time_idle=42
```
2021-12-24 00:51:26 +08:00
### Add measurement name as a tag
2021-11-25 02:47:11 +08:00
2020-02-07 05:34:36 +08:00
```toml
[[processors.template]]
tag = "measurement"
template = '{{ .Name }}'
```
2020-02-07 04:40:03 +08:00
```diff
2020-02-07 05:34:36 +08:00
- cpu,hostname=localhost time_idle=42
2020-05-14 15:41:58 +08:00
+ cpu,hostname=localhost,measurement=cpu time_idle=42
2020-02-07 05:34:36 +08:00
```
2021-12-24 00:51:26 +08:00
### Add the year as a tag, similar to the date processor
2021-11-25 02:47:11 +08:00
2020-02-07 05:34:36 +08:00
```toml
[[processors.template]]
tag = "year"
template = '{{.Time.UTC.Year}}'
2020-02-07 04:40:03 +08:00
```
2021-12-24 00:51:26 +08:00
### Add all fields as a tag
Sometimes it is usefull to pass all fields with their values into a single message for sending it to a monitoring system (e.g. Syslog, GroundWork), then you can use `.FieldList` or `.TagList` :
```toml
[[processors.template]]
tag = "message"
template = 'Message about {{.Name}} fields: {{.FieldList}}'
```
```diff
- cpu,hostname=localhost time_idle=42
+ cpu,hostname=localhost,message=Message\ about\ cpu\ fields:\ map[time_idle:42] time_idle=42
```
More advanced example, which might make more sense:
```toml
[[processors.template]]
tag = "message"
template = '''Message about {{.Name}} fields:
{{ range $field, $value := .FieldList -}}
{{$field}}:{{$value}}
{{ end }}'''
```
```diff
- cpu,hostname=localhost time_idle=42
+ cpu,hostname=localhost,message=Message\ about\ cpu\ fields:\ntime_idle:42\n time_idle=42
```
### Just add the current metric as a tag
```toml
[[processors.template]]
tag = "metric"
template = '{{.}}'
```
```diff
- cpu,hostname=localhost time_idle=42
+ cpu,hostname=localhost,metric=cpu\ map[hostname:localhost]\ map[time_idle:42]\ 1257894000000000000 time_idle=42
```
2020-02-07 05:34:36 +08:00
[Go Template Documentation]: https://golang.org/pkg/text/template/