Support checking configuration and exiting

If desired, go through all the motions of setting up the exporter, but
then exit. This is not very elegant, as we actually open the ports,
which may not be what you want to do in a pipeline, but it is the
quickest way to implement this.

Fixes #263.

Signed-off-by: Matthias Rampke <matthias@prometheus.io>
This commit is contained in:
Matthias Rampke 2020-05-29 07:59:58 +00:00
parent 3b3ff3c473
commit c8b8ddc952
No known key found for this signature in database
GPG key ID: F9AFF7F67ACE10BA
2 changed files with 40 additions and 21 deletions

View file

@ -81,42 +81,56 @@ NOTE: Version 0.7.0 switched to the [kingpin](https://github.com/alecthomas/king
* flag processing stops at the first `--` * flag processing stops at the first `--`
``` ```
$ go build
$ ./statsd_exporter --help
usage: statsd_exporter [<flags>] usage: statsd_exporter [<flags>]
Flags: Flags:
-h, --help Show context-sensitive help (also try --help-long and --help-man). -h, --help Show context-sensitive help (also try
--help-long and --help-man).
--web.listen-address=":9102" --web.listen-address=":9102"
The address on which to expose the web interface and generated Prometheus metrics. The address on which to expose the web interface
and generated Prometheus metrics.
--web.telemetry-path="/metrics" --web.telemetry-path="/metrics"
Path under which to expose metrics. Path under which to expose metrics.
--statsd.listen-udp=":9125" --statsd.listen-udp=":9125"
The UDP address on which to receive statsd metric lines. "" disables it. The UDP address on which to receive statsd
metric lines. "" disables it.
--statsd.listen-tcp=":9125" --statsd.listen-tcp=":9125"
The TCP address on which to receive statsd metric lines. "" disables it. The TCP address on which to receive statsd
metric lines. "" disables it.
--statsd.listen-unixgram="" --statsd.listen-unixgram=""
The Unixgram socket path to receive statsd metric lines in datagram. "" disables it. The Unixgram socket path to receive statsd
metric lines in datagram. "" disables it.
--statsd.unixsocket-mode="755" --statsd.unixsocket-mode="755"
The permission mode of the unix socket. The permission mode of the unix socket.
--statsd.mapping-config=STATSD.MAPPING-CONFIG --statsd.mapping-config=STATSD.MAPPING-CONFIG
Metric mapping configuration file name. Metric mapping configuration file name.
--statsd.read-buffer=STATSD.READ-BUFFER --statsd.read-buffer=STATSD.READ-BUFFER
Size (in bytes) of the operating system's transmit read buffer associated with the UDP or Unixgram connection. Please make sure the kernel parameters net.core.rmem_max is set to Size (in bytes) of the operating system's
a value greater than the value specified. transmit read buffer associated with the UDP or
--statsd.cache-size=1000 Maximum size of your metric mapping cache. Relies on least recently used replacement policy if max size is reached. Unixgram connection. Please make sure the kernel
parameters net.core.rmem_max is set to a value
greater than the value specified.
--statsd.cache-size=1000 Maximum size of your metric mapping cache.
Relies on least recently used replacement policy
if max size is reached.
--statsd.cache-type=lru Metric mapping cache type. Valid options are
"lru" and "random"
--statsd.event-queue-size=10000 --statsd.event-queue-size=10000
Size of internal queue for processing events Size of internal queue for processing events
--statsd.event-flush-threshold=1000 --statsd.event-flush-threshold=1000
Number of events to hold in queue before flushing Number of events to hold in queue before
flushing
--statsd.event-flush-interval=200ms --statsd.event-flush-interval=200ms
Number of events to hold in queue before flushing Number of events to hold in queue before
--debug.dump-fsm="" The path to dump internal FSM generated for glob matching as Dot file. flushing
--log.level="info" Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal] --debug.dump-fsm="" The path to dump internal FSM generated for glob
--log.format="logger:stderr" matching as Dot file.
Set the log target and format. Example: "logger:syslog?appname=bob& local=7" or "logger:stdout?json=true" --check-config Check configuration and exit.
--log.level=info Only log messages with the given severity or
above. One of: [debug, info, warn, error]
--log.format=logfmt Output format of log messages. One of: [logfmt,
json]
--version Show application version. --version Show application version.
``` ```
## Tests ## Tests
@ -207,8 +221,8 @@ mappings:
provider: "$1" provider: "$1"
``` ```
Be aware about yaml escape rules as a mapping like the following one will not work. Be aware about yaml escape rules as a mapping like the following one will not work.
```yaml ```yaml
mappings: mappings:
- match: "test\.(\w+)\.(\w+)\.counter" - match: "test\.(\w+)\.(\w+)\.counter"
match_type: regex match_type: regex

View file

@ -267,6 +267,7 @@ func main() {
eventFlushThreshold = kingpin.Flag("statsd.event-flush-threshold", "Number of events to hold in queue before flushing").Default("1000").Int() eventFlushThreshold = kingpin.Flag("statsd.event-flush-threshold", "Number of events to hold in queue before flushing").Default("1000").Int()
eventFlushInterval = kingpin.Flag("statsd.event-flush-interval", "Number of events to hold in queue before flushing").Default("200ms").Duration() eventFlushInterval = kingpin.Flag("statsd.event-flush-interval", "Number of events to hold in queue before flushing").Default("200ms").Duration()
dumpFSMPath = kingpin.Flag("debug.dump-fsm", "The path to dump internal FSM generated for glob matching as Dot file.").Default("").String() dumpFSMPath = kingpin.Flag("debug.dump-fsm", "The path to dump internal FSM generated for glob matching as Dot file.").Default("").String()
checkConfig = kingpin.Flag("check-config", "Check configuration and exit.").Default("false").Bool()
) )
promlogConfig := &promlog.Config{} promlogConfig := &promlog.Config{}
@ -440,13 +441,17 @@ func main() {
mapper.InitCache(*cacheSize, cacheOption) mapper.InitCache(*cacheSize, cacheOption)
} }
go configReloader(*mappingConfig, mapper, *cacheSize, logger, cacheOption)
exporter := exporter.NewExporter(mapper, logger, eventsActions, eventsUnmapped, errorEventStats, eventStats, conflictingEventStats, metricsCount) exporter := exporter.NewExporter(mapper, logger, eventsActions, eventsUnmapped, errorEventStats, eventStats, conflictingEventStats, metricsCount)
if *checkConfig {
level.Info(logger).Log("msg", "Configuration check successful, exiting")
return
}
signals := make(chan os.Signal, 1) signals := make(chan os.Signal, 1)
signal.Notify(signals, os.Interrupt, syscall.SIGTERM) signal.Notify(signals, os.Interrupt, syscall.SIGTERM)
go configReloader(*mappingConfig, mapper, *cacheSize, logger, cacheOption)
go exporter.Listen(events) go exporter.Listen(events)
<-signals <-signals