2016-07-28 19:31:11 +08:00
|
|
|
package models
|
2016-01-23 02:54:12 +08:00
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
|
|
|
|
|
2016-01-28 05:21:36 +08:00
|
|
|
"github.com/influxdata/telegraf"
|
2016-11-07 16:34:46 +08:00
|
|
|
"github.com/influxdata/telegraf/selfstat"
|
2016-01-23 02:54:12 +08:00
|
|
|
)
|
|
|
|
|
|
2020-02-26 02:40:29 +08:00
|
|
|
var (
|
|
|
|
|
GlobalMetricsGathered = selfstat.Register("agent", "metrics_gathered", map[string]string{})
|
|
|
|
|
GlobalGatherErrors = selfstat.Register("agent", "gather_errors", map[string]string{})
|
|
|
|
|
)
|
2016-11-07 16:34:46 +08:00
|
|
|
|
2016-01-23 02:54:12 +08:00
|
|
|
type RunningInput struct {
|
2016-01-28 05:21:36 +08:00
|
|
|
Input telegraf.Input
|
2016-01-23 02:54:12 +08:00
|
|
|
Config *InputConfig
|
2016-09-08 22:22:10 +08:00
|
|
|
|
2019-08-22 07:49:07 +08:00
|
|
|
log telegraf.Logger
|
2016-09-08 22:22:10 +08:00
|
|
|
defaultTags map[string]string
|
2016-11-07 16:34:46 +08:00
|
|
|
|
|
|
|
|
MetricsGathered selfstat.Stat
|
2018-11-06 05:34:28 +08:00
|
|
|
GatherTime selfstat.Stat
|
2016-11-07 16:34:46 +08:00
|
|
|
}
|
|
|
|
|
|
2018-11-06 05:34:28 +08:00
|
|
|
func NewRunningInput(input telegraf.Input, config *InputConfig) *RunningInput {
|
2019-10-24 03:40:31 +08:00
|
|
|
tags := map[string]string{"input": config.Name}
|
|
|
|
|
if config.Alias != "" {
|
|
|
|
|
tags["alias"] = config.Alias
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-26 02:40:29 +08:00
|
|
|
inputErrorsRegister := selfstat.Register("gather", "errors", tags)
|
|
|
|
|
logger := NewLogger("inputs", config.Name, config.Alias)
|
|
|
|
|
logger.OnErr(func() {
|
|
|
|
|
inputErrorsRegister.Incr(1)
|
|
|
|
|
GlobalGatherErrors.Incr(1)
|
|
|
|
|
})
|
2020-09-28 23:58:23 +08:00
|
|
|
SetLoggerOnPlugin(input, logger)
|
2019-08-22 07:49:07 +08:00
|
|
|
|
2016-11-07 16:34:46 +08:00
|
|
|
return &RunningInput{
|
|
|
|
|
Input: input,
|
|
|
|
|
Config: config,
|
|
|
|
|
MetricsGathered: selfstat.Register(
|
|
|
|
|
"gather",
|
|
|
|
|
"metrics_gathered",
|
2019-10-24 03:40:31 +08:00
|
|
|
tags,
|
2016-11-07 16:34:46 +08:00
|
|
|
),
|
2018-11-06 05:34:28 +08:00
|
|
|
GatherTime: selfstat.RegisterTiming(
|
|
|
|
|
"gather",
|
|
|
|
|
"gather_time_ns",
|
2019-10-24 03:40:31 +08:00
|
|
|
tags,
|
2018-11-06 05:34:28 +08:00
|
|
|
),
|
2019-08-22 07:49:07 +08:00
|
|
|
log: logger,
|
2016-11-07 16:34:46 +08:00
|
|
|
}
|
2016-01-23 02:54:12 +08:00
|
|
|
}
|
|
|
|
|
|
2018-09-29 05:48:20 +08:00
|
|
|
// InputConfig is the common config for all inputs.
|
2016-01-23 02:54:12 +08:00
|
|
|
type InputConfig struct {
|
2020-07-01 14:15:11 +08:00
|
|
|
Name string
|
|
|
|
|
Alias string
|
2023-03-02 06:34:48 +08:00
|
|
|
ID string
|
2020-07-01 14:15:11 +08:00
|
|
|
Interval time.Duration
|
|
|
|
|
CollectionJitter time.Duration
|
2022-02-16 01:39:12 +08:00
|
|
|
CollectionOffset time.Duration
|
2020-07-01 14:15:11 +08:00
|
|
|
Precision time.Duration
|
2018-09-29 05:48:20 +08:00
|
|
|
|
2016-01-23 02:54:12 +08:00
|
|
|
NameOverride string
|
|
|
|
|
MeasurementPrefix string
|
|
|
|
|
MeasurementSuffix string
|
|
|
|
|
Tags map[string]string
|
|
|
|
|
Filter Filter
|
|
|
|
|
}
|
2016-09-08 22:22:10 +08:00
|
|
|
|
2018-11-06 05:34:28 +08:00
|
|
|
func (r *RunningInput) metricFiltered(metric telegraf.Metric) {
|
|
|
|
|
metric.Drop()
|
|
|
|
|
}
|
|
|
|
|
|
2019-08-22 07:49:07 +08:00
|
|
|
func (r *RunningInput) LogName() string {
|
|
|
|
|
return logName("inputs", r.Config.Name, r.Config.Alias)
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-15 06:12:27 +08:00
|
|
|
func (r *RunningInput) Init() error {
|
|
|
|
|
if p, ok := r.Input.(telegraf.Initializer); ok {
|
|
|
|
|
err := p.Init()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-02 06:34:48 +08:00
|
|
|
func (r *RunningInput) ID() string {
|
|
|
|
|
if p, ok := r.Input.(telegraf.PluginWithID); ok {
|
|
|
|
|
return p.ID()
|
|
|
|
|
}
|
|
|
|
|
return r.Config.ID
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-29 05:48:20 +08:00
|
|
|
func (r *RunningInput) MakeMetric(metric telegraf.Metric) telegraf.Metric {
|
|
|
|
|
if ok := r.Config.Filter.Select(metric); !ok {
|
2018-11-06 05:34:28 +08:00
|
|
|
r.metricFiltered(metric)
|
2018-09-29 05:48:20 +08:00
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-08 22:22:10 +08:00
|
|
|
m := makemetric(
|
2018-09-29 05:48:20 +08:00
|
|
|
metric,
|
2016-09-08 22:22:10 +08:00
|
|
|
r.Config.NameOverride,
|
|
|
|
|
r.Config.MeasurementPrefix,
|
|
|
|
|
r.Config.MeasurementSuffix,
|
|
|
|
|
r.Config.Tags,
|
2018-09-29 05:48:20 +08:00
|
|
|
r.defaultTags)
|
2016-09-08 22:22:10 +08:00
|
|
|
|
2018-12-19 06:20:43 +08:00
|
|
|
r.Config.Filter.Modify(metric)
|
|
|
|
|
if len(metric.FieldList()) == 0 {
|
|
|
|
|
r.metricFiltered(metric)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-07 16:34:46 +08:00
|
|
|
r.MetricsGathered.Incr(1)
|
|
|
|
|
GlobalMetricsGathered.Incr(1)
|
2016-09-08 22:22:10 +08:00
|
|
|
return m
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-06 05:34:28 +08:00
|
|
|
func (r *RunningInput) Gather(acc telegraf.Accumulator) error {
|
|
|
|
|
start := time.Now()
|
|
|
|
|
err := r.Input.Gather(acc)
|
|
|
|
|
elapsed := time.Since(start)
|
|
|
|
|
r.GatherTime.Incr(elapsed.Nanoseconds())
|
|
|
|
|
return err
|
2016-09-08 22:22:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *RunningInput) SetDefaultTags(tags map[string]string) {
|
|
|
|
|
r.defaultTags = tags
|
|
|
|
|
}
|
2020-02-26 02:40:29 +08:00
|
|
|
|
|
|
|
|
func (r *RunningInput) Log() telegraf.Logger {
|
|
|
|
|
return r.log
|
|
|
|
|
}
|