Skip to content

Commit

Permalink
feat(exporters): added node_exporter
Browse files Browse the repository at this point in the history
  • Loading branch information
alxwr committed Apr 29, 2019
1 parent a7fad98 commit 34ada49
Show file tree
Hide file tree
Showing 10 changed files with 148 additions and 1 deletion.
6 changes: 6 additions & 0 deletions docs/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,9 @@ dependency on ``prometheus.service.clean`` via include list.
This state will remove the prometheus package and has a depency on
``prometheus.config.clean`` via include list.

``prometheus.exporters``
^^^^^^^^^^^^^^^^^^^^^^^^

This state will manage prometheus exporters according to Pillar ``prometheus:exporters``.
It includes sub-states like ``prometheus.exporters.node``.
If you don't want to use Pillar data for this you may use the sub-states directly.
1 change: 1 addition & 0 deletions kitchen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ provisioner:
base:
'*':
- prometheus
- prometheus.exporters
pillars:
top.sls:
base:
Expand Down
5 changes: 5 additions & 0 deletions pillar.example
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,8 @@ prometheus:

static_configs:
- targets: ['localhost:9090']

exporters:
node:
args:
web.listen-address: ":9110"
4 changes: 4 additions & 0 deletions prometheus/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ prometheus:
service:
name: prometheus
sysrc: False
exporters:
node:
pkg: prometheus-node-exporter
service: prometheus-node-exporter
14 changes: 14 additions & 0 deletions prometheus/exporters/init.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{#- Get the `tplroot` from `tpldir` #}
{%- set tplroot = tpldir.split('/')[0] %}
{%- set sls_config_file = tplroot ~ '.config.file' %}
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
{%- if prometheus.exporters.keys()|length > 0 %}
include:
{%- for name in prometheus.exporters.keys()|list %}
- .{{ name }}
{%- endfor %}
{%- endif %}
28 changes: 28 additions & 0 deletions prometheus/exporters/node/clean.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{#- Get the `tplroot` from `tpldir` #}
{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
prometheus-exporters-node-service-dead:
service.dead:
- name: {{ prometheus.exporters.node.service }}
- enable: False
prometheus-exporters-node-pkg-removed:
pkg.removed:
- name: {{ prometheus.exporters.node.pkg }}
- require:
- service: prometheus-exporters-node-service-dead
{# FreeBSD #}
{%- if salt['grains.get']('os_family') == 'FreeBSD' %}
{%- for parameter in ['args', 'listen_address', 'textfile_dir'] %}
prometheus-exporters-node-args-{{ parameter }}:
sysrc.absent:
- name: node_exporter_{{ parameter }}
- require:
- service: prometheus-exporters-node-service-dead
{%- endfor %}
{%- endif %}
73 changes: 73 additions & 0 deletions prometheus/exporters/node/init.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{#- Get the `tplroot` from `tpldir` #}
{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import prometheus with context %}
{%- macro concat_args(args) %}
{%- if args|length > 0 %}
{%- for k,v in args -%}
{%- if not k or not v %}{% continue %}{% endif -%}
--{{ k }}={{ v }}
{%- if not loop.last %} {% endif -%}
{%- endfor -%}
{%- endif -%}
{%- endmacro %}
prometheus-exporters-node-pkg-installed:
pkg.installed:
- name: {{ prometheus.exporters.node.pkg }}
{%- if 'args' in prometheus.exporters.node %}
{%- set args = prometheus.exporters.node.get('args', {}) -%}
{# FreeBSD #}
{%- if salt['grains.get']('os_family') == 'FreeBSD' %}
{%- if 'web.listen-address' in args.keys() %}
{%- set value = args.pop('web.listen-address') %}
prometheus-exporters-node-args-web-listen-address:
sysrc.managed:
- name: node_exporter_listen_address
- value: {{ value }}
- watch_in:
- service: prometheus-exporters-node-service-running
{%- endif %}
{%- if 'collector.textfile.directory' in args.keys() %}
{%- set value = args.pop('collector.textfile.directory') %}
prometheus-exporters-node-args-collector-textfile-directory:
sysrc.managed:
- name: node_exporter_textfile_dir
- value: {{ value }}
- watch_in:
- service: prometheus-exporters-node-service-running
{%- endif %}
prometheus-exporters-node-args:
sysrc.managed:
- name: node_exporter_args
# service node_exporter restart tended to hang on FreeBSD
# https://github.com/saltstack/salt/issues/44848#issuecomment-487016414
- value: "{{ concat_args(args|dictsort) }} >/dev/null 2>&1"
- watch_in:
- service: prometheus-exporters-node-service-running
{# Debian #}
{%- elif salt['grains.get']('os_family') == 'Debian'%}
prometheus-exporters-node-args:
file.managed:
- name: {{ prometheus.exporters.node.config_file }}
- contents: |
ARGS="{{ concat_args(args) }}"
- watch_in:
- service: prometheus-exporters-node-service-running
{%- endif %}
{%- endif %}
prometheus-exporters-node-service-running:
service.running:
- name: {{ prometheus.exporters.node.service }}
- enable: True
- watch:
- pkg: prometheus-exporters-node-pkg-installed
9 changes: 8 additions & 1 deletion prometheus/osfamilymap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@
# you will need to provide at least an empty dict in this file, e.g.
# osfamilymap: {}
---
Debian: {}
Debian:
exporters:
node:
config_file: /etc/default/prometheus-node-exporter

RedHat: {}

Expand All @@ -27,6 +30,10 @@ FreeBSD:
config_file: /usr/local/etc/prometheus.yml
service:
sysrc: True
exporters:
node:
pkg: node_exporter
service: node_exporter

OpenBSD:
rootgroup: wheel
Expand Down
4 changes: 4 additions & 0 deletions test/integration/default/controls/packages_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@
describe package('prometheus') do
it { should be_installed }
end

describe package('prometheus-node-exporter') do
it { should be_installed }
end
end
5 changes: 5 additions & 0 deletions test/integration/default/controls/services_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,9 @@
it { should be_enabled }
it { should be_running }
end

describe service('prometheus-node-exporter') do
it { should be_enabled }
it { should be_running }
end
end

0 comments on commit 34ada49

Please sign in to comment.