From 25a6edfe7579bf22c36c41d0b2a6e9403f94dc4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Tue, 1 Dec 2020 13:18:27 +0100 Subject: [PATCH] Add minimal types for prometheus and its blackbox exporter --- type/__prometheus/files/prometheus.yml.sh | 29 +++++++++++++ type/__prometheus/manifest | 42 +++++++++++++++++++ type/__prometheus/parameter/optional | 2 + type/__prometheus/parameter/optional_multiple | 1 + type/__prometheus/singleton | 0 type/__prometheus_blackbox_exporter/manifest | 19 +++++++++ type/__prometheus_blackbox_exporter/singleton | 0 7 files changed, 93 insertions(+) create mode 100755 type/__prometheus/files/prometheus.yml.sh create mode 100644 type/__prometheus/manifest create mode 100644 type/__prometheus/parameter/optional create mode 100644 type/__prometheus/parameter/optional_multiple create mode 100644 type/__prometheus/singleton create mode 100644 type/__prometheus_blackbox_exporter/manifest create mode 100644 type/__prometheus_blackbox_exporter/singleton diff --git a/type/__prometheus/files/prometheus.yml.sh b/type/__prometheus/files/prometheus.yml.sh new file mode 100755 index 0000000..9d23f31 --- /dev/null +++ b/type/__prometheus/files/prometheus.yml.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +cat << EOF +global: + scrape_interval: ${GLOBAL_SCRAPE_INTERVAL:?} # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: ${GLOBAL_EVALUATION_INTERVAL:?} # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: $EXTERNAL_LABELS + +# Alertmanager configuration +alerting: + alertmanagers: + - static_configs: + - targets: [ $ALERTMANAGER_ADDR ] + +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: [ $RULE_FILES ] + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: +EOF + +for config in $SCRAPE_JOB_CONFIGS; do + sed 's/^/ /' < "$config" +done diff --git a/type/__prometheus/manifest b/type/__prometheus/manifest new file mode 100644 index 0000000..b8df358 --- /dev/null +++ b/type/__prometheus/manifest @@ -0,0 +1,42 @@ +#!/bin/sh + +os="$(cat "${__global:?}/explorer/os")" +case "$os" in + alpine|debian|ubuntu) + __package prometheus + ;; + *) + echo "This type does not supper $os. Exiting." >&2 + exit 1 + ;; +esac + +export GLOBAL_SCRAPE_INTERVAL=60s +export GLOBAL_EVALUATION_INTERVAL=60s + +export EXTERNAL_LABELS= + +if [ -f "${__object:?}/parameter/alertmanager-addr" ]; then + ALERTMANAGER_ADDR=$(cat "${__object:?}/parameter/alertmanager-addr") +fi +export ALERTMANAGER_ADDR + +if [ -f "${__object:?}/parameter/rule-files" ]; then + RULE_FILES=$(cat "${__object:?}/parameter/rule-files") +fi +export RULE_FILES + +SCRAPE_JOB_CONFIGS=$(cat "${__object:?}/parameter/scrape-job-config") +export SCRAPE_JOB_CONFIGS + +# Generate and deploy configuration +mkdir -p "${__object:?}/files" +"${__type:?}/files/prometheus.yml.sh" > "${__object:?}/files/prometheus.yml" + +require="__package/prometheus" __file /etc/prometheus/prometheus.yml \ + --source "${__object:?}/files/prometheus.yml" \ + --mode 0644 \ + --onchange "service prometheus restart" + +require="__package/prometheus" __start_on_boot prometheus +require="__package/prometheus" __service prometheus --action start diff --git a/type/__prometheus/parameter/optional b/type/__prometheus/parameter/optional new file mode 100644 index 0000000..91659dc --- /dev/null +++ b/type/__prometheus/parameter/optional @@ -0,0 +1,2 @@ +alertmanager-addr +rule_files diff --git a/type/__prometheus/parameter/optional_multiple b/type/__prometheus/parameter/optional_multiple new file mode 100644 index 0000000..f33da08 --- /dev/null +++ b/type/__prometheus/parameter/optional_multiple @@ -0,0 +1 @@ +scrape-job-config diff --git a/type/__prometheus/singleton b/type/__prometheus/singleton new file mode 100644 index 0000000..e69de29 diff --git a/type/__prometheus_blackbox_exporter/manifest b/type/__prometheus_blackbox_exporter/manifest new file mode 100644 index 0000000..51f3f63 --- /dev/null +++ b/type/__prometheus_blackbox_exporter/manifest @@ -0,0 +1,19 @@ +#!/bin/sh + +os="$(cat "${__global:?}/explorer/os")" +case "$os" in + alpine) + __package blackbox_exporter + require="__package/blackbox_exporter" __start_on_boot \ + blackbox_exporter + require="__package/blackbox_exporter" __service \ + blackbox_exporter --action start + ;; + debian|ubuntu) + __package prometheus-blackbox-exporter + ;; + *) + echo "This type does not supper $os. Exiting." >&2 + exit 1 + ;; +esac diff --git a/type/__prometheus_blackbox_exporter/singleton b/type/__prometheus_blackbox_exporter/singleton new file mode 100644 index 0000000..e69de29