Skip to content
This repository has been archived by the owner on Oct 18, 2024. It is now read-only.

signalfx/collectd-consul

Repository files navigation

ℹ️  SignalFx was acquired by Splunk in October 2019. See Splunk SignalFx for more information.

⚠️ This plugin is deprecated. Please use the statsd receiver or the prometheus receiver to collect Consul metrics instead. Please consult the Hashicorp documentation for more information. ⚠️

collectd Consul Plugin

A consul collectd plugin which users can use to send metrics from consul agent to SignalFx.

Installation

Checkout this repository somewhere on your system accessible by collectd. The suggested location is /usr/share/collectd/ Install the Python requirements with sudo pip install -r requirements.txt Configure the plugin (see below) Restart collectd

Requirements

  • collectd 4.9 or later (for the Python plugin)
  • Python 2.6 or later
  • Consul 0.7.0 or later

Configuration

Consul provides various runtime metrics about the performance of different libraries and subsystems. One way to access this data is to configure Consul to stream it to our plugin. Consul version 0.9.1 and above makes these metrics available at the API endpoint /agent/metrics.

If running Consul version below 0.9.1, configure the Consul agents that are to be monitored to send telemetry by adding the below configuration to Consul agents configuration file.

{"telemetry":
  {"statsd_address": "host:port"}
}

The plugin will start a UDP server listening at above host and port.

Next configure the collectd-consul plugin by using the below given example configuration file as a guide, provide values for the configuration options listed in the table that make sense for your environment.

Configuration Option Description Default Value
ApiHost IP address or DNS to which the Consul HTTP/HTTPS server binds to on the instance to be monitored localhost
ApiPort Port to which the Consul HTTP/HTTPS server binds to on the instance to be monitored 8500
ApiProtocol Possible values - http or https http
AclToken Consul ACL token. None
TelemetryServer Possible values - true or false
Set to true to enable collecting Consul's internal metrics via UDP from Consul's telemetry.
If set to false and Consul version is 0.9.1 and above, the metrics will be collected from API.
If set to false and Consul version is less than 0.9.1, Consul's internal metrics will not be available.
false
TelemetryHost IP address or DNS to which consul is configured to send telemetry UDP packets. Relevant if TelemetryServer set to true. localhost
TelemetryPort Port to which consul is configured to send telemetry UDP packets. Relevant if TelemetryServer set to true. 8125
EnhancedMetrics Possible values - true or false
Set to true to enable collecting all metrics from Consul's runtime telemetry send via UDP or /agent/metrics endpoint.
false
ExcludeMetric Blocks metrics by prefix matching, if EnhancedMetrics is true. This can be used to exclude metrics sent from /agent/metrics endpoint or from Consul's runtime telemetry send via UDP. None
IncludeMetric Allows metrics by prefix matching, if EnhancedMetrics is false. This can be used to include metrics sent from /agent/metrics endpoint or from Consul's runtime telemetry send via UDP. None
SfxToken SignalFx org access token. If added to the config, an event is sent to SignalFx on leader transition and can be viewed on the Consul dashboard. None
Dimension Add single custom global dimension to your metrics, formatted as "key=value" None
Dimensions Add multiple global dimensions, formatted as "key1=value1,key2=value2,..." None
CaCertificate If Consul server has https enabled for the API, provide the path to the CA Certificate. None
ClientCertificate If client-side authentication is enabled, provide the path to the certificate file. None
ClientKey If client-side authentication is enabled, provide the path to the key file. None
Debug Possible values - true or false
false

Note that multiple Consul instances can be configured in the same file. If using Consul version 0.9.1 and above, it is recommended to not enable the TelemetryServer and let the plugin collect metrics from API for better performance.

LoadPlugin python

<Plugin python>
  ModulePath "/usr/share/collectd/collectd-consul"

  Import consul_plugin
  <Module consul_plugin>
    ApiHost "server-1"
    ApiPort 8500
    ApiProtocol "http"
    AclToken "token"
    SfxToken "SignalFX_token"
    TelemetryServer true
    TelemetryHost "17.2.3.4"
    TelemetryPort 8125
    EnhancedMetrics true
    ExcludeMetric "consul.consul.http"
    ExcludeMetric "consul.memberlist"
    Dimension "foo=bar"
    Debug true
  </Module>
  <Module consul_plugin>
    ApiHost "server-2"
    ApiPort 8500
    ApiProtocol "http"
    IncludeMetric "consul.fsm"
    Dimensions "foo=bar,bar=baz"
    TelemetryServer false
  </Module>
</Plugin>

Example usage of the ExcludeMetric and IncludeMetric config option

With the above example configuration values, for the server-1 instance all metrics starting with the prefix consul.consul.http will be blocked. So metrics consul.consul.http.GET.v1.agent.self and consul.consul.http.POST.v1.kv.KEY will be blocked. Similarly, for the server-2 instance all metrics starting with the prefix consul.fsm will be allowed.

License

Copyright 2019 SignalFx

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.