From ba32c8ee837d3a81e592d9eb7bf00bc07e3385d9 Mon Sep 17 00:00:00 2001 From: Julian Rother Date: Sat, 23 Nov 2024 01:41:53 +0100 Subject: [PATCH] promtail: Move scrape_configs into prometheus_agent.agents.promtail.scrape_jobs dict --- defaults/main.yml | 15 ++++++++++----- templates/promtail.yml.j2 | 29 +++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 82d3bd5..7c52462 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -51,15 +51,20 @@ prometheus_agent: positions: filename: /var/lib/promtail/positions.yaml # clients is generated based on prometheus_agent.scrapers - scrape_configs: - - job_name: system + # scrape_configs is generated based on prometheus_agent.agents.promtail.scrape_jobs + # "scrape_jobs" items have the same format as the "scrape_jobs" promtail + # config key. However, using a dictionary simplifies extending or changing + # the default scrape configs. Items with an empty value are ignored. + # The "job_name" field defaults to the item key. + scrape_jobs: + system: static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log - - job_name: journal + journal: journal: max_age: 12h labels: @@ -72,14 +77,14 @@ prometheus_agent: pipeline_stages: - structured_metadata: level: - - job_name: nginx + nginx: static_configs: - targets: - localhost labels: job: nginx __path__: /var/log/nginx/access-promtail.log - - job_name: postfix-bounces + postfix-bounces: static_configs: - targets: - localhost diff --git a/templates/promtail.yml.j2 b/templates/promtail.yml.j2 index 28e4fcc..03554c1 100644 --- a/templates/promtail.yml.j2 +++ b/templates/promtail.yml.j2 @@ -1,8 +1,21 @@ -{% if 'clients' not in prometheus_agent.agents.promtail.config %} -{% set tmp = prometheus_agent.agents.promtail.config.setdefault('clients', []) %} -{% for i in prometheus_agent.scrapers if prometheus_agent.scrapers[i].get("loki") %} -{% set lokiconfig = {}|combine({ "external_labels": merged_prometheus_labels|combine( {"instance": inventory_hostname} ) }, prometheus_agent.scrapers[i]['loki'] ) %} -{% set tmp = prometheus_agent.agents.promtail.config.clients.append(lokiconfig) %} -{% endfor %} -{% endif %} -{{ prometheus_agent.agents.promtail.config|to_nice_yaml(indent=2) }} +{%- set config = prometheus_agent.agents.promtail.config.copy() -%} + +{%- if 'clients' not in config -%} +{%- set tmp = config.setdefault('clients', []) -%} +{%- for i in prometheus_agent.scrapers if prometheus_agent.scrapers[i].get("loki") -%} +{%- set lokiconfig = {}|combine({ "external_labels": merged_prometheus_labels|combine( {"instance": inventory_hostname} ) }, prometheus_agent.scrapers[i]['loki'] ) -%} +{%- set tmp = config.clients.append(lokiconfig) -%} +{%- endfor -%} +{%- endif -%} + +{%- if 'scrape_configs' not in config -%} +{%- set tmp = config.setdefault('scrape_configs', []) -%} +{%- for key, value in prometheus_agent.agents.promtail.scrape_jobs.items() -%} +{%- set tmp = value.setdefault('job_name', key) -%} +{%- set tmp = config.scrape_configs.append(value) -%} +{%- endfor -%} +{%- endif -%} + +# {{ ansible_managed }} + +{{ config|to_nice_yaml(indent=2) }}