From aa7216d6e24b0cb389b7dafa871ab06015c977ea Mon Sep 17 00:00:00 2001 From: uumas Date: Tue, 21 Mar 2023 01:33:57 +0200 Subject: [PATCH] Add Prometheus role --- roles/prometheus/defaults/main.yml | 6 ++ roles/prometheus/meta/argument_specs.yml | 73 ++++++++++++++++++++ roles/prometheus/tasks/main.yml | 22 ++++++ roles/prometheus/templates/prometheus.yml.j2 | 34 +++++++++ 4 files changed, 135 insertions(+) create mode 100644 roles/prometheus/defaults/main.yml create mode 100644 roles/prometheus/meta/argument_specs.yml create mode 100644 roles/prometheus/tasks/main.yml create mode 100644 roles/prometheus/templates/prometheus.yml.j2 diff --git a/roles/prometheus/defaults/main.yml b/roles/prometheus/defaults/main.yml new file mode 100644 index 0000000..58f3607 --- /dev/null +++ b/roles/prometheus/defaults/main.yml @@ -0,0 +1,6 @@ +--- + +prometheus_scrape_interval: 5s +prometheus_evaluation_interval: 15s +prometheus_install_grafana: false +prometheus_hcloud_relabel_configs: [] diff --git a/roles/prometheus/meta/argument_specs.yml b/roles/prometheus/meta/argument_specs.yml new file mode 100644 index 0000000..32ec5d9 --- /dev/null +++ b/roles/prometheus/meta/argument_specs.yml @@ -0,0 +1,73 @@ +--- + +argument_specs: + main: + short_description: Prometheus docker container + options: + prometheus_scrape_interval: + description: Interval how often prometheus will scrape the monitoring targets + type: str + required: false + default: 5s + prometheus_evaluation_interval: + description: Interval how often prometheus will evaluate the scraped metrics against defined conditions + type: str + required: false + default: 15s + prometheus_hcloud_token: + description: Access token for hetzner cloud service discovery. It will be enabled if this variable is defined + type: str + required: false + prometheus_hcloud_relabel_configs: + description: Relabel configs for hcloud + type: list + required: false + default: [] + elements: dict + options: + source_labels: + type: list + required: true + elements: str + target_label: + type: str + required: true + replacement: + type: str + required: false + prometheus_install_grafana: + description: If true, installs grafana in the same docker network as prometheus and configures it with prometheus as data source + type: bool + required: false + default: false + + # All options after this will be passed directly to the container role + docker_service_suffix: + description: "Passed to container role" + required: false + docker_host_user: + description: "Passed to container role" + required: false + + database_passwords: + description: "Passed to container role" + required: false + docker_additional_services: + description: "Passed to container role" + required: false + + docker_volume_type: + description: "Passed to container role" + required: false + reverse_proxy_type: + description: "Passed to container role" + required: false + ports: + description: "Passed to container role" + required: false + docker_vhost_domains: + description: "Passed to container role" + required: false + docker_entrypoint: + description: "Passed to container role" + required: false diff --git a/roles/prometheus/tasks/main.yml b/roles/prometheus/tasks/main.yml new file mode 100644 index 0000000..54a2bef --- /dev/null +++ b/roles/prometheus/tasks/main.yml @@ -0,0 +1,22 @@ +--- + +- name: Prometheus container + import_role: + name: container + vars: + docker_service: prometheus + docker_image: prom/prometheus + reverse_proxy_type: none + docker_volumes: + - name: data + path: /prometheus + - template: prometheus.yml + path: /etc/prometheus/prometheus.yml + +- name: Grafana container for prometheus + include_role: + name: grafana + vars: + docker_networks: + - name: prometheus + when: prometheus_install_grafana diff --git a/roles/prometheus/templates/prometheus.yml.j2 b/roles/prometheus/templates/prometheus.yml.j2 new file mode 100644 index 0000000..67f64dd --- /dev/null +++ b/roles/prometheus/templates/prometheus.yml.j2 @@ -0,0 +1,34 @@ +--- + +# my global config +global: + scrape_interval: {{ prometheus_scrape_interval }} + evaluation_interval: {{ prometheus_evaluation_interval }} + +# Alertmanager configuration +alerting: + alertmanagers: + - static_configs: + - targets: + # - alertmanager:9093 + +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: + # - "first_rules.yml" + # - "second_rules.yml" + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + - job_name: "prometheus" + static_configs: + - targets: ["localhost:9090"] + +{% if prometheus_hcloud_token is defined %} + - job_name: hcloud + hetzner_sd_configs: + - role: hcloud + authorization: + credentials: {{ prometheus_hcloud_token }} + relabel_configs: {{ prometheus_hcloud_relabel_configs }} +{% endif %}