3
0
Files
confdroid_prometheus/manifests/params.pp
2025-12-04 14:30:24 +01:00

131 lines
5.7 KiB
ObjectPascal

# prometheus_cd::params.pp
# Module name: prometheus_cd
# Author: Arne Teuke (arne_teuke@confdroid.com)
# @summary Class holds all parameters for the prometheus_cd module.
# @param [String] reqpackage_prom the prometheus package
# @param [String] reqpackage_ne the node_exporter package
# @param [String] pkg_ensure which version of the package to install
# @param [boolean] manage_prometheus whether to manage prometheus
# @param [boolean] manage_node_exporter whether to manage node exporter
# @param [boolean] ps_manage_fw whether to manage the firewall
# @param [String] ps_prom_host the fqdn of the prometheus server
# @param [String] ps_fw_prefix the firewall rule prefix
# @param [String] ps_main_port the firewall main port for prometheus
# @param [String] ps_auth_user the username for authentication
# @param [String] ps_auth_pass the password for authentication
# @param [String] ps_web_pass the password for web authentication
# @param [String] ps_retention_time tsdb retention time
# @param [String] ps_retention_size tsdb retention size
# @param [String] ps_wal_seg_size WAL segment size
# @param [String] ps_min_block_dur tsdb minimum block duration
# @param [String] ps_max_block_dur tsdb maximum block duration
# @param [String] ps_max_mem hard memory ceiling
# @param [String] ps_high_mem soft limit to make kernel reclaim earlier
# @param [String] ps_swap_mem allow swap, but limit it
# @param [String] ps_oom_score OOM killer choosing prometheus
# @param [String] ps_max_procs reduce parallel WAL replay workers
# @param [Boolean] ps_write_external whether to allow remote postgres
# @param [String] ps_auth_ext_user user for writing to extern instance
# @param [String] ps_auth_ext_pass password for writing to extern instance
# @param [String] ps_external_url the full url for the remote write point
# @param [Boolean] ps_enable_pruning whether to allow pruning local blocks
# @param [String] ps_pruning_dir the directory for the pruning script
# @param [String] ps_pruning_file the url and filename for the pruning script
# @param [String] ps_env_file the url and filename for the env file
# @param [String] ps_pg_host the host running the database for cold metrics
# @param [String] ps_pg_port the port for the database for cold metrics
# @param [String] ps_pg_db the database for cold metrics
# @param [String] ps_pg_user the read-only user for the db for cold metrics
# @param [String] ps_pg_pass the password for the db for cold metrics
# @param [Boolean] ps_dry_run (true = just log, false = actually delete blocks)
# @param [String] ps_min_age_hours Minimum block age in hours before pruning
# @param [String] ps_grace_hours Grace period in hours to be extra safe
##############################################################################
class prometheus_cd::params (
# installation
String $reqpackage_prom = 'prometheus2',
String $reqpackage_ne = 'node_exporter',
String $pkg_ensure = 'present',
# config logic
Boolean $manage_prometheus = false,
Boolean $manage_node_exporter = false,
Boolean $ps_manage_fw = false,
String $ps_prom_host = 'prometheus.example.net',
# firewall
String $ps_fw_prefix = '50',
String $ps_main_port = '9090',
# auth prometheus
String $ps_auth_user = 'changeme',
String $ps_auth_pass = 'changeme',
String $ps_web_pass = 'changeme',
# auth remote
String $ps_auth_ext_user = 'changeme',
String $ps_auth_ext_pass = 'changeme',
# storage
String $ps_retention_time = '15d',
String $ps_retention_size = '20GB',
String $ps_wal_seg_size = '50MB',
String $ps_min_block_dur = '2h',
String $ps_max_block_dur = '2h',
# service
String $ps_max_mem = '6G',
String $ps_high_mem = '5G',
String $ps_swap_mem = '4G',
String $ps_oom_score = '500',
String $ps_max_procs = '1',
# remote write external
Boolean $ps_write_external = false,
String $ps_external_url = 'http://changeme.local/write',
# pruning script
Boolean $ps_enable_pruning = false,
String $ps_pruning_dir = '/opt/prometheus-prune',
String $ps_pruning_file = "${ps_pruning_dir}/prune_prometheus_pg.sh",
String $ps_env_file = "${ps_pruning_dir}/prune.env",
String $ps_pg_host = 'localhost',
String $ps_pg_port = '5432',
String $ps_pg_db = 'prometheus',
String $ps_pg_user = 'readaccess',
String $ps_pg_pass = 'Changeme',
Boolean $ps_dry_run = true,
String $ps_min_age_hours = '4',
String $ps_grace_hours = '1',
) {
# defaults
$fqdn = $facts['networking']['fqdn']
$domain = $facts['networking']['domain']
$os_name = $facts['os']['name']
$os_release = $facts['os']['release']['major']
# dirs
$ps_main_dir = '/etc/prometheus'
$ps_system_file_dir = '/etc/systemd/system/prometheus.service.d'
$ps_system_dir = '/etc/systemd/system/'
# files
$ps_main_file = "${ps_main_dir}/prometheus.yml"
$ps_web_config_file = "${ps_main_dir}/web.yml"
$ps_system_service_file = "${ps_system_file_dir}/override.conf"
$ps_pruning_svc_file = "${ps_system_dir}/prometheus-prune.service"
$ps_pruning_timer_file = "${ps_system_dir}/prometheus-prune.timer"
$ps_prune_log_file = '/var/log/prometheus-prune.log'
# services
$ps_prom_service = 'prometheus'
$ps_ne_service = 'node_exporter'
$ps_prune_service = 'prometheus-prune.service'
$ps_prune_timer = 'prometheus-prune.timer'
# includes must be last
include prometheus_cd::main::config
}