Fixing consul with multiple health checks per service (#1994)

* plugins/input/consul: moved check_id from regular fields to tags.

When service has more than one check sending data for both would overwrite each other
resulting only in one check being written (the last one). Adding check_id as a tag
ensures we will get info for all unique checks per service.

* plugins/inputs/consul: updated tests
This commit is contained in:
Łukasz Harasimowicz 2016-12-20 14:03:31 +01:00 committed by Cameron Sparr
parent ca31aaad85
commit 68b351ca05
3 changed files with 5 additions and 5 deletions

View File

@ -29,9 +29,9 @@ to query the data. It will not report the [telemetry](https://www.consul.io/docs
Tags: Tags:
- node: on which node check/service is registered on - node: on which node check/service is registered on
- service_name: name of the service (this is the service name not the service ID) - service_name: name of the service (this is the service name not the service ID)
- check_id
Fields: Fields:
- check_id
- check_name - check_name
- service_id - service_id
- status - status
@ -41,6 +41,6 @@ Fields:
``` ```
$ telegraf --config ./telegraf.conf -input-filter consul -test $ telegraf --config ./telegraf.conf -input-filter consul -test
* Plugin: consul, Collection 1 * Plugin: consul, Collection 1
> consul_health_checks,host=wolfpit,node=consul-server-node check_id="serfHealth",check_name="Serf Health Status",service_id="",status="passing" 1464698464486439902 > consul_health_checks,host=wolfpit,node=consul-server-node,check_id="serfHealth" check_name="Serf Health Status",service_id="",status="passing" 1464698464486439902
> consul_health_checks,host=wolfpit,node=consul-server-node,service_name=www.example.com check_id="service:www-example-com.test01",check_name="Service 'www.example.com' check",service_id="www-example-com.test01",status="critical" 1464698464486519036 > consul_health_checks,host=wolfpit,node=consul-server-node,service_name=www.example.com,check_id="service:www-example-com.test01" check_name="Service 'www.example.com' check",service_id="www-example-com.test01",status="critical" 1464698464486519036
``` ```

View File

@ -95,13 +95,13 @@ func (c *Consul) GatherHealthCheck(acc telegraf.Accumulator, checks []*api.Healt
record := make(map[string]interface{}) record := make(map[string]interface{})
tags := make(map[string]string) tags := make(map[string]string)
record["check_id"] = check.CheckID
record["check_name"] = check.Name record["check_name"] = check.Name
record["service_id"] = check.ServiceID record["service_id"] = check.ServiceID
record["status"] = check.Status record["status"] = check.Status
tags["node"] = check.Node tags["node"] = check.Node
tags["service_name"] = check.ServiceName tags["service_name"] = check.ServiceName
tags["check_id"] = check.CheckID
acc.AddFields("consul_health_checks", record, tags) acc.AddFields("consul_health_checks", record, tags)
} }

View File

@ -22,7 +22,6 @@ var sampleChecks = []*api.HealthCheck{
func TestGatherHealtCheck(t *testing.T) { func TestGatherHealtCheck(t *testing.T) {
expectedFields := map[string]interface{}{ expectedFields := map[string]interface{}{
"check_id": "foo.health123",
"check_name": "foo.health", "check_name": "foo.health",
"status": "passing", "status": "passing",
"service_id": "foo.123", "service_id": "foo.123",
@ -31,6 +30,7 @@ func TestGatherHealtCheck(t *testing.T) {
expectedTags := map[string]string{ expectedTags := map[string]string{
"node": "localhost", "node": "localhost",
"service_name": "foo", "service_name": "foo",
"check_id": "foo.health123",
} }
var acc testutil.Accumulator var acc testutil.Accumulator