Add separate telegraf output and prometheus target for openstack metrics

Change-Id: Iae2c16fcd835fb8d7591cc3a76703ddf9a83e1a4
Related-Bug: PROD-18242
diff --git a/keystone/map.jinja b/keystone/map.jinja
index b680d2a..5adfe78 100644
--- a/keystone/map.jinja
+++ b/keystone/map.jinja
@@ -94,5 +94,7 @@
             'all_auths_rate': 0.1,
         },
         'telegraf_openstack_input_plugin_interval': '1m',
+        'telegraf_openstack_output_plugin_expiration_interval': '2m',
+        'output_openstack_port': 9127,
     },
 }, grain='os_family', merge=salt['pillar.get']('keystone:monitoring')) %}
diff --git a/keystone/meta/prometheus.yml b/keystone/meta/prometheus.yml
index a328c2c..078f98b 100644
--- a/keystone/meta/prometheus.yml
+++ b/keystone/meta/prometheus.yml
@@ -1,7 +1,16 @@
 {%- if pillar.keystone.server is defined and pillar.keystone.server.get('enabled') %}
 {%- from "keystone/map.jinja" import monitoring with context %}
-{% raw %}
 server:
+  target:
+    dns:
+      enabled: true
+      endpoint:
+        - name: 'remote_agent_openstack'
+          domain:
+          - 'tasks.monitoring_remote_agent'
+          type: A
+          port: '{{ monitoring.output_openstack_port }}'
+{% raw %}
   alert:
     KeystoneAPIDown:
       if: >-
diff --git a/keystone/meta/telegraf.yml b/keystone/meta/telegraf.yml
index 2be47d3..a293ce2 100644
--- a/keystone/meta/telegraf.yml
+++ b/keystone/meta/telegraf.yml
@@ -1,9 +1,12 @@
 {%- from "keystone/map.jinja" import monitoring, server with context %}
 {%- if server is defined and server.get('enabled', False) %}
+{%- set openstack_input_interval = monitoring.telegraf_openstack_input_plugin_interval %}
+{%- set openstack_output_expiration_interval = monitoring.telegraf_openstack_output_plugin_expiration_interval %}
+
 remote_agent:
   input:
     openstack:
-      interval: "{{ monitoring.telegraf_openstack_input_plugin_interval }}"
+      interval: "{{ openstack_input_interval }}"
       project: "{{ server.admin_tenant }}"
       tenant: "{{ server.admin_tenant }}"
       region: "{{ server.region }}"
@@ -11,6 +14,19 @@
       password: "{{ server.admin_password }}"
       identity_endpoint: "{{ server.bind.private_protocol }}://{{ server.bind.private_address|replace('0.0.0.0', '127.0.0.1') }}:{{ server.bind.private_port }}/v{% if server.get('api_version', 2)|int == 2 %}2.0{% else %}3{% endif %}"
       monitor_agents: "true"
+  output:
+    prometheus_client_openstack:
+      template: telegraf/files/output/prometheus_client.conf
+      engine: prometheus
+      # Output plugin configuration
+      bind:
+        address: 0.0.0.0
+        port: "{{ monitoring.output_openstack_port }}"
+      expiration_interval: "{{ openstack_output_expiration_interval }}"
+      # Measurement filtering
+      namepass: ["openstack*"]
+    prometheus_client:
+      namedrop: ["openstack*"]
 agent:
   input:
     http_response: