diff --git a/data/common/common.yaml b/data/common/common.yaml --- a/data/common/common.yaml +++ b/data/common/common.yaml @@ -3129,6 +3129,8 @@ specification: minute: fqdn_rand +prometheus::statsd::exporter::version: 0.22.5 +prometheus::statsd::exporter::archive_sha256sum: b04a25fe937a2e74dab097d589bd1f4da9e874d62b166c4e74d5d55b0f58eab6 prometheus::statsd::listen_network: "%{lookup('internal_network')}" prometheus::statsd::listen_port: 9102 prometheus::statsd::defaults_config: {} diff --git a/site-modules/profile/manifests/prometheus/statsd.pp b/site-modules/profile/manifests/prometheus/statsd.pp --- a/site-modules/profile/manifests/prometheus/statsd.pp +++ b/site-modules/profile/manifests/prometheus/statsd.pp @@ -2,30 +2,51 @@ class profile::prometheus::statsd { 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], - ] + ensure => 'purged', + notify => Class['systemd::systemctl::daemon_reload'], } ::systemd::dropin_file {'prometheus-statsd-exporter/restart.conf': - ensure => present, + ensure => absent, unit => 'prometheus-statsd-exporter.service', filename => 'restart.conf', - content => "[Service]\nRestart=always\nRestartSec=5\n", } + $version = lookup('prometheus::statsd::exporter::version') + $archive_sha256sum = lookup('prometheus::statsd::exporter::archive_sha256sum') + + $exporter_name = "statsd_exporter" + $github_project = "prometheus/${exporter_name}" + $service_name = "prometheus-statsd-exporter" + $unit_name = "${service_name}.service" + + $url = "https://github.com/${github_project}/releases/download/v${version}/${exporter_name}-${version}.linux-amd64.tar.gz" + + $exporter_dir = "/opt/${service_name}-${version}" + $exporter_exe = "${exporter_dir}/${exporter_name}" + + file {$exporter_dir: + ensure => 'directory', + owner => 'root', + group => 'root', + mode => '0755', + } + -> archive { "/tmp/${exporter_name}.tar.gz": + source => $url, + extract => true, + extract_path => $exporter_dir, + extract_command => 'tar xfz %s --strip-components=1', + checksum => $archive_sha256sum, + checksum_type => 'sha256', + creates => $exporter_exe, + cleanup => true, + } + -> file {$exporter_exe:} + + $service_file = '/etc/systemd/system/prometheus-statsd-exporter.service' + $mapping_config_file = '/etc/prometheus/statsd_exporter_mapping.yml' + $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) @@ -53,25 +74,29 @@ } ) - # 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'], + notify => Service[$service_name], + } + + # uses $exporter_exe and $defaults_config + ::systemd::unit_file {$unit_name: + ensure => present, + content => template('profile/prometheus/statsd/prometheus-statsd-exporter.service.erb'), + require => [ + File[$exporter_exe], + File[$mapping_config_file], + ], + } + + ~> service {$service_name: + ensure => 'running', + enable => true, + require => Class['systemd::systemctl::daemon_reload'], } profile::prometheus::export_scrape_config {'statsd': diff --git a/site-modules/profile/templates/prometheus/statsd/prometheus-statsd-exporter.defaults.erb b/site-modules/profile/templates/prometheus/statsd/prometheus-statsd-exporter.defaults.erb deleted file mode 100644 --- a/site-modules/profile/templates/prometheus/statsd/prometheus-statsd-exporter.defaults.erb +++ /dev/null @@ -1,36 +0,0 @@ -# Set the command-line arguments to pass to the server. -# Due to shell scaping, to pass backslashes for regexes, you need to double -# them (\\d for \d). If running under systemd, you need to double them again -# (\\\\d to mean \d), and escape newlines too. -ARGS="\ -<%- scope.call_function('flatten_to_argument_list', [@defaults_config]).each do |argument| -%> - <%= argument %> \ -<%- end -%> -" - -# Prometheus-statsd-exporter supports the following options: -# --web.listen-address=":9102" -# The address on which to expose the web interface and generated Prometheus -# metrics. -# --web.telemetry-path="/metrics" -# Path under which to expose metrics. -# --statsd.listen-udp=":9125" -# The UDP address on which to receive statsd metric lines. "" disables it. -# --statsd.listen-tcp=":9125" -# The TCP address on which to receive statsd metric lines. "" disables it. -# --statsd.mapping-config=STATSD.MAPPING-CONFIG -# Metric mapping configuration file name. -# --statsd.read-buffer=STATSD.READ-BUFFER -# Size (in bytes) of the operating system's transmit read buffer -# associated with the UDP connection. Please make sure the kernel -# parameters net.core.rmem_max is set to a value greater than the -# value specified. -# --debug.dump-fsm="" -# The path to dump internal FSM generated for glob matching as Dot file. -# --log.level="info" -# Only log messages with the given severity or above. Valid levels: [debug, -# info, warn, error, fatal] -# --log.format="logger:stderr" -# Set the log target and format. Example: "logger:syslog?appname=bob&local=7" -# or "logger:stdout?json=true" - diff --git a/site-modules/profile/templates/prometheus/statsd/prometheus-statsd-exporter.service.erb b/site-modules/profile/templates/prometheus/statsd/prometheus-statsd-exporter.service.erb new file mode 100644 --- /dev/null +++ b/site-modules/profile/templates/prometheus/statsd/prometheus-statsd-exporter.service.erb @@ -0,0 +1,14 @@ +[Unit] +Description=Prometheus exporter for StatsD metrics +Documentation=https://github.com/prometheus/statsd_exporter + +[Service] +Restart=always +ExecStart=<%= @exporter_exe %> <%= scope.call_function('flatten_to_argument_list', [@defaults_config]).join(' ') %> +ExecReload=/bin/kill -HUP $MAINPID +TimeoutStopSec=20s +SendSIGKILL=no +DynamicUser=yes + +[Install] +WantedBy=multi-user.target