cc-metric-collector/sinks
Thomas Gruber 6ff6cb7219
Change CCMetric's internal data structure (#22)
* package ccmetric rewrite

* Create deep copy in New() to avoid access conflicts

* Renamed TagMap() -> Tags(), MetaMap() -> Meta

Co-authored-by: Holger Obermaier <40787752+ho-ob@users.noreply.github.com>
2022-02-01 14:54:34 +01:00
..
gangliaSink.go Change CCMetric's internal data structure (#22) 2022-02-01 14:54:34 +01:00
httpSink.go Modularize the whole thing (#16) 2022-01-25 15:37:43 +01:00
influxSink.go Change CCMetric's internal data structure (#22) 2022-02-01 14:54:34 +01:00
metricSink.go Modularize the whole thing (#16) 2022-01-25 15:37:43 +01:00
natsSink.go Modularize the whole thing (#16) 2022-01-25 15:37:43 +01:00
README.md Modularize the whole thing (#16) 2022-01-25 15:37:43 +01:00
sinkManager.go Add sink to add metrics to Ganglia through gmetric (#15) 2022-01-30 15:21:24 +01:00
stdoutSink.go Modularize the whole thing (#16) 2022-01-25 15:37:43 +01:00

CCMetric sinks

This folder contains the SinkManager and sink implementations for the cc-metric-collector.

Configuration

The configuration file for the sinks is a list of configurations. The type field in each specifies which sink to initialize.

[
  {
    "type" : "stdout",
    "meta_as_tags" : false
  },
  {
    "type" : "http",
    "host" : "localhost",
    "port" : "4123",
    "database" : "ccmetric",
    "password" : "<jwt token>"
  }
]

This example initializes two sinks, the stdout sink printing all metrics to the STDOUT and the http sink with the given host, port, database and password.

If meta_as_tags is set, all meta information attached to CCMetric are printed out as tags.

Type stdout

{
  "type" : "stdout",
  "meta_as_tags" : <true|false>
}

The stdout sink dumps all metrics to the STDOUT.

Type http

{
  "type" : "http",
  "host" : "<hostname>",
  "port" : "<portnumber>",
  "database" : "<database name>",
  "password" : "<jwt token>",
  "meta_as_tags" : <true|false>
}

The sink uses POST requests to send metrics to http://<host>:<port>/<database> using the JWT token as a JWT in the 'Authorization' header.

Type nats

{
  "type" : "nats",
  "host" : "<hostname>",
  "port" : "<portnumber>",
  "user" : "<username>",
  "password" : "<password>",
  "database" : "<database name>"
  "meta_as_tags" : <true|false>
}

This sink publishes the CCMetric in a NATS environment using host, port, user and password for connecting. The metrics are published using the topic database.

Type influxdb

{
  "type" : "influxdb",
  "host" : "<hostname>",
  "port" : "<portnumber>",
  "user" : "<username>",
  "password" : "<password or API key>",
  "database" : "<database name>"
  "organization": "<InfluxDB v2 organization>",
  "ssl" : <true|false>,
  "meta_as_tags" : <true|false>
}

This sink submits the CCMetrics to an InfluxDB time-series database. It uses host, port and ssl for connecting. For authentification, it uses either user:password if user is set and only password as API key. The organization and database are used for writing to the correct database.

Contributing own sinks

A sink contains three functions and is derived from the type Sink:

  • Init(config SinkConfig) error
  • Write(point CCMetric) error
  • Flush() error
  • Close()

The data structures should be set up in Init() like opening a file or server connection. The Write() function 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 sinkManager.go. There is a list of sinks called AvailableSinks which is a map (sink_type_string -> pointer to sink interface). Add a new entry with a descriptive name and the new sink.