Support multiple instances of telegraf
Change-Id: Ifd51b315e458daf4b490296d9755ac1d7dbc4658
diff --git a/metadata/service/agent.yml b/metadata/service/agent/init.yml
similarity index 100%
rename from metadata/service/agent.yml
rename to metadata/service/agent/init.yml
diff --git a/metadata/service/agent/remote.yml b/metadata/service/agent/remote.yml
new file mode 100644
index 0000000..19d5e6d
--- /dev/null
+++ b/metadata/service/agent/remote.yml
@@ -0,0 +1,13 @@
+applications:
+ - telegraf
+classes:
+ - service.telegraf.support
+parameters:
+ telegraf:
+ remote_agent:
+ enabled: true
+ interval: 15
+ round_interval: false
+ metric_batch_size: 1000
+ metric_buffer_limit: 10000
+ collection_jitter: 2
diff --git a/telegraf/agent.sls b/telegraf/agent.sls
index 5c2728f..9ac49d7 100644
--- a/telegraf/agent.sls
+++ b/telegraf/agent.sls
@@ -1,29 +1,28 @@
-{% from "telegraf/map.jinja" import agent, service_grains with context %}
-{%- if agent.enabled %}
+{% from "telegraf/map.jinja" import telegraf_grains with context %}
+{%- set agent = telegraf_grains.telegraf.get('agent', {}) %}
+{%- if agent.get('enabled', False) %}
-telegraf_packages:
+telegraf_packages_agent:
pkg.installed:
- names: {{ agent.pkgs }}
-telegraf_config:
+telegraf_config_agent:
file.managed:
- - name: {{ agent.file.config }}
+ - name: {{ agent.dir.config }}/telegraf.conf
- source: salt://telegraf/files/telegraf.conf
- user: root
- group: root
- mode: 644
- template: jinja
- require:
- - pkg: telegraf_packages
+ - pkg: telegraf_packages_agent
-{%- set telegraf_input = service_grains.telegraf.agent.input %}
-
-{%- for name,values in telegraf_input.iteritems() %}
+{%- for name,values in agent.input.iteritems() %}
{%- if values is not mapping or values.get('enabled', True) %}
-input_{{ name }}:
+input_{{ name }}_agent:
file.managed:
- - name: {{ agent.dir.config }}/input-{{ name }}.conf
+ - name: {{ agent.dir.config_d }}/input-{{ name }}.conf
- source:
- salt://telegraf/files/input/{{ name }}.conf
- salt://telegraf/files/input/generic.conf
@@ -32,10 +31,10 @@
- mode: 644
- template: jinja
- require:
- - pkg: telegraf_packages
+ - pkg: telegraf_packages_agent
{%- if not grains.get('noservices', False)%}
- watch_in:
- - service: telegraf_service
+ - service: telegraf_service_agent
{%- endif %}
- defaults:
name: {{ name }}
@@ -48,18 +47,18 @@
- optional_groups:
- {{ name }}
- require:
- - pkg: telegraf_packages
+ - pkg: telegraf_packages_agent
{%- endif %}
{%- else %}
-input_{{name }}:
+input_{{name }}_agent:
file.absent:
- - name: {{ agent.dir.config }}/input-{{ name }}.conf
+ - name: {{ agent.dir.config_d }}/input-{{ name }}.conf
- require:
- - pkg: telegraf_packages
+ - pkg: telegraf_packages_agent
{%- if not grains.get('noservices', False)%}
- watch_in:
- - service: telegraf_service
+ - service: telegraf_service_agent
{%- endif %}
{%- endif %}
@@ -67,19 +66,19 @@
{%- for name,values in agent.output.iteritems() %}
-output_{{ name }}:
+output_{{ name }}_agent:
file.managed:
- - name: {{ agent.dir.config }}/output-{{ name }}.conf
+ - name: {{ agent.dir.config_d }}/output-{{ name }}.conf
- source: salt://telegraf/files/output/{{ name }}.conf
- user: root
- group: root
- mode: 644
- template: jinja
- require:
- - pkg: telegraf_packages
+ - pkg: telegraf_packages_agent
{%- if not grains.get('noservices', False)%}
- watch_in:
- - service: telegraf_service
+ - service: telegraf_service_agent
{%- endif %}
- defaults:
name: {{ name }}
@@ -89,12 +88,12 @@
{%- if not grains.get('noservices', False)%}
-telegraf_service:
+telegraf_service_agent:
service.running:
- name: telegraf
- enable: True
- watch:
- - file: telegraf_config
+ - file: telegraf_config_agent
{%- endif %}
diff --git a/telegraf/init.sls b/telegraf/init.sls
index 97bf655..7345d3b 100644
--- a/telegraf/init.sls
+++ b/telegraf/init.sls
@@ -1,2 +1,7 @@
include:
+ {%- if pillar.telegraf.agent is defined %}
- telegraf.agent
+ {%- endif %}
+ {%- if pillar.telegraf.remote_agent is defined %}
+ - telegraf.remote_agent
+ {%- endif %}
diff --git a/telegraf/map.jinja b/telegraf/map.jinja
index 51580e5..c49db55 100644
--- a/telegraf/map.jinja
+++ b/telegraf/map.jinja
@@ -1,16 +1,23 @@
{% set agent = salt['grains.filter_by']({
'Debian': {
'pkgs': ['telegraf'],
- 'file': {
- 'config': '/etc/telegraf/telegraf.conf'
- },
'dir': {
- 'config': '/etc/telegraf/telegraf.d'
+ 'config': '/etc/telegraf',
+ 'config_d': '/etc/telegraf/telegraf.d'
},
},
}, merge=salt['pillar.get']('telegraf:agent')) %}
-{%- set service_grains = {'telegraf': {'agent': {'input': {}}}} %}
+{% set remote_agent = salt['grains.filter_by']({
+ 'Debian': {
+ 'dir': {
+ 'config': '/srv/volumes/local/telegraf',
+ 'config_d': '/srv/volumes/local/telegraf/telegraf.d'
+ },
+ },
+}, merge=salt['pillar.get']('telegraf:remote_agent')) %}
+
+{%- set service_grains = {'telegraf': {'agent': {'input': {}}, 'remote_agent': {'input':{}}}} %}
{%- for service_name, service in pillar.items() %}
{%- if service.get('_support', {}).get('telegraf', {}).get('enabled', False) %}
{%- set grains_fragment_file = service_name+'/meta/telegraf.yml' %}
@@ -21,4 +28,5 @@
{%- endif %}
{%- endif %}
{%- endfor %}
-{%- set service_grains = salt['grains.filter_by']({'default': service_grains}, merge={'telegraf': {'agent': {'input': agent.get('input', {})}}}) %}
+{%- set telegraf_grains = salt['grains.filter_by']({'default': service_grains}, merge={'telegraf': {'agent': agent}}) %}
+{%- set telegraf_grains = salt['grains.filter_by']({'default': service_grains}, merge={'telegraf': {'remote_agent': remote_agent}}) %}
diff --git a/telegraf/meta/salt.yml b/telegraf/meta/salt.yml
index 9a5ca1f..1340284 100644
--- a/telegraf/meta/salt.yml
+++ b/telegraf/meta/salt.yml
@@ -1,6 +1,6 @@
grain:
- {%- if pillar.get('telegraf', {}).get('agent') %}
- {%- from "telegraf/map.jinja" import service_grains with context %}
+ {%- if pillar.get('telegraf') %}
+ {%- from "telegraf/map.jinja" import telegraf_grains with context %}
telegraf:
- {{ service_grains|yaml(False)|indent(4) }}
+ {{ telegraf_grains|yaml(False)|indent(4) }}
{%- endif %}
diff --git a/telegraf/remote_agent.sls b/telegraf/remote_agent.sls
new file mode 100644
index 0000000..67441f2
--- /dev/null
+++ b/telegraf/remote_agent.sls
@@ -0,0 +1,77 @@
+{% from "telegraf/map.jinja" import telegraf_grains with context %}
+{%- set remote_agent = telegraf_grains.telegraf.get('remote_agent', {}) %}
+
+{%- if remote_agent.get('enabled', False) %}
+
+config_dir_remote_agent:
+ file.directory:
+ - name: {{remote_agent.dir.config}}
+ - makedirs: True
+ - mode: 755
+
+config_d_dir_remote_agent:
+ file.directory:
+ - name: {{remote_agent.dir.config_d}}
+ - makedirs: True
+ - mode: 755
+ - require:
+ - file: config_dir_remote_agent
+
+telegraf_config_remote_agent:
+ file.managed:
+ - name: {{ remote_agent.dir.config }}/telegraf.conf
+ - source: salt://telegraf/files/telegraf.conf
+ - user: root
+ - group: root
+ - mode: 644
+ - template: jinja
+ - require:
+ - file: config_dir_remote_agent
+
+{%- for name,values in remote_agent.get('input', {}).iteritems() %}
+
+{%- if values is not mapping or values.get('enabled', True) %}
+input_{{ name }}_remote_agent:
+ file.managed:
+ - name: {{ remote_agent.dir.config_d }}/input-{{ name }}.conf
+ - source:
+ - salt://telegraf/files/input/{{ name }}.conf
+ - salt://telegraf/files/input/generic.conf
+ - user: root
+ - group: root
+ - mode: 644
+ - template: jinja
+ - require:
+ - file: config_d_dir_remote_agent
+ - defaults:
+ name: {{ name }}
+ values: {{ values }}
+
+{%- else %}
+input_{{name }}_remote_agent:
+ file.absent:
+ - name: {{ remote_agent.dir.config_d }}/input-{{ name }}.conf
+ - require:
+ - file: config_d_dir_remote_agent
+{%- endif %}
+
+{%- endfor %}
+
+{%- for name,values in remote_agent.get('output', {}).iteritems() %}
+
+output_{{ name }}_remote_agent:
+ file.managed:
+ - name: {{ remote_agent.dir.config_d }}/output-{{ name }}.conf
+ - source: salt://telegraf/files/output/{{ name }}.conf
+ - user: root
+ - group: root
+ - mode: 644
+ - template: jinja
+ - require:
+ - file: config_d_dir_remote_agent
+ - defaults:
+ name: {{ name }}
+ values: {{ values }}
+
+{%- endfor %}
+{%- endif %}