Removed the Tags capability from the graphite parser.
This commit is contained in:
parent
5b29df75f5
commit
14f2f36383
|
@ -3,8 +3,6 @@ package graphite
|
|||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/influxdata/influxdb/models"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -16,30 +14,15 @@ const (
|
|||
// Config represents the configuration for Graphite endpoints.
|
||||
type Config struct {
|
||||
Separator string
|
||||
Tags []string
|
||||
Templates []string
|
||||
}
|
||||
|
||||
// DefaultTags returns the config's tags.
|
||||
func (c *Config) DefaultTags() models.Tags {
|
||||
tags := models.Tags{}
|
||||
for _, t := range c.Tags {
|
||||
parts := strings.Split(t, "=")
|
||||
tags[parts[0]] = parts[1]
|
||||
}
|
||||
return tags
|
||||
}
|
||||
|
||||
// Validate validates the config's templates and tags.
|
||||
func (c *Config) Validate() error {
|
||||
if err := c.validateTemplates(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := c.validateTags(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -110,15 +93,6 @@ func (c *Config) validateTemplates() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) validateTags() error {
|
||||
for _, t := range c.Tags {
|
||||
if err := c.validateTag(t); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) validateTemplate(template string) error {
|
||||
hasMeasurement := false
|
||||
for _, p := range strings.Split(template, ".") {
|
||||
|
|
|
@ -35,14 +35,12 @@ func init() {
|
|||
// Parser encapsulates a Graphite Parser.
|
||||
type Parser struct {
|
||||
matcher *matcher
|
||||
tags models.Tags
|
||||
}
|
||||
|
||||
// Options are configurable values that can be provided to a Parser
|
||||
type Options struct {
|
||||
Separator string
|
||||
Templates []string
|
||||
DefaultTags models.Tags
|
||||
Separator string
|
||||
Templates []string
|
||||
}
|
||||
|
||||
// NewParserWithOptions returns a graphite parser using the given options
|
||||
|
@ -84,16 +82,15 @@ func NewParserWithOptions(options Options) (*Parser, error) {
|
|||
}
|
||||
matcher.Add(filter, tmpl)
|
||||
}
|
||||
return &Parser{matcher: matcher, tags: options.DefaultTags}, nil
|
||||
return &Parser{matcher: matcher}, nil
|
||||
}
|
||||
|
||||
// NewParser returns a GraphiteParser instance.
|
||||
func NewParser(templates []string, defaultTags models.Tags) (*Parser, error) {
|
||||
func NewParser(templates []string) (*Parser, error) {
|
||||
return NewParserWithOptions(
|
||||
Options{
|
||||
Templates: templates,
|
||||
DefaultTags: defaultTags,
|
||||
Separator: DefaultSeparator,
|
||||
Templates: templates,
|
||||
Separator: DefaultSeparator,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -182,12 +179,6 @@ func (p *Parser) Parse(line string) (telegraf.Metric, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// Set the default tags on the point if they are not already set
|
||||
for k, v := range p.tags {
|
||||
if _, ok := tags[k]; !ok {
|
||||
tags[k] = v
|
||||
}
|
||||
}
|
||||
return telegraf.NewMetric(measurement, tags, fieldValues, timestamp)
|
||||
}
|
||||
|
||||
|
@ -202,12 +193,7 @@ func (p *Parser) ApplyTemplate(line string) (string, map[string]string, string,
|
|||
// decode the name and tags
|
||||
template := p.matcher.Match(fields[0])
|
||||
name, tags, field, err := template.Apply(fields[0])
|
||||
// Set the default tags on the point if they are not already set
|
||||
for k, v := range p.tags {
|
||||
if _, ok := tags[k]; !ok {
|
||||
tags[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
return name, tags, field, err
|
||||
}
|
||||
|
||||
|
|
|
@ -44,19 +44,15 @@ and strings will be ignored.
|
|||
### If matching multiple measurement files, this string will be used to join the matched values.
|
||||
#separator = "."
|
||||
|
||||
### Default tags that will be added to all metrics. These can be overridden at the template level
|
||||
### or by tags extracted from metric
|
||||
#tags = ["region=north-east", "zone=1c"]
|
||||
|
||||
### Each template line requires a template pattern. It can have an optional
|
||||
### filter before the template and separated by spaces. It can also have optional extra
|
||||
### tags following the template. Multiple tags should be separated by commas and no spaces
|
||||
### similar to the line protocol format. The can be only one default template.
|
||||
### Templates support below format:
|
||||
### filter + template
|
||||
### filter + template + extra tag
|
||||
### filter + template with field key
|
||||
### default template. Ignore the first graphite component "servers"
|
||||
### 1. filter + template
|
||||
### 2. filter + template + extra tag
|
||||
### 3. filter + template with field key
|
||||
### 4. default template
|
||||
#templates = [
|
||||
# "*.app env.service.resource.measurement",
|
||||
# "stats.* .host.measurement* region=us-west,agent=sensu",
|
||||
|
@ -149,19 +145,15 @@ We can also change the data_format to "graphite" to use the metrics collecting s
|
|||
### If matching multiple measurement files, this string will be used to join the matched values.
|
||||
separator = "."
|
||||
|
||||
### Default tags that will be added to all metrics. These can be overridden at the template level
|
||||
### or by tags extracted from metric
|
||||
tags = ["region=north-east", "zone=1c"]
|
||||
|
||||
### Each template line requires a template pattern. It can have an optional
|
||||
### filter before the template and separated by spaces. It can also have optional extra
|
||||
### tags following the template. Multiple tags should be separated by commas and no spaces
|
||||
### similar to the line protocol format. The can be only one default template.
|
||||
### Templates support below format:
|
||||
### filter + template
|
||||
### filter + template + extra tag
|
||||
### filter + template with field key
|
||||
### default template. Ignore the first graphite component "servers"
|
||||
### 1. filter + template
|
||||
### 2. filter + template + extra tag
|
||||
### 3. filter + template with field key
|
||||
### 4. default template
|
||||
templates = [
|
||||
"*.app env.service.resource.measurement",
|
||||
"stats.* .host.measurement* region=us-west,agent=sensu",
|
||||
|
|
|
@ -4,12 +4,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal/encoding/graphite"
|
||||
)
|
||||
|
||||
const (
|
||||
// DefaultSeparator is the default join character to use when joining multiple
|
||||
// measurment parts in a template.
|
||||
DefaultSeparator = "."
|
||||
)
|
||||
|
||||
// Config represents the configuration for Graphite endpoints.
|
||||
type Config struct {
|
||||
Commands []string
|
||||
|
@ -17,21 +11,15 @@ type Config struct {
|
|||
}
|
||||
|
||||
// New Config instance.
|
||||
func NewConfig(commands, tags, templates []string, separator string) *Config {
|
||||
func NewConfig(commands, templates []string, separator string) *Config {
|
||||
c := &Config{}
|
||||
if separator == "" {
|
||||
separator = graphite.DefaultSeparator
|
||||
}
|
||||
|
||||
c.Commands = commands
|
||||
c.Tags = tags
|
||||
c.Templates = templates
|
||||
c.Separator = separator
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
// WithDefaults takes the given config and returns a new config with any required
|
||||
// default values set.
|
||||
func (c *Config) WithDefaults() *Config {
|
||||
d := *c
|
||||
if d.Separator == "" {
|
||||
d.Separator = DefaultSeparator
|
||||
}
|
||||
return &d
|
||||
}
|
||||
|
|
|
@ -32,19 +32,15 @@ const sampleConfig = `
|
|||
### If matching multiple measurement files, this string will be used to join the matched values.
|
||||
separator = "."
|
||||
|
||||
### Default tags that will be added to all metrics. These can be overridden at the template level
|
||||
### or by tags extracted from metric
|
||||
tags = ["region=north-east", "zone=1c"]
|
||||
|
||||
### Each template line requires a template pattern. It can have an optional
|
||||
### filter before the template and separated by spaces. It can also have optional extra
|
||||
### tags following the template. Multiple tags should be separated by commas and no spaces
|
||||
### similar to the line protocol format. The can be only one default template.
|
||||
### Templates support below format:
|
||||
### filter + template
|
||||
### filter + template + extra tag
|
||||
### filter + template with field key
|
||||
### default template. Ignore the first graphite component "servers"
|
||||
### 1. filter + template
|
||||
### 2. filter + template + extra tag
|
||||
### 3. filter + template with field key
|
||||
### 4. default template
|
||||
templates = [
|
||||
"*.app env.service.resource.measurement",
|
||||
"stats.* .host.measurement* region=us-west,agent=sensu",
|
||||
|
@ -59,7 +55,6 @@ type Exec struct {
|
|||
DataFormat string
|
||||
|
||||
Separator string
|
||||
Tags []string
|
||||
Templates []string
|
||||
|
||||
encodingParser *encoding.Parser
|
||||
|
@ -125,8 +120,7 @@ func (e *Exec) initConfig() error {
|
|||
e.Commands = []string{e.Command}
|
||||
}
|
||||
|
||||
c := NewConfig(e.Commands, e.Tags, e.Templates, e.Separator)
|
||||
c.WithDefaults()
|
||||
c := NewConfig(e.Commands, e.Templates, e.Separator)
|
||||
if err := c.Validate(); err != nil {
|
||||
return fmt.Errorf("exec configuration is error: %s ", err.Error())
|
||||
|
||||
|
@ -134,9 +128,8 @@ func (e *Exec) initConfig() error {
|
|||
e.config = c
|
||||
|
||||
graphiteParser, err := graphite.NewParserWithOptions(graphite.Options{
|
||||
Templates: e.config.Templates,
|
||||
DefaultTags: e.config.DefaultTags(),
|
||||
Separator: e.config.Separator})
|
||||
Templates: e.config.Templates,
|
||||
Separator: e.config.Separator})
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("exec input parser config is error: %s ", err.Error())
|
||||
|
@ -152,7 +145,7 @@ func (e *Exec) SampleConfig() string {
|
|||
}
|
||||
|
||||
func (e *Exec) Description() string {
|
||||
return "Read metrics from one or more commands that output graphite line protocol to stdout"
|
||||
return "Read metrics from one or more commands that can output JSON, influx or graphite line protocol to stdout"
|
||||
}
|
||||
|
||||
func (e *Exec) Gather(acc telegraf.Accumulator) error {
|
||||
|
|
|
@ -8,7 +8,7 @@ size limit, [see here for more details.](../udp/README.md#a-note-on-udpip-os-buf
|
|||
## Configuration
|
||||
|
||||
Each Socket input allows the binding address, and protocol to be set.
|
||||
Currently socket service input only support line protocol formats of metric: influx and graphite.
|
||||
Currently socket service input only support two line protocol formats of metric: influx and graphite.
|
||||
Each input allows to use data_format to choose which format of contents will be sent to this socket service.
|
||||
|
||||
## Parsing Metrics
|
||||
|
@ -142,19 +142,15 @@ If you need to add the same set of tags to all metrics, you can define them glob
|
|||
### If matching multiple measurement files, this string will be used to join the matched values.
|
||||
separator = "."
|
||||
|
||||
### Default tags that will be added to all metrics. These can be overridden at the template level
|
||||
### or by tags extracted from metric
|
||||
tags = ["region=us-east", "zone=1c"]
|
||||
|
||||
### Each template line requires a template pattern. It can have an optional
|
||||
### filter before the template and separated by spaces. It can also have optional extra
|
||||
### tags following the template. Multiple tags should be separated by commas and no spaces
|
||||
### similar to the line protocol format. The can be only one default template.
|
||||
### Templates support below format:
|
||||
### filter + template
|
||||
### filter + template + extra tag
|
||||
### filter + template with field key
|
||||
### default template. Ignore the first graphite component "servers"
|
||||
### 1. filter + template
|
||||
### 2. filter + template + extra tag
|
||||
### 3. filter + template with field key
|
||||
### 4. default template
|
||||
templates = [
|
||||
"*.app env.service.resource.measurement",
|
||||
"stats.* .host.measurement* region=us-west,agent=sensu",
|
||||
|
|
|
@ -9,10 +9,6 @@ const (
|
|||
// DefaultProtocol is the default IP protocol used by the Graphite input.
|
||||
DefaultProtocol = "tcp"
|
||||
|
||||
// DefaultSeparator is the default join character to use when joining multiple
|
||||
// measurment parts in a template.
|
||||
DefaultSeparator = "."
|
||||
|
||||
// DefaultUDPReadBuffer is the default buffer size for the UDP listener.
|
||||
// Sets the size of the operating system's receive buffer associated with
|
||||
// the UDP traffic. Keep in mind that the OS must be able
|
||||
|
@ -36,34 +32,26 @@ type Config struct {
|
|||
graphite.Config
|
||||
}
|
||||
|
||||
// WithDefaults takes the given config and returns a new config with any required
|
||||
// default values set.
|
||||
func (c *Config) WithDefaults() *Config {
|
||||
d := *c
|
||||
if d.BindAddress == "" {
|
||||
d.BindAddress = DefaultBindAddress
|
||||
}
|
||||
if d.Protocol == "" {
|
||||
d.Protocol = DefaultProtocol
|
||||
}
|
||||
if d.Separator == "" {
|
||||
d.Separator = DefaultSeparator
|
||||
}
|
||||
if d.UdpReadBuffer == 0 {
|
||||
d.UdpReadBuffer = DefaultUdpReadBuffer
|
||||
}
|
||||
return &d
|
||||
}
|
||||
|
||||
// New Config instance.
|
||||
func NewConfig(bindAddress, protocol string, udpReadBuffer int, separator string, tags []string, templates []string) *Config {
|
||||
func NewConfig(bindAddress, protocol string, udpReadBuffer int, separator string, templates []string) *Config {
|
||||
c := &Config{}
|
||||
if bindAddress == "" {
|
||||
bindAddress = DefaultBindAddress
|
||||
}
|
||||
if protocol == "" {
|
||||
protocol = DefaultProtocol
|
||||
}
|
||||
if udpReadBuffer < 0 {
|
||||
udpReadBuffer = DefaultUdpReadBuffer
|
||||
}
|
||||
if separator == "" {
|
||||
separator = graphite.DefaultSeparator
|
||||
}
|
||||
|
||||
c.BindAddress = bindAddress
|
||||
c.Protocol = protocol
|
||||
c.UdpReadBuffer = udpReadBuffer
|
||||
|
||||
c.Separator = separator
|
||||
c.Tags = tags
|
||||
c.Templates = templates
|
||||
|
||||
return c
|
||||
|
|
|
@ -40,7 +40,6 @@ type Socket struct {
|
|||
DataFormat string
|
||||
|
||||
Separator string
|
||||
Tags []string
|
||||
Templates []string
|
||||
|
||||
mu sync.Mutex
|
||||
|
@ -76,19 +75,15 @@ var sampleConfig = `
|
|||
### If matching multiple measurement files, this string will be used to join the matched values.
|
||||
separator = "."
|
||||
|
||||
### Default tags that will be added to all metrics. These can be overridden at the template level
|
||||
### or by tags extracted from metric
|
||||
tags = ["region=north-china", "zone=1c"]
|
||||
|
||||
### Each template line requires a template pattern. It can have an optional
|
||||
### filter before the template and separated by spaces. It can also have optional extra
|
||||
### tags following the template. Multiple tags should be separated by commas and no spaces
|
||||
### similar to the line protocol format. The can be only one default template.
|
||||
### Templates support below format:
|
||||
### filter + template
|
||||
### filter + template + extra tag
|
||||
### filter + template with field key
|
||||
### default template. Ignore the first graphite component "servers"
|
||||
### 1. filter + template
|
||||
### 2. filter + template + extra tag
|
||||
### 3. filter + template with field key
|
||||
### 4. default template
|
||||
templates = [
|
||||
"*.app env.service.resource.measurement",
|
||||
"stats.* .host.measurement* region=us-west,agent=sensu",
|
||||
|
@ -110,18 +105,16 @@ func (s *Socket) Start() error {
|
|||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
c := NewConfig(s.BindAddress, s.Protocol, s.UdpReadBuffer, s.Separator, s.Tags, s.Templates)
|
||||
c := NewConfig(s.BindAddress, s.Protocol, s.UdpReadBuffer, s.Separator, s.Templates)
|
||||
|
||||
c.WithDefaults()
|
||||
if err := c.Validate(); err != nil {
|
||||
return fmt.Errorf("Socket input configuration is error: %s ", err.Error())
|
||||
}
|
||||
s.config = c
|
||||
|
||||
graphiteParser, err := graphite.NewParserWithOptions(graphite.Options{
|
||||
Templates: s.config.Templates,
|
||||
DefaultTags: s.config.DefaultTags(),
|
||||
Separator: s.config.Separator})
|
||||
Templates: s.config.Templates,
|
||||
Separator: s.config.Separator})
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("Socket input parser config is error: %s ", err.Error())
|
||||
|
|
Loading…
Reference in New Issue