From 24bf9590eea1abdcb34ec95c6b21acce481d8d04 Mon Sep 17 00:00:00 2001 From: Thomas Roehl Date: Fri, 26 Nov 2021 14:10:22 +0100 Subject: [PATCH] Update sink README.md --- sinks/README.md | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/sinks/README.md b/sinks/README.md index 43dd802..d77d2a9 100644 --- a/sinks/README.md +++ b/sinks/README.md @@ -16,8 +16,50 @@ Nothing to do, all sinks are pure Go code A sink contains three functions and is derived from the type `Sink` (in `metricSink.go`): * `Init(config SinkConfig) error` * `Write(measurement string, tags map[string]string, fields map[string]interface{}, t time.Time) error` +* `Flush() error` * `Close()` -The data structures should be set up in `Init()` like opening a file or server connection. The `Write()` function takes a measurement, tags, fields and a timestamp and writes/sends the data. The `Close()` function should tear down anything created in `Init()`. +The data structures should be set up in `Init()` like opening a file or server connection. The `Write()` function takes a measurement, tags, fields and a timestamp and writes/sends the data. For non-blocking sinks, the `Flush()` method tells the sink to drain its internal buffers. The `Close()` function should tear down anything created in `Init()`. -Finally, the sink needs to be registered in the `metric-collector.go`. There is a list of sinks called `Sinks` which is a map (string -> pointer to sink). Add a new entry with a descriptive name and the new sink. +Finally, the sink needs to be registered in the `metric-collector.go`. There is a list of sinks called `Sinks` which is a map (sink_type_string -> pointer to sink). Add a new entry with a descriptive name and the new sink. Afterwards, it can be configured in the main configuration file at `type`: + +```json +{ + "sink": { + "user": "testuser", + "password": "testpass", + "host": "127.0.0.1", + "port": "9090", + "database": "testdb", + "organization": "testorg", + "ssl": false + "type": "stdout" + } +} +``` +# Sink configuration + +## `stdoutSink` +When configuring `type = stdout`, all metrics are printed to stdout. No further configuration is required or touched, so you can leave your other-sink-config in there and just change the `type` for debugging purposes + +## `influxSink` +The InfluxDB sink uses blocking write operations to write to an InfluxDB database using the v2 API. It uses the following configuration options: +* `host`: Hostname of the database instance +* `port`: Portnumber (as string) of the database +* `database`: Name of the database, called 'bucket' in InfluxDB v2 +* `organization`: The InfluxDB v2 API uses organizations to separate database instances running on the same host +* `ssl`: Boolean to activate SSL/TLS +* `user`: Although the v2 API uses API keys instead of username and password, this field can be used if the sink should authentificate with `username:password`. If you want to use an API key, leave this field empty. +* `password`: API key for the InfluxDB v2 API or password if `user` is set + +## `natsSink` +* `host`: Hostname of the NATS server +* `port`: Portnumber (as string) of the NATS server +* `user`: Username for authentification in the NATS transport system +* `password`: Password for authentification in the NATS transport system + +## `httpSink` +* `host`: Hostname of the HTTP server +* `port`: Portnumber (as string) of the HTTP server +* `database`: Endpoint to write to. HTTP POST requests are performed on `http://:/` +* `password`: JSON Web token used for authentification