Enable telemetry for InfluxDB relay

Change-Id: If71d9b198c7396a4812f4b624a5e1709de63256a
diff --git a/README.rst b/README.rst
index ab729ac..a27364f 100644
--- a/README.rst
+++ b/README.rst
@@ -271,6 +271,11 @@
     influxdb:
       relay:
         enabled: true
+        telemetry:
+          enabled: true
+          bind:
+            address: 127.0.0.1
+            port: 9196
         listen:
           http_backend:
             type: http
diff --git a/influxdb/files/influxdb-relay.conf b/influxdb/files/influxdb-relay.conf
index 6d173a8..06fd210 100644
--- a/influxdb/files/influxdb-relay.conf
+++ b/influxdb/files/influxdb-relay.conf
@@ -2,6 +2,11 @@
 
 {%- if relay.get('enabled') %}
 
+{%- if relay.telemetry.get('enabled') %}
+[telemetry]
+bind-addr = "{{ relay.telemetry.bind.get('address', '') }}:{{ relay.telemetry.bind.port }}"
+{%- endif %}
+
 {%- for name, listen in relay.listen.iteritems()|sort %}
 
 {%- if listen.get('enabled', True) and listen.get('type', 'http') in ('http', 'udp') %}
@@ -9,7 +14,7 @@
 {%- set listen_type = listen.get('type', 'http') %}
 [[{{ listen_type }}]]
 name = "{{ name }}"
-bind-addr = "{{ listen.bind.get('address', '0.0.0.0') }}:{{ listen.bind.port }}"
+bind-addr = "{{ listen.bind.get('address', '') }}:{{ listen.bind.port }}"
 {%- if listen_type == 'http' and listen.default_retention_policy is defined %}
 default-retention-policy = "{{ listen.default_retention_policy }}"
 {%- endif %}
diff --git a/influxdb/map.jinja b/influxdb/map.jinja
index 88ba241..47a9c00 100644
--- a/influxdb/map.jinja
+++ b/influxdb/map.jinja
@@ -54,5 +54,6 @@
         'pkgs': ['influxdb-relay'],
         'service': 'influxdb-relay',
         'listen': {},
+        'telemetry': {},
     },
 }, merge=salt['pillar.get']('influxdb:relay')) %}
diff --git a/influxdb/meta/prometheus.yml b/influxdb/meta/prometheus.yml
index 54a8b13..ea66b51 100644
--- a/influxdb/meta/prometheus.yml
+++ b/influxdb/meta/prometheus.yml
@@ -1,7 +1,7 @@
 {%- if pillar.influxdb.server is defined %}
-{%- from "influxdb/map.jinja" import server, monitoring with context %}
+{%- from "influxdb/map.jinja" import server, relay, monitoring with context %}
 
-{%- if server.get('enabled', False) %}
+{%- if server.get('enabled', False) or relay.get('enabled') %}
 server:
   alert:
 {%- if server.get('http', {}).get('enabled', False) %}
@@ -71,5 +71,28 @@
         summary: 'Influxdb too many dropped writes'
         description: '{{ printf `%.1f` $value }}% of written points have been dropped on {{ $labels.host }} (threshold={%- endraw %}{{ influx_http_points_written_dropped_threshold }}).'
 {%- endif %}
+
+{%- if relay.get('enabled') and relay.telemetry.get('enabled') %}
+
+{%- set addresses = [] %}
+{%- if relay.telemetry.get('bind', {}).address is defined and not relay.telemetry.bind.address.startswith('127') and relay.telemetry.bind.address != '0.0.0.0' %}
+{%- do addresses.append(relay.telemetry.bind.address) %}
+{%- endif %}
+{%- for address in grains['fqdn_ip4'] %}
+{%- if not address.startswith('127') %}
+{%- do addresses.append(address) %}
+{%- endif %}
+{%- endfor %}
+
+  target:
+    static:
+      influxdb_relay:
+        enabled: true
+        endpoint:
+        - address: {{ addresses[0] }}
+          port: {{ relay.telemetry.bind.port }}
+
+{%- endif %}
+
 {%- endif %}
 {%- endif %}
diff --git a/metadata/service/relay/cluster.yml b/metadata/service/relay/cluster.yml
index 4708ea3..0dbe9b4 100644
--- a/metadata/service/relay/cluster.yml
+++ b/metadata/service/relay/cluster.yml
@@ -11,6 +11,11 @@
   influxdb:
     relay:
       enabled: true
+      telemetry:
+        enabled: true
+        bind:
+          address: ${_param:cluster_local_address}
+          port: 9196
       listen:
         http:
           type: http
diff --git a/tests/pillar/relay.sls b/tests/pillar/relay.sls
index 7da8b73..cf7e866 100644
--- a/tests/pillar/relay.sls
+++ b/tests/pillar/relay.sls
@@ -1,6 +1,11 @@
 influxdb:
   relay:
     enabled: true
+    telemetry:
+      enabled: true
+      bind:
+        address: 127.0.0.1
+        port: 9196
     listen:
       http_backend:
         type: http