Skip to content

Commit

Permalink
Merge pull request voxpupuli#36 from pjfbashton/master
Browse files Browse the repository at this point in the history
new feature - consul_exporter
  • Loading branch information
tuxmea committed Jan 23, 2018
2 parents 0921843 + d6707cb commit 67e055d
Show file tree
Hide file tree
Showing 4 changed files with 204 additions and 3 deletions.
6 changes: 3 additions & 3 deletions README.md
Expand Up @@ -10,6 +10,7 @@
| >= 0.16.2 | latest |

node_exporter >= 0.15.0
consul_exporter >= 0.3.0


## Background
Expand All @@ -24,7 +25,7 @@ This module automates the install and configuration of Prometheus monitoring too
* Installs a configuration file for prometheus daemon (/etc/prometheus/prometheus.yaml) or for alertmanager (/etc/prometheus/alert.rules)
* Manages the services via upstart, sysv, or systemd
* Optionally creates alert rules
* The following exporters are currently implemented: node_exporter, statsd_exporter, process_exporter, haproxy_exporter, mysqld_exporter, blackbox_exporter
* The following exporters are currently implemented: node_exporter, statsd_exporter, process_exporter, haproxy_exporter, mysqld_exporter, blackbox_exporter, consul_exporter

## Usage

Expand All @@ -35,7 +36,7 @@ On the server (for prometheus version < 1.0.0):
class { '::prometheus':
global_config => { 'scrape_interval'=> '15s', 'evaluation_interval'=> '15s', 'external_labels'=> { 'monitor'=>'master'}},
rule_files => [ "/etc/prometheus/alert.rules" ],
scrape_configs => [
scrape_configs => [
{ 'job_name'=> 'prometheus',
'scrape_interval'=> '10s',
'scrape_timeout' => '10s',
Expand Down Expand Up @@ -133,4 +134,3 @@ In version 0.1.14 of this module the alertmanager was configured to run as the s
Do not use version 1.0.0 of Prometheus: https://groups.google.com/forum/#!topic/prometheus-developers/vuSIxxUDff8 ; it does break the compatibility with thus module!

Even if the module has templates for several linux distributions, only RH family distributions were tested.

158 changes: 158 additions & 0 deletions manifests/consul_exporter.pp
@@ -0,0 +1,158 @@
# Class: prometheus::consul_exporter
#
# This module manages prometheus node consul_exporter
#
# Parameters:
# [*arch*]
# Architecture (amd64 or i386)
#
# [*bin_dir*]
# Directory where binaries are located
#
# [*consul_server*]
# HTTP API address of a Consul server or agent. (prefix with https:// to connect over HTTPS) (default "http://localhost:8500")
#
# [*consul_health_summary*]
# Generate a health summary for each service instance. Needs n+1 queries to collect all information. (default true)
#
# [*download_extension*]
# Extension for the release binary archive
#
# [*download_url*]
# Complete URL corresponding to the where the release binary archive can be downloaded
#
# [*download_url_base*]
# Base URL for the binary archive
#
# [*extra_groups*]
# Extra groups to add the binary user to
#
# [*extra_options*]
# Extra options added to the startup command
#
# [*group*]
# Group under which the binary is running
#
# [*init_style*]
# Service startup scripts style (e.g. rc, upstart or systemd)
#
# [*install_method*]
# Installation method: url or package (only url is supported currently)
#
# [*log_level*]
# Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal] (default "info")
#
# [*manage_group*]
# Whether to create a group for or rely on external code for that
#
# [*manage_service*]
# Should puppet manage the service? (default true)
#
# [*manage_user*]
# Whether to create user or rely on external code for that
#
# [*os*]
# Operating system (linux is the only one supported)
#
# [*package_ensure*]
# If package, then use this for package ensure default 'latest'
#
# [*package_name*]
# The binary package name - not available yet
#
# [*purge_config_dir*]
# Purge config files no longer generated by Puppet
#
# [*restart_on_change*]
# Should puppet restart the service on configuration change? (default true)
#
# [*service_enable*]
# Whether to enable the service from puppet (default true)
#
# [*service_ensure*]
# State ensured for the service (default 'running')
#
# [*user*]
# User which runs the service
#
# [*version*]
# The binary release version
#
# [*web_listen_address*]
# Address to listen on for web interface and telemetry. (default ":9107")
#
# [*web_telemetry_path*]
# Path under which to expose metrics. (default "/metrics")
class prometheus::consul_exporter (
String $arch = $::prometheus::params::arch,
String $bin_dir = $::prometheus::params::bin_dir,
Boolean $consul_health_summary = $::prometheus::params::consul_exporter_consul_health_summary,
String $consul_server = $::prometheus::params::consul_exporter_consul_server,
String $download_extension = $::prometheus::params::consul_exporter_download_extension,
Optional[String] $download_url = undef,
String $download_url_base = $::prometheus::params::consul_exporter_download_url_base,
Array $extra_groups = $::prometheus::params::consul_exporter_extra_groups,
String $extra_options = '',
String $group = $::prometheus::params::consul_exporter_group,
String $init_style = $::prometheus::params::init_style,
String $install_method = $::prometheus::params::install_method,
String $log_level = $::prometheus::params::consul_exporter_log_level,
Boolean $manage_group = true,
Boolean $manage_service = true,
Boolean $manage_user = true,
String $os = $::prometheus::params::os,
String $package_ensure = $::prometheus::params::consul_exporter_package_ensure,
String $package_name = $::prometheus::params::consul_exporter_package_name,
Boolean $purge_config_dir = true,
Boolean $restart_on_change = true,
Boolean $service_enable = true,
String $service_ensure = 'running',
String $user = $::prometheus::params::consul_exporter_user,
String $version = $::prometheus::params::consul_exporter_version,
String $web_listen_address = $::prometheus::params::consul_exporter_web_listen_address,
String $web_telemetry_path = $::prometheus::params::consul_exporter_web_telemetry_path,
) inherits prometheus::params {
# Prometheus added a 'v' on the realease name at 0.3.0
if versioncmp ($version, '0.3.0') == -1 {
fail("I only support consul_exporter version '0.3.0' or higher")
}

$real_download_url = pick($download_url,"${download_url_base}/download/v${version}/${package_name}-${version}.${os}-${arch}.${download_extension}")

if $consul_health_summary {
$real_consul_health_summary = '-consul.health-summary'
} else {
$real_consul_health_summary = ''
}

$notify_service = $restart_on_change ? {
true => Service['consul_exporter'],
default => undef,
}

$options = "-consul.server=${consul_server} ${real_consul_health_summary} -web.listen-address=${web_listen_address} -web.telemetry-path=${web_telemetry_path} -log.level=${log_level} ${extra_options}"

prometheus::daemon { 'consul_exporter':
install_method => $install_method,
version => $version,
download_extension => $download_extension,
os => $os,
arch => $arch,
real_download_url => $real_download_url,
bin_dir => $bin_dir,
notify_service => $notify_service,
package_name => $package_name,
package_ensure => $package_ensure,
manage_user => $manage_user,
user => $user,
extra_groups => $extra_groups,
group => $group,
manage_group => $manage_group,
purge => $purge_config_dir,
options => $options,
init_style => $init_style,
service_ensure => $service_ensure,
service_enable => $service_enable,
manage_service => $manage_service,
}
}
13 changes: 13 additions & 0 deletions manifests/params.pp
Expand Up @@ -24,6 +24,19 @@
$config_dir = '/etc/prometheus'
$config_mode = '0660'
$config_template = 'prometheus/prometheus.yaml.erb'
$consul_exporter_consul_health_summary = true
$consul_exporter_consul_server = 'localhost:8500'
$consul_exporter_download_extension = 'tar.gz'
$consul_exporter_download_url_base = 'https://github.com/prometheus/consul_exporter/releases'
$consul_exporter_extra_groups = []
$consul_exporter_group = 'consul-exporter'
$consul_exporter_log_level = 'info'
$consul_exporter_package_ensure = 'latest'
$consul_exporter_package_name = 'consul_exporter'
$consul_exporter_user = 'consul-exporter'
$consul_exporter_version = '0.3.0'
$consul_exporter_web_listen_address = ':9107'
$consul_exporter_web_telemetry_path = '/metrics'
$download_extension = 'tar.gz'
$download_url_base = 'https://github.com/prometheus/prometheus/releases'
$elasticsearch_exporter_cnf_uri = 'http://localhost:9200'
Expand Down
30 changes: 30 additions & 0 deletions spec/classes/consul_exporter_spec.rb
@@ -0,0 +1,30 @@
require 'spec_helper'

describe 'prometheus::consul_exporter' do
on_supported_os.each do |os, facts|
context "on #{os}" do
let(:facts) do
facts
end

context 'with version specified' do
let(:params) do
{
version: '0.3.0',
arch: 'amd64',
os: 'linux'
}
end

describe 'with all defaults' do
it { is_expected.to compile.with_all_deps }
it { is_expected.to contain_file('/usr/local/bin/consul_exporter').with('target' => '/opt/consul_exporter-0.3.0.linux-amd64/consul_exporter') }
it { is_expected.to contain_prometheus__daemon('consul_exporter') }
it { is_expected.to contain_user('consul-exporter') }
it { is_expected.to contain_group('consul-exporter') }
it { is_expected.to contain_service('consul_exporter') }
end
end
end
end
end

0 comments on commit 67e055d

Please sign in to comment.