0.3.0: update README and documentation

This commit is contained in:
Cameron Sparr 2016-01-07 15:21:10 -07:00
parent 9c5db1057d
commit 7499c1f969
5 changed files with 161 additions and 139 deletions

View File

@ -11,8 +11,11 @@ directory.
- **breaking change** `jolokia` plugin: must use global tag/drop/pass parameters - **breaking change** `jolokia` plugin: must use global tag/drop/pass parameters
for configuration. for configuration.
- **breaking change** `twemproxy` plugin: `prefix` option removed. - **breaking change** `twemproxy` plugin: `prefix` option removed.
- **breaking change** `procstat` cpu measurements are now prepended with `cpu_time_` instead of - **breaking change** `procstat` cpu measurements are now prepended with `cpu_time_`
only `cpu_` instead of only `cpu_`
- **breaking change** some command-line flags have been renamed to separate words.
`-configdirectory` -> `-config-directory`, `-filter` -> `-input-filter`,
`-outputfilter` -> `-output-filter`
- The prometheus plugin schema has not been changed (measurements have not been - The prometheus plugin schema has not been changed (measurements have not been
aggregated). aggregated).

View File

@ -1,6 +1,6 @@
# Telegraf Configuration # Telegraf Configuration
## Generating a config file ## Generating a Configuration File
A default Telegraf config file can be generated using the `-sample-config` flag, A default Telegraf config file can be generated using the `-sample-config` flag,
like this: `telegraf -sample-config` like this: `telegraf -sample-config`
@ -9,7 +9,20 @@ To generate a file with specific inputs and outputs, you can use the
`-input-filter` and `-output-filter` flags, like this: `-input-filter` and `-output-filter` flags, like this:
`telegraf -sample-config -input-filter cpu:mem:net:swap -output-filter influxdb:kafka` `telegraf -sample-config -input-filter cpu:mem:net:swap -output-filter influxdb:kafka`
## Plugin Configuration ## Telegraf Agent Configuration
Telegraf has a few options you can configure under the `agent` section of the
config.
* **hostname**: The hostname is passed as a tag. By default this will be
the value returned by `hostname` on the machine running Telegraf.
You can override that value here.
* **interval**: How often to gather metrics. Uses a simple number +
unit parser, e.g. "10s" for 10 seconds or "5m" for 5 minutes.
* **debug**: Set to true to gather and send metrics to STDOUT as well as
InfluxDB.
## Input Configuration
There are some configuration options that are configurable per plugin: There are some configuration options that are configurable per plugin:
@ -22,7 +35,7 @@ There are some configuration options that are configurable per plugin:
global interval, but if one particular plugin should be run less or more often, global interval, but if one particular plugin should be run less or more often,
you can configure that here. you can configure that here.
### Plugin Filters ### Input Filters
There are also filters that can be configured per plugin: There are also filters that can be configured per plugin:
@ -36,7 +49,7 @@ match against the tag name, and if it matches the measurement is emitted.
* **tagdrop**: The inverse of tagpass. If a tag matches, the measurement is not * **tagdrop**: The inverse of tagpass. If a tag matches, the measurement is not
emitted. This is tested on measurements that have passed the tagpass test. emitted. This is tested on measurements that have passed the tagpass test.
### Plugin Configuration Examples ### Input Configuration Examples
This is a full working config that will output CPU data to an InfluxDB instance This is a full working config that will output CPU data to an InfluxDB instance
at 192.168.59.103:8086, tagging measurements with dc="denver-1". It will output at 192.168.59.103:8086, tagging measurements with dc="denver-1". It will output
@ -57,8 +70,8 @@ fields which begin with `time_`.
database = "telegraf" # required. database = "telegraf" # required.
precision = "s" precision = "s"
# PLUGINS # INPUTS
[plugins] [inputs]
[[inputs.cpu]] [[inputs.cpu]]
percpu = true percpu = true
totalcpu = false totalcpu = false
@ -66,10 +79,10 @@ fields which begin with `time_`.
drop = ["time_*"] drop = ["time_*"]
``` ```
### Plugin Config: tagpass and tagdrop ### Input Config: tagpass and tagdrop
```toml ```toml
[plugins] [inputs]
[[inputs.cpu]] [[inputs.cpu]]
percpu = true percpu = true
totalcpu = false totalcpu = false
@ -88,7 +101,7 @@ fields which begin with `time_`.
path = [ "/opt", "/home*" ] path = [ "/opt", "/home*" ]
``` ```
### Plugin Config: pass and drop ### Input Config: pass and drop
```toml ```toml
# Drop all metrics for guest & steal CPU usage # Drop all metrics for guest & steal CPU usage
@ -102,7 +115,7 @@ fields which begin with `time_`.
pass = ["inodes*"] pass = ["inodes*"]
``` ```
### Plugin config: prefix, suffix, and override ### Input config: prefix, suffix, and override
This plugin will emit measurements with the name `cpu_total` This plugin will emit measurements with the name `cpu_total`
@ -122,7 +135,7 @@ This will emit measurements with the name `foobar`
totalcpu = true totalcpu = true
``` ```
### Plugin config: tags ### Input config: tags
This plugin will emit measurements with two additional tags: `tag1=foo` and This plugin will emit measurements with two additional tags: `tag1=foo` and
`tag2=bar` `tag2=bar`
@ -136,10 +149,12 @@ This plugin will emit measurements with two additional tags: `tag1=foo` and
tag2 = "bar" tag2 = "bar"
``` ```
### Multiple plugins of the same type ### Multiple inputs of the same type
Additional plugins (or outputs) of the same type can be specified, Additional inputs (or outputs) of the same type can be specified,
just define more instances in the config file: just define more instances in the config file. It is highly recommended that
you utilize `name_override`, `name_prefix`, or `name_suffix` config options
to avoid measurement collisions:
```toml ```toml
[[inputs.cpu]] [[inputs.cpu]]
@ -149,6 +164,7 @@ just define more instances in the config file:
[[inputs.cpu]] [[inputs.cpu]]
percpu = true percpu = true
totalcpu = false totalcpu = false
name_override = "percpu_usage"
drop = ["cpu_time*"] drop = ["cpu_time*"]
``` ```
@ -158,8 +174,8 @@ Telegraf also supports specifying multiple output sinks to send data to,
configuring each output sink is different, but examples can be configuring each output sink is different, but examples can be
found by running `telegraf -sample-config`. found by running `telegraf -sample-config`.
Outputs also support the same configurable options as plugins Outputs also support the same configurable options as inputs
(pass, drop, tagpass, tagdrop), added in 0.2.4 (pass, drop, tagpass, tagdrop)
```toml ```toml
[[outputs.influxdb]] [[outputs.influxdb]]

View File

@ -3,7 +3,7 @@
Before we can merge a pull request, you will need to sign the CLA, Before we can merge a pull request, you will need to sign the CLA,
which can be found [on our website](http://influxdb.com/community/cla.html) which can be found [on our website](http://influxdb.com/community/cla.html)
## Plugins ## Input Plugins
This section is for developers who want to create new collection inputs. This section is for developers who want to create new collection inputs.
Telegraf is entirely plugin driven. This interface allows for operators to Telegraf is entirely plugin driven. This interface allows for operators to
@ -13,23 +13,21 @@ to create new ways of generating metrics.
Plugin authorship is kept as simple as possible to promote people to develop Plugin authorship is kept as simple as possible to promote people to develop
and submit new inputs. and submit new inputs.
### Plugin Guidelines ### Input Plugin Guidelines
* A plugin must conform to the `inputs.Input` interface. * A plugin must conform to the `inputs.Input` interface.
* Each generated metric automatically has the name of the plugin that generated * Input Plugins should call `inputs.Add` in their `init` function to register themselves.
it prepended. This is to keep plugins honest.
* Plugins should call `inputs.Add` in their `init` function to register themselves.
See below for a quick example. See below for a quick example.
* To be available within Telegraf itself, plugins must add themselves to the * Input Plugins must be added to the
`github.com/influxdb/telegraf/plugins/inputs/all/all.go` file. `github.com/influxdb/telegraf/plugins/inputs/all/all.go` file.
* The `SampleConfig` function should return valid toml that describes how the * The `SampleConfig` function should return valid toml that describes how the
plugin can be configured. This is include in `telegraf -sample-config`. plugin can be configured. This is include in `telegraf -sample-config`.
* The `Description` function should say in one line what this plugin does. * The `Description` function should say in one line what this plugin does.
### Plugin interface ### Input interface
```go ```go
type Plugin interface { type Input interface {
SampleConfig() string SampleConfig() string
Description() string Description() string
Gather(Accumulator) error Gather(Accumulator) error
@ -52,45 +50,25 @@ type Accumulator interface {
The way that a plugin emits metrics is by interacting with the Accumulator. The way that a plugin emits metrics is by interacting with the Accumulator.
The `Add` function takes 3 arguments: The `Add` function takes 3 arguments:
* **measurement**: A string description of the metric. For instance `bytes_read` or `faults`. * **measurement**: A string description of the metric. For instance `bytes_read` or `
faults`.
* **value**: A value for the metric. This accepts 5 different types of value: * **value**: A value for the metric. This accepts 5 different types of value:
* **int**: The most common type. All int types are accepted but favor using `int64` * **int**: The most common type. All int types are accepted but favor using `int64`
Useful for counters, etc. Useful for counters, etc.
* **float**: Favor `float64`, useful for gauges, percentages, etc. * **float**: Favor `float64`, useful for gauges, percentages, etc.
* **bool**: `true` or `false`, useful to indicate the presence of a state. `light_on`, etc. * **bool**: `true` or `false`, useful to indicate the presence of a state. `light_on`,
* **string**: Typically used to indicate a message, or some kind of freeform information. etc.
* **time.Time**: Useful for indicating when a state last occurred, for instance `light_on_since`. * **string**: Typically used to indicate a message, or some kind of freeform
information.
* **time.Time**: Useful for indicating when a state last occurred, for instance `
light_on_since`.
* **tags**: This is a map of strings to strings to describe the where or who * **tags**: This is a map of strings to strings to describe the where or who
about the metric. For instance, the `net` plugin adds a tag named `"interface"` about the metric. For instance, the `net` plugin adds a tag named `"interface"`
set to the name of the network interface, like `"eth0"`. set to the name of the network interface, like `"eth0"`.
The `AddFieldsWithTime` allows multiple values for a point to be passed. The values
used are the same type profile as **value** above. The **timestamp** argument
allows a point to be registered as having occurred at an arbitrary time.
Let's say you've written a plugin that emits metrics about processes on the current host. Let's say you've written a plugin that emits metrics about processes on the current host.
```go ### Input Plugin Example
type Process struct {
CPUTime float64
MemoryBytes int64
PID int
}
func Gather(acc inputs.Accumulator) error {
for _, process := range system.Processes() {
tags := map[string]string {
"pid": fmt.Sprintf("%d", process.Pid),
}
acc.Add("cpu", process.CPUTime, tags, time.Now())
acc.Add("memory", process.MemoryBytes, tags, time.Now())
}
}
```
### Plugin Example
```go ```go
package simple package simple
@ -126,15 +104,15 @@ func init() {
} }
``` ```
## Service Plugins ## Service Input Plugins
This section is for developers who want to create new "service" collection This section is for developers who want to create new "service" collection
inputs. A service plugin differs from a regular plugin in that it operates inputs. A service plugin differs from a regular plugin in that it operates
a background service while Telegraf is running. One example would be the `statsd` a background service while Telegraf is running. One example would be the `statsd`
plugin, which operates a statsd server. plugin, which operates a statsd server.
Service Plugins are substantially more complicated than a regular plugin, as they Service Input Plugins are substantially more complicated than a regular plugin, as they
will require threads and locks to verify data integrity. Service Plugins should will require threads and locks to verify data integrity. Service Input Plugins should
be avoided unless there is no way to create their behavior with a regular plugin. be avoided unless there is no way to create their behavior with a regular plugin.
Their interface is quite similar to a regular plugin, with the addition of `Start()` Their interface is quite similar to a regular plugin, with the addition of `Start()`
@ -157,13 +135,13 @@ type ServicePlugin interface {
} }
``` ```
## Outputs ## Output Plugins
This section is for developers who want to create a new output sink. Outputs This section is for developers who want to create a new output sink. Outputs
are created in a similar manner as collection plugins, and their interface has are created in a similar manner as collection plugins, and their interface has
similar constructs. similar constructs.
### Output Guidelines ### Output Plugin Guidelines
* An output must conform to the `outputs.Output` interface. * An output must conform to the `outputs.Output` interface.
* Outputs should call `outputs.Add` in their `init` function to register themselves. * Outputs should call `outputs.Add` in their `init` function to register themselves.
@ -230,7 +208,7 @@ func init() {
``` ```
## Service Outputs ## Service Output Plugins
This section is for developers who want to create new "service" output. A This section is for developers who want to create new "service" output. A
service output differs from a regular output in that it operates a background service service output differs from a regular output in that it operates a background service
@ -243,7 +221,7 @@ and `Stop()` methods.
### Service Output Guidelines ### Service Output Guidelines
* Same as the `Output` guidelines, except that they must conform to the * Same as the `Output` guidelines, except that they must conform to the
`inputs.ServiceOutput` interface. `output.ServiceOutput` interface.
### Service Output interface ### Service Output interface

115
README.md
View File

@ -1,23 +1,35 @@
# Telegraf - A native agent for InfluxDB [![Circle CI](https://circleci.com/gh/influxdata/telegraf.svg?style=svg)](https://circleci.com/gh/influxdata/telegraf) # Telegraf [![Circle CI](https://circleci.com/gh/influxdata/telegraf.svg?style=svg)](https://circleci.com/gh/influxdata/telegraf)
Telegraf is an agent written in Go for collecting metrics from the system it's Telegraf is an agent written in Go for collecting metrics from the system it's
running on, or from other services, and writing them into InfluxDB. running on, or from other services, and writing them into InfluxDB or other
[outputs](https://github.com/influxdata/telegraf#supported-output-plugins).
Design goals are to have a minimal memory footprint with a plugin system so Design goals are to have a minimal memory footprint with a plugin system so
that developers in the community can easily add support for collecting metrics that developers in the community can easily add support for collecting metrics
from well known services (like Hadoop, Postgres, or Redis) and third party from well known services (like Hadoop, Postgres, or Redis) and third party
APIs (like Mailchimp, AWS CloudWatch, or Google Analytics). APIs (like Mailchimp, AWS CloudWatch, or Google Analytics).
We'll eagerly accept pull requests for new plugins and will manage the set of New input and output plugins are designed to be easy to contribute,
plugins that Telegraf supports. See the we'll eagerly accept pull
[contributing guide](CONTRIBUTING.md) for instructions on requests and will manage the set of plugins that Telegraf supports.
writing new inputs. See the [contributing guide](CONTRIBUTING.md) for instructions on writing
new plugins.
## Installation: ## Installation:
NOTE: Telegraf 0.3.x is **not** backwards-compatible with previous versions of
telegraf, both in the database layout and the configuration file. 0.2.x will
continue to be supported, see below for download links.
TODO: link to blog post about 0.3.x changes.
### Linux deb and rpm packages: ### Linux deb and rpm packages:
Latest: Latest:
* http://get.influxdb.org/telegraf/telegraf_0.3.0_amd64.deb
* http://get.influxdb.org/telegraf/telegraf-0.3.0-1.x86_64.rpm
0.2.x:
* http://get.influxdb.org/telegraf/telegraf_0.2.4_amd64.deb * http://get.influxdb.org/telegraf/telegraf_0.2.4_amd64.deb
* http://get.influxdb.org/telegraf/telegraf-0.2.4-1.x86_64.rpm * http://get.influxdb.org/telegraf/telegraf-0.2.4-1.x86_64.rpm
@ -33,6 +45,11 @@ controlled via `systemctl [action] telegraf`
### Linux binaries: ### Linux binaries:
Latest: Latest:
* http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.3.0.tar.gz
* http://get.influxdb.org/telegraf/telegraf_linux_386_0.3.0.tar.gz
* http://get.influxdb.org/telegraf/telegraf_linux_arm_0.3.0.tar.gz
0.2.x:
* http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.2.4.tar.gz * http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.2.4.tar.gz
* http://get.influxdb.org/telegraf/telegraf_linux_386_0.2.4.tar.gz * http://get.influxdb.org/telegraf/telegraf_linux_386_0.2.4.tar.gz
* http://get.influxdb.org/telegraf/telegraf_linux_arm_0.2.4.tar.gz * http://get.influxdb.org/telegraf/telegraf_linux_arm_0.2.4.tar.gz
@ -51,32 +68,6 @@ brew update
brew install telegraf brew install telegraf
``` ```
### Version 0.3.0 Beta
Version 0.3.0 will introduce many new breaking changes to Telegraf. For starters,
plugin measurements will be aggregated into fields. This means that there will no
longer be a `cpu_usage_idle` measurement, there will be a `cpu` measurement with
a `usage_idle` field.
There will also be config file changes, meaning that your 0.2.x Telegraf config
files will no longer work properly. It is recommended that you use the
`-sample-config` flag to generate a new config file to see what the changes are.
You can also read the
[0.3.0 configuration guide](https://github.com/influxdb/telegraf/blob/0.3.0/CONFIGURATION.md)
to see some of the new features and options available.
You can read more about the justifications for the aggregated measurements
[here](https://github.com/influxdb/telegraf/issues/152), and a more detailed
breakdown of the work [here](https://github.com/influxdb/telegraf/pull/437).
Once we're closer to a full release, there will be a detailed blog post
explaining all the changes.
* http://get.influxdb.org/telegraf/telegraf_0.3.0-beta2_amd64.deb
* http://get.influxdb.org/telegraf/telegraf-0.3.0_beta2-1.x86_64.rpm
* http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.3.0-beta2.tar.gz
* http://get.influxdb.org/telegraf/telegraf_linux_386_0.3.0-beta2.tar.gz
* http://get.influxdb.org/telegraf/telegraf_linux_arm_0.3.0-beta2.tar.gz
### From Source: ### From Source:
Telegraf manages dependencies via [gdm](https://github.com/sparrc/gdm), Telegraf manages dependencies via [gdm](https://github.com/sparrc/gdm),
@ -91,37 +82,49 @@ if you don't have it already. You also must build with golang version 1.4+.
### How to use it: ### How to use it:
* Run `telegraf -sample-config > telegraf.conf` to create an initial configuration. ```console
* Or run `telegraf -sample-config -input-filter cpu:mem -output-filter influxdb > telegraf.conf`. $ telegraf -help
to create a config file with only CPU and memory plugins defined, and InfluxDB Telegraf, The plugin-driven server agent for reporting metrics into InfluxDB
output defined.
* Edit the configuration to match your needs.
* Run `telegraf -config telegraf.conf -test` to output one full measurement
sample to STDOUT. NOTE: you may want to run as the telegraf user if you are using
the linux packages `sudo -u telegraf telegraf -config telegraf.conf -test`
* Run `telegraf -config telegraf.conf` to gather and send metrics to configured outputs.
* Run `telegraf -config telegraf.conf -input-filter system:swap`.
to run telegraf with only the system & swap plugins defined in the config.
## Telegraf Options Usage:
Telegraf has a few options you can configure under the `agent` section of the telegraf <flags>
config.
* **hostname**: The hostname is passed as a tag. By default this will be The flags are:
the value returned by `hostname` on the machine running Telegraf.
You can override that value here. -config <file> configuration file to load
* **interval**: How often to gather metrics. Uses a simple number + -test gather metrics once, print them to stdout, and exit
unit parser, e.g. "10s" for 10 seconds or "5m" for 5 minutes. -sample-config print out full sample configuration to stdout
* **debug**: Set to true to gather and send metrics to STDOUT as well as -config-directory directory containing additional *.conf files
InfluxDB. -input-filter filter the input plugins to enable, separator is :
-output-filter filter the output plugins to enable, separator is :
-usage print usage for a plugin, ie, 'telegraf -usage mysql'
-version print the version to stdout
Examples:
# generate a telegraf config file:
telegraf -sample-config > telegraf.conf
# generate config with only cpu input & influxdb output plugins defined
telegraf -sample-config -input-filter cpu -output-filter influxdb
# run a single telegraf collection, outputing metrics to stdout
telegraf -config telegraf.conf -test
# run telegraf with all plugins defined in config file
telegraf -config telegraf.conf
# run telegraf, enabling the cpu & memory input, and influxdb output plugins
telegraf -config telegraf.conf -input-filter cpu:mem -output-filter influxdb
```
## Configuration ## Configuration
See the [configuration guide](CONFIGURATION.md) for a rundown of the more advanced See the [configuration guide](CONFIGURATION.md) for a rundown of the more advanced
configuration options. configuration options.
## Supported Plugins ## Supported Input Plugins
**You can view usage instructions for each plugin by running** **You can view usage instructions for each plugin by running**
`telegraf -usage <pluginname>`. `telegraf -usage <pluginname>`.
@ -166,7 +169,7 @@ Telegraf currently has support for collecting metrics from:
* diskio * diskio
* swap * swap
## Supported Service Plugins ## Supported Input Service Plugins
Telegraf can collect metrics via the following services: Telegraf can collect metrics via the following services:
@ -176,7 +179,7 @@ Telegraf can collect metrics via the following services:
We'll be adding support for many more over the coming months. Read on if you We'll be adding support for many more over the coming months. Read on if you
want to add support for another service or third-party API. want to add support for another service or third-party API.
## Supported Outputs ## Supported Output Plugins
* influxdb * influxdb
* nsq * nsq

View File

@ -31,11 +31,18 @@ var fOutputFilters = flag.String("output-filter", "",
var fUsage = flag.String("usage", "", var fUsage = flag.String("usage", "",
"print usage for a plugin, ie, 'telegraf -usage mysql'") "print usage for a plugin, ie, 'telegraf -usage mysql'")
var fInputFiltersLegacy = flag.String("filter", "",
"filter the plugins to enable, separator is :")
var fOutputFiltersLegacy = flag.String("outputfilter", "",
"filter the outputs to enable, separator is :")
var fConfigDirectoryLegacy = flag.String("configdirectory", "",
"directory containing additional *.conf files")
// Telegraf version // Telegraf version
// -ldflags "-X main.Version=`git describe --always --tags`" // -ldflags "-X main.Version=`git describe --always --tags`"
var Version string var Version string
const usage = `Telegraf, The plugin-driven server agent for reporting metrics into InfluxDB const usage = `Telegraf, The plugin-driven server agent for collecting and reporting metrics.
Usage: Usage:
@ -57,16 +64,16 @@ Examples:
# generate a telegraf config file: # generate a telegraf config file:
telegraf -sample-config > telegraf.conf telegraf -sample-config > telegraf.conf
# generate a telegraf config file with only cpu input and influxdb output enabled # generate config with only cpu input & influxdb output plugins defined
telegraf -sample-config -input-filter cpu -output-filter influxdb telegraf -sample-config -input-filter cpu -output-filter influxdb
# run a single telegraf collection, outputting metrics to stdout # run a single telegraf collection, outputing metrics to stdout
telegraf -config telegraf.conf -test telegraf -config telegraf.conf -test
# run telegraf with all plugins defined in config file # run telegraf with all plugins defined in config file
telegraf -config telegraf.conf telegraf -config telegraf.conf
# run telegraf, enabling only the cpu and memory inputs and influxdb output # run telegraf, enabling the cpu & memory input, and influxdb output plugins
telegraf -config telegraf.conf -input-filter cpu:mem -output-filter influxdb telegraf -config telegraf.conf -input-filter cpu:mem -output-filter influxdb
` `
@ -79,12 +86,20 @@ func main() {
} }
var inputFilters []string var inputFilters []string
if *fInputFiltersLegacy != "" {
inputFilter := strings.TrimSpace(*fInputFiltersLegacy)
inputFilters = strings.Split(":"+inputFilter+":", ":")
}
if *fInputFilters != "" { if *fInputFilters != "" {
inputFilter := strings.TrimSpace(*fInputFilters) inputFilter := strings.TrimSpace(*fInputFilters)
inputFilters = strings.Split(":"+inputFilter+":", ":") inputFilters = strings.Split(":"+inputFilter+":", ":")
} }
var outputFilters []string var outputFilters []string
if *fOutputFiltersLegacy != "" {
outputFilter := strings.TrimSpace(*fOutputFiltersLegacy)
outputFilters = strings.Split(":"+outputFilter+":", ":")
}
if *fOutputFilters != "" { if *fOutputFilters != "" {
outputFilter := strings.TrimSpace(*fOutputFilters) outputFilter := strings.TrimSpace(*fOutputFilters)
outputFilters = strings.Split(":"+outputFilter+":", ":") outputFilters = strings.Split(":"+outputFilter+":", ":")
@ -129,6 +144,13 @@ func main() {
return return
} }
if *fConfigDirectoryLegacy != "" {
err = c.LoadDirectory(*fConfigDirectoryLegacy)
if err != nil {
log.Fatal(err)
}
}
if *fConfigDirectory != "" { if *fConfigDirectory != "" {
err = c.LoadDirectory(*fConfigDirectory) err = c.LoadDirectory(*fConfigDirectory)
if err != nil { if err != nil {