From 554b960339faf67ce633bdde46ddc36980ee8b38 Mon Sep 17 00:00:00 2001 From: Max U Date: Mon, 25 Jun 2018 09:53:35 -0700 Subject: [PATCH] add setparser to reader --- plugins/inputs/reader/reader.go | 41 ++++++++++++++++++++++++++++++++- plugins/parsers/registry.go | 7 ++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/plugins/inputs/reader/reader.go b/plugins/inputs/reader/reader.go index 36c2a742e..504a40b3a 100644 --- a/plugins/inputs/reader/reader.go +++ b/plugins/inputs/reader/reader.go @@ -24,6 +24,7 @@ type Reader struct { namedPatterns []string CustomPatterns string CustomPatternFiles []string + TZone string } const sampleConfig = `## Files to parse. @@ -38,7 +39,40 @@ files = ["/var/log/apache/access.log"] ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md -data_format = ""` +data_format = "" + +## Parse logstash-style "grok" patterns: +## Telegraf built-in parsing patterns: https://goo.gl/dkay10 +[inputs.logparser.grok] + ## This is a list of patterns to check the given log file(s) for. + ## Note that adding patterns here increases processing time. The most + ## efficient configuration is to have one pattern per logparser. + ## Other common built-in patterns are: + ## %{COMMON_LOG_FORMAT} (plain apache & nginx access logs) + ## %{COMBINED_LOG_FORMAT} (access logs + referrer & agent) + patterns = ["%{COMBINED_LOG_FORMAT}"] + + ## Name of the outputted measurement name. + measurement = "apache_access_log" + + ## Full path(s) to custom pattern files. + custom_pattern_files = [] + + ## Custom patterns can also be defined here. Put one pattern per line. + custom_patterns = ''' + ''' + + ## Timezone allows you to provide an override for timestamps that + ## don't already include an offset + ## e.g. 04/06/2016 12:41:45 data one two 5.43µs + ## + ## Default: "" which renders UTC + ## Options are as follows: + ## 1. Local -- interpret based on machine localtime + ## 2. "Canada/Eastern" -- Unix TZ values like those found in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + ## 3. UTC -- or blank/unspecified, will return timestamp in UTC + timezone = "Canada/Eastern" +` // SampleConfig returns the default configuration of the Input func (r *Reader) SampleConfig() string { @@ -64,6 +98,10 @@ func (r *Reader) Gather(acc telegraf.Accumulator) error { return nil } +func (r *Reader) SetParser(p parsers.Parser) { + r.Parser = p +} + func (r *Reader) compileParser() { if r.DataFormat == "" { log.Printf("E! No data_format specified") @@ -78,6 +116,7 @@ func (r *Reader) compileParser() { NamedPatterns: r.namedPatterns, CustomPatterns: r.CustomPatterns, CustomPatternFiles: r.CustomPatternFiles, + TimeZone: r.TZone, } nParser, err := parsers.NewParser(&r.ParserConfig) if err != nil { diff --git a/plugins/parsers/registry.go b/plugins/parsers/registry.go index e15632b8e..b657cf83f 100644 --- a/plugins/parsers/registry.go +++ b/plugins/parsers/registry.go @@ -94,6 +94,7 @@ type Config struct { NamedPatterns []string CustomPatterns string CustomPatternFiles []string + TimeZone string } // NewParser returns a Parser interface based on the given config. @@ -133,7 +134,8 @@ func NewParser(config *Config) (Parser, error) { config.Patterns, config.NamedPatterns, config.CustomPatterns, - config.CustomPatternFiles) + config.CustomPatternFiles, + config.TimeZone) default: err = fmt.Errorf("Invalid data format: %s", config.DataFormat) } @@ -144,13 +146,14 @@ func NewGrokParser(metricName string, patterns []string, nPatterns []string, cPatterns string, - cPatternFiles []string) (Parser, error) { + cPatternFiles []string, tZone string) (Parser, error) { parser := grok.Parser{ Measurement: metricName, Patterns: patterns, NamedPatterns: nPatterns, CustomPatterns: cPatterns, CustomPatternFiles: cPatternFiles, + Timezone: tZone, } parser.Compile()