diff --git a/site-modules/profile/manifests/prometheus/base.pp b/site-modules/profile/manifests/prometheus/base.pp new file mode 100644 index 00000000..bb30622c --- /dev/null +++ b/site-modules/profile/manifests/prometheus/base.pp @@ -0,0 +1,11 @@ +# Base configuration for all prometheus exporters +class profile::prometheus::statsd { + include profile::prometheus::apt_config + + file {'/etc/prometheus': + ensure => directory, + owner => 'root', + group => 'root', + mode => '0644', + } +} diff --git a/site-modules/profile/manifests/prometheus/node.pp b/site-modules/profile/manifests/prometheus/node.pp index 09640385..70b6bb56 100644 --- a/site-modules/profile/manifests/prometheus/node.pp +++ b/site-modules/profile/manifests/prometheus/node.pp @@ -1,96 +1,96 @@ # Prometheus configuration for nodes class profile::prometheus::node { - include profile::prometheus::apt_config + include profile::prometheus::base $defaults_file = '/etc/default/prometheus-node-exporter' package {'prometheus-node-exporter': ensure => latest, notify => Service['prometheus-node-exporter'], } service {'prometheus-node-exporter': ensure => 'running', enable => true, require => [ Package['prometheus-node-exporter'], File[$defaults_file], ] } ::systemd::dropin_file {'prometheus-node-exporter/restart.conf': ensure => present, unit => 'prometheus-node-exporter.service', filename => 'restart.conf', content => "[Service]\nRestart=always\nRestartSec=5\n", } $lookup_defaults_config = lookup('prometheus::node::defaults_config', Hash) $listen_network = lookup('prometheus::node::listen_network', Optional[String], 'first', undef) $listen_address = lookup('prometheus::node::listen_address', Optional[String], 'first', undef) $actual_listen_address = pick($listen_address, ip_for_network($listen_network)) $listen_port = lookup('prometheus::node::listen_port') $target = "${actual_listen_address}:${listen_port}" $defaults_config = deep_merge( $lookup_defaults_config, { web => { listen_address => $target, }, } ) # Uses $defaults_config file {$defaults_file: ensure => 'present', owner => 'root', group => 'root', mode => '0644', content => template('profile/prometheus/node/prometheus-node-exporter.defaults.erb'), require => Package['prometheus-node-exporter'], notify => Service['prometheus-node-exporter'], } $textfile_directory = lookup('prometheus::node::textfile_directory') $scripts = lookup('prometheus::node::scripts', Hash, 'deep') $scripts_directory = lookup('prometheus::node::scripts::directory') file {$scripts_directory: ensure => 'directory', owner => 'root', group => 'root', mode => '0700', recurse => true, purge => true, require => Package['prometheus-node-exporter'], } each($scripts) |$script, $data| { file {"${scripts_directory}/${script}": ensure => present, owner => 'root', group => 'root', mode => '0700', content => template("profile/prometheus/node/scripts/${script}.erb"), } if $data['mode'] == 'cron' { cron {"prometheus-node-exporter-${script}": ensure => absent, user => $data['cron']['user'], } profile::cron::d {"prometheus-node-exporter-${script}": target => 'prometheus', user => $data['cron']['user'], command => "chronic ${scripts_directory}/${script}", random_seed => "prometheus-node-exporter-${script}", * => $data['cron']['specification'], } } } profile::prometheus::export_scrape_config {'node': target => $target, } } diff --git a/site-modules/profile/manifests/prometheus/server.pp b/site-modules/profile/manifests/prometheus/server.pp index 78142217..578b534d 100644 --- a/site-modules/profile/manifests/prometheus/server.pp +++ b/site-modules/profile/manifests/prometheus/server.pp @@ -1,109 +1,109 @@ # Configure the Prometheus server class profile::prometheus::server { - include profile::prometheus::apt_config + include profile::prometheus::base $config_dir = '/etc/prometheus' $config_file = "${config_dir}/prometheus.yml" $defaults_file = '/etc/default/prometheus' $scrape_configs_dirname = 'exported-configs' $scrape_configs_dir = "${config_dir}/${scrape_configs_dirname}" $global_config = lookup('prometheus::server::config::global', Hash) $rule_files = [] $scrape_configs = [] $remote_read = [] $remote_write = [] $alert_relabel_configs = [] $alertmanagers = [] $full_config = { global => $global_config, rule_files => $rule_files, scrape_configs => $scrape_configs + [ { job_name => 'exported', file_sd_configs => [ { files => [ "${scrape_configs_dirname}/*.yaml", ] }, ] }, ], alerting => { alert_relabel_configs => $alert_relabel_configs, alertmanagers => $alertmanagers, }, remote_read => $remote_read, remote_write => $remote_write, } $lookup_defaults_config = lookup('prometheus::server::defaults_config', Hash) $listen_network = lookup('prometheus::server::listen_network', Optional[String], 'first', undef) $listen_address = lookup('prometheus::server::listen_address', Optional[String], 'first', undef) $actual_listen_address = pick($listen_address, ip_for_network($listen_network)) $listen_port = lookup('prometheus::server::listen_port') $target = "${actual_listen_address}:${listen_port}" $defaults_config = deep_merge( $lookup_defaults_config, { web => { listen_address => $target, }, } ) profile::prometheus::export_scrape_config {'prometheus': target => $target, } package {'prometheus': ensure => latest, notify => Service['prometheus'], } service {'prometheus': ensure => 'running', enable => true, require => [ Package['prometheus'], File[$config_file], File[$defaults_file] ], } file {$config_file: ensure => 'present', owner => 'root', group => 'root', mode => '0644', require => Package['prometheus'], notify => Service['prometheus'], content => inline_yaml($full_config), } file {$scrape_configs_dir: ensure => 'directory', owner => 'root', group => 'root', mode => '0644', require => Package['prometheus'], recurse => true, purge => true, } # Uses $defaults_config file {$defaults_file: ensure => 'present', owner => 'root', group => 'root', mode => '0644', content => template('profile/prometheus/server/prometheus.defaults.erb'), require => Package['prometheus'], notify => Service['prometheus'], } Profile::Prometheus::Scrape_config <<| prometheus_server == $trusted['certname'] |>> } diff --git a/site-modules/profile/manifests/prometheus/sql.pp b/site-modules/profile/manifests/prometheus/sql.pp index 1fc0e9cc..7a9b64c2 100644 --- a/site-modules/profile/manifests/prometheus/sql.pp +++ b/site-modules/profile/manifests/prometheus/sql.pp @@ -1,96 +1,98 @@ # Deployment of prometheus SQL exporter class profile::prometheus::sql { + include profile::prometheus::base + $exporter_name = 'sql' $package_name = "prometheus-${exporter_name}-exporter" $service_name = $package_name $defaults_file = "/etc/default/${package_name}" $config_snippet_dir = "/etc/${package_name}" $config_file = "/var/run/postgresql/${package_name}.yml" $config_updater = "/usr/bin/update-${package_name}-config" package {$package_name: ensure => installed, } service {$service_name: ensure => 'running', enable => true, require => [ Package[$package_name], ] } ::systemd::dropin_file {"${service_name}/restart.conf": ensure => present, unit => "${service_name}.service", filename => 'restart.conf', content => "[Service]\nRestart=always\nRestartSec=5\n", } ::systemd::dropin_file {"${service_name}/update_config.conf": ensure => present, unit => "${service_name}.service", filename => 'update_config.conf', content => template('profile/prometheus/sql/systemd/update_config.conf.erb'), notify => Service[$service_name], } $update_deps = ['postgresql-client-common', 'libyaml-perl'] ensure_packages( $update_deps, { ensure => present }, ) file {$config_updater: ensure => present, owner => 'root', group => 'root', mode => '0755', source => 'puppet:///modules/profile/prometheus/sql/update-prometheus-sql-exporter-config', require => Package[$update_deps], notify => Service[$service_name], } file {$config_snippet_dir: ensure => directory, owner => 'root', group => 'root', mode => '0644', notify => Service[$service_name], } $config_snippets = lookup('prometheus::sql::config_snippets', Array[String], 'unique') each($config_snippets) |$snippet| { file {"${config_snippet_dir}/${snippet}.yml": ensure => present, owner => 'root', group => 'root', mode => '0644', source => "puppet:///modules/profile/prometheus/sql/config/${snippet}.yml", notify => Service[$service_name], } } $listen_network = lookup('prometheus::sql::listen_network', Optional[String], 'first', undef) $listen_ip = lookup('prometheus::sql::listen_address', Optional[String], 'first', undef) $actual_listen_ip = pick($listen_ip, ip_for_network($listen_network)) $listen_port = lookup('prometheus::sql::listen_port') $listen_address = "${actual_listen_ip}:${listen_port}" file {$defaults_file: ensure => present, owner => 'root', group => 'root', mode => '0644', content => template('profile/prometheus/sql/prometheus-sql-exporter.defaults.erb'), require => Package[$package_name], notify => Service[$service_name], } profile::prometheus::export_scrape_config {'sql': target => $listen_address, } } diff --git a/site-modules/profile/manifests/prometheus/statsd.pp b/site-modules/profile/manifests/prometheus/statsd.pp index 4d528e74..90e317a5 100644 --- a/site-modules/profile/manifests/prometheus/statsd.pp +++ b/site-modules/profile/manifests/prometheus/statsd.pp @@ -1,80 +1,80 @@ # Prometheus configuration for statsd exporter class profile::prometheus::statsd { - include profile::prometheus::apt_config + include profile::prometheus::base $defaults_file = '/etc/default/prometheus-statsd-exporter' $mapping_config_file = '/etc/prometheus/statsd_exporter_mapping.yml' package {'prometheus-statsd-exporter': ensure => present, notify => Service['prometheus-statsd-exporter'], } service {'prometheus-statsd-exporter': ensure => 'running', enable => true, require => [ Package['prometheus-statsd-exporter'], File[$defaults_file], ] } ::systemd::dropin_file {'prometheus-statsd-exporter/restart.conf': ensure => present, unit => 'prometheus-statsd-exporter.service', filename => 'restart.conf', content => "[Service]\nRestart=always\nRestartSec=5\n", } $lookup_defaults_config = lookup('prometheus::statsd::defaults_config', Hash) $listen_network = lookup('prometheus::statsd::listen_network', Optional[String], 'first', undef) $listen_address = lookup('prometheus::statsd::listen_address', Optional[String], 'first', undef) $actual_listen_address = pick($listen_address, ip_for_network($listen_network)) $prometheus_listen_port = lookup('prometheus::statsd::listen_port') $target = "${actual_listen_address}:${prometheus_listen_port}" $listen_tcp = lookup('prometheus::statsd::statsd_listen_tcp') $listen_udp = lookup('prometheus::statsd::statsd_listen_udp') $mapping_config = lookup('prometheus::statsd::mapping', Hash) $defaults_config = deep_merge( $lookup_defaults_config, { web => { listen_address => $target, }, statsd => { mapping_config => $mapping_config_file, listen_tcp => $listen_tcp, listen_udp => $listen_udp, } } ) # Uses $defaults_config file {$defaults_file: ensure => 'present', owner => 'root', group => 'root', mode => '0644', content => template('profile/prometheus/statsd/prometheus-statsd-exporter.defaults.erb'), require => Package['prometheus-statsd-exporter'], notify => Service['prometheus-statsd-exporter'], } file {$mapping_config_file: ensure => 'present', owner => 'root', group => 'root', mode => '0644', content => inline_yaml($mapping_config), require => Package['prometheus-statsd-exporter'], notify => Service['prometheus-statsd-exporter'], } profile::prometheus::export_scrape_config {'statsd': target => $target, } }