From: Simon Pasquier Date: Tue, 29 Aug 2017 09:55:02 +0000 (+0200) Subject: Add support for influxdb-relay X-Git-Url: https://gerrit.mcp.mirantis.com/gitweb?p=salt-formulas%2Finfluxdb.git;a=commitdiff_plain;h=6f51556030192f8e143fee29e03b009a1cda5152;ds=sidebyside Add support for influxdb-relay Change-Id: I06b691b599660c1663306c6316a00de57885c848 --- diff --git a/README.rst b/README.rst index c79788f..ab729ac 100644 --- a/README.rst +++ b/README.rst @@ -264,6 +264,29 @@ InfluxDB client for configuring databases, users and retention policies: database: mydb1 privilege: all +InfluxDB relay with HTTP outputs: + +.. code-block:: yaml + + influxdb: + relay: + enabled: true + listen: + http_backend: + type: http + bind: + address: 127.0.0.1 + port: 9096 + output: + server1: + location: http://server1:8086/write + timeout: 20s + buffer_size_mb: 512 + max_batch_kb: 1024 + max_delay_interval: 30s + server2: + location: http://server2:8086/write + Read more ========= diff --git a/influxdb/files/influxdb-relay.conf b/influxdb/files/influxdb-relay.conf new file mode 100644 index 0000000..6d173a8 --- /dev/null +++ b/influxdb/files/influxdb-relay.conf @@ -0,0 +1,54 @@ +{%- from "influxdb/map.jinja" import relay with context -%} + +{%- if relay.get('enabled') %} + +{%- for name, listen in relay.listen.iteritems()|sort %} + +{%- if listen.get('enabled', True) and listen.get('type', 'http') in ('http', 'udp') %} + +{%- set listen_type = listen.get('type', 'http') %} +[[{{ listen_type }}]] +name = "{{ name }}" +bind-addr = "{{ listen.bind.get('address', '0.0.0.0') }}:{{ listen.bind.port }}" +{%- if listen_type == 'http' and listen.default_retention_policy is defined %} +default-retention-policy = "{{ listen.default_retention_policy }}" +{%- endif %} +{%- if listen_type == 'udp' and listen.precision is defined %} +precision = "{{ listen.precision }}" +{%- endif %} +{%- if listen_type == 'udp' and listen.read_buffer is defined %} +read-buffer = {{ listen.read_buffer|int }} +{%- endif %} + +{%- set outputs = [] %} +{%- for output_name, output in listen.get('output', {}).iteritems()|sort %} + {%- set tmp = ['name = "{}"'.format(output_name), 'location = "{}"'.format( output.location)] %} + {%- if listen_type == 'http' and output.timeout is defined %} + {%- do tmp.append('timeout = "{}"'.format(output.timeout)) %} + {%- endif %} + {%- if listen_type == 'http' and output.buffer_size_mb is defined %} + {%- do tmp.append('buffer-size-mb = {}'.format(output.buffer_size_mb)) %} + {%- endif %} + {%- if listen_type == 'http' and output.max_batch_kb is defined %} + {%- do tmp.append('max-batch-kb = {}'.format(output.max_batch_kb)) %} + {%- endif %} + {%- if listen_type == 'http' and output.max_delay_interval is defined %} + {%- do tmp.append('max-delay-interval = "{}"'.format(output.max_delay_interval)) %} + {%- endif %} + {%- if listen_type == 'udp' and output.mtu is defined %} + {%- do tmp.append('mtu = {}'.format(output.mtu)) %} + {%- endif %} + {%- do outputs.append(tmp) %} +{%- endfor %} + +output = [ +{%- for output in outputs %} + { {{ output|join(', ') }} }, +{%- endfor %} +] + +{%- endif %} + +{%- endfor %} + +{%- endif %} diff --git a/influxdb/init.sls b/influxdb/init.sls index a878715..95c7731 100644 --- a/influxdb/init.sls +++ b/influxdb/init.sls @@ -6,4 +6,7 @@ include: {%- if pillar.influxdb.client is defined %} - influxdb.client {%- endif %} +{%- if pillar.influxdb.relay is defined %} +- influxdb.relay +{%- endif %} {%- endif %} diff --git a/influxdb/map.jinja b/influxdb/map.jinja index d2d4a89..88ba241 100644 --- a/influxdb/map.jinja +++ b/influxdb/map.jinja @@ -48,3 +48,11 @@ default: 'default': { }, }, merge=salt['pillar.get']('influxdb:client')) %} + +{%- set relay = salt['grains.filter_by']({ + 'default': { + 'pkgs': ['influxdb-relay'], + 'service': 'influxdb-relay', + 'listen': {}, + }, +}, merge=salt['pillar.get']('influxdb:relay')) %} diff --git a/influxdb/relay.sls b/influxdb/relay.sls new file mode 100644 index 0000000..58f0413 --- /dev/null +++ b/influxdb/relay.sls @@ -0,0 +1,26 @@ +{%- from "influxdb/map.jinja" import relay with context %} +{%- if relay.get('enabled') %} + +influxdb_relay_packages: + pkg.installed: + - names: {{ relay.pkgs }} + +influxdb_relay_config: + file.managed: + - name: //etc/influxdb-relay/influxdb-relay.conf + - source: salt://influxdb/files/influxdb-relay.conf + - template: jinja + - require: + - pkg: influxdb_relay_packages + +influxdb_relay_service: + service.running: + - enable: true + - name: {{ relay.service }} +{%- if grains.get('noservices') %} + - onlyif: /bin/false +{%- endif %} + - watch: + - file: influxdb_relay_config + +{%- endif %} diff --git a/metadata/service/relay/cluster.yml b/metadata/service/relay/cluster.yml new file mode 100644 index 0000000..4708ea3 --- /dev/null +++ b/metadata/service/relay/cluster.yml @@ -0,0 +1,38 @@ +applications: +- influxdb +classes: +- service.influxdb.support +parameters: + _param: + influxdb_relay_timeout: 10s + influxdb_relay_buffer_size_mb: 512 + influxdb_relay_max_batch_kb: 512 + influxdb_relay_max_delay_inteval: 10s + influxdb: + relay: + enabled: true + listen: + http: + type: http + bind: + address: ${_param:cluster_local_address} + port: 9096 + output: + influxdb01: + location: http://${_param:cluster_node01_address}:8086/write + timeout: ${_param:influxdb_relay_timeout} + buffer_size_mb: ${_param:influxdb_relay_buffer_size_mb} + max_batch_kb: ${_param:influxdb_relay_max_batch_kb} + max_delay_interval: ${_param:influxdb_relay_max_delay_inteval} + influxdb02: + location: http://${_param:cluster_node02_address}:8086/write + timeout: ${_param:influxdb_relay_timeout} + buffer_size_mb: ${_param:influxdb_relay_buffer_size_mb} + max_batch_kb: ${_param:influxdb_relay_max_batch_kb} + max_delay_interval: ${_param:influxdb_relay_max_delay_inteval} + influxdb03: + location: http://${_param:cluster_node03_address}:8086/write + timeout: ${_param:influxdb_relay_timeout} + buffer_size_mb: ${_param:influxdb_relay_buffer_size_mb} + max_batch_kb: ${_param:influxdb_relay_max_batch_kb} + max_delay_interval: ${_param:influxdb_relay_max_delay_inteval} diff --git a/tests/pillar/relay.sls b/tests/pillar/relay.sls new file mode 100644 index 0000000..7da8b73 --- /dev/null +++ b/tests/pillar/relay.sls @@ -0,0 +1,29 @@ +influxdb: + relay: + enabled: true + listen: + http_backend: + type: http + bind: + address: 127.0.0.1 + port: 9096 + output: + server1: + location: http://server1:8086/write + timeout: 20s + buffer_size_mb: 512 + max_batch_kb: 1024 + max_delay_interval: 30s + server2: + location: http://server2:8086/write + udp_backend: + type: udp + bind: + address: 127.0.0.1 + port: 9196 + output: + server1: + location: http://server1:8086/write + mtu: 1500 + server2: + location: http://server2:8086/write