Awesome
dhall-prometheus
dhall-prometheus
contains Dhall bindings to Prometheus configuration.
The schema is generated from json SchemaStore.
Example
-- ./examples/demo.dhall
let Prometheus = ../package.dhall
let web_monitor_list =
[ "https://www.softwarefactory-project.io"
, "https://softwarefactory-project.io/zuul/api/info"
, "https://review.rdoproject.org/zuul/api/info"
, "https://ovirt.softwarefactory-project.io/zuul/api/info"
, "https://ansible.softwarefactory-project.io/zuul/api/info"
]
let host_list = [ "bridge:9100", "zuul:9100", "nodepool:9100" ]
in Prometheus.Config::{
, global = Some Prometheus.Global::{
, scrape_interval = Some "1m"
, scrape_timeout = Some "10s"
, evaluation_interval = Some "1m"
}
, alerting = Some Prometheus.Alerting::{
, alertmanagers = Some
[ Prometheus.Alertmanager::{
, path_prefix = Some "/alertmanager"
, static_configs = Some
[ Prometheus.StaticConfig::{ targets = Some [ "localhost:9093" ] } ]
}
]
}
, scrape_configs = Some
[ Prometheus.ScrapeConfig::{
, job_name = Some "node"
, static_configs = Some
[ Prometheus.StaticConfig::{
, targets = Some host_list
, labels = Some (Prometheus.Labels.severity "critical")
}
]
}
, Prometheus.ScrapeConfig::{
, job_name = Some "federate"
, honor_labels = Some True
, metrics_path = Some "/federate"
, params = Some
[ { mapKey = "match[]"
, mapValue = [ "{job='prometheus'}", "{__name__=~'job:.*'}" ]
}
]
, static_configs = Some
[ Prometheus.StaticConfig::{ targets = Some host_list } ]
}
, Prometheus.ScrapeConfig::{
, job_name = Some "blackbox"
, static_configs = Some
[ Prometheus.StaticConfig::{ targets = Some web_monitor_list } ]
, scrape_interval = Some "5m"
, metrics_path = Some "/probe"
, params = Some [ { mapKey = "module", mapValue = [ "http_2xx" ] } ]
, relabel_configs = Some
[ Prometheus.RelabelConfig::{
, source_labels = Some [ "__address__" ]
, target_label = Some "__param_target"
}
, Prometheus.RelabelConfig::{
, source_labels = Some [ "__param_target" ]
, target_label = Some "instance"
}
, Prometheus.RelabelConfig::{
, target_label = Some "__address__"
, replacement =
let note = "# Blackbox exporter" in Some "127.0.0.1:9115"
}
]
}
]
}
# dhall-to-yaml --file examples/demo.dhall
alerting:
alertmanagers:
- path_prefix: /alertmanager
static_configs:
- targets:
- localhost:9093
global:
evaluation_interval: "1m"
scrape_interval: "1m"
scrape_timeout: "10s"
scrape_configs:
- job_name: node
static_configs:
- labels:
severity: critical
targets:
- bridge:9100
- zuul:9100
- nodepool:9100
- honor_labels: true
job_name: federate
metrics_path: /federate
params:
"match[]":
- "{job='prometheus'}"
- "{__name__=~'job:.*'}"
static_configs:
- targets:
- bridge:9100
- zuul:9100
- nodepool:9100
- job_name: blackbox
metrics_path: /probe
params:
module:
- http_2xx
relabel_configs:
- source_labels:
- "__address__"
target_label: "__param_target"
- source_labels:
- "__param_target"
target_label: instance
- replacement: "127.0.0.1:9115"
target_label: "__address__"
scrape_interval: "5m"
static_configs:
- targets:
- https://www.softwarefactory-project.io
- https://softwarefactory-project.io/zuul/api/info
- https://review.rdoproject.org/zuul/api/info
- https://ovirt.softwarefactory-project.io/zuul/api/info
- https://ansible.softwarefactory-project.io/zuul/api/info
To define custom labels, use the Labels.mapText
function or create your own JSON/Type:
-- ./examples/labels.dhall
let Prometheus = ../package.dhall
in Prometheus.Config::{
, global = Some Prometheus.Global::{
, external_labels = Some
(Prometheus.Labels.mapText (toMap { my-label = "custom-value" }))
}
}
# dhall-to-yaml --file examples/labels.dhall
global:
external_labels:
my-label: custom-value
Changes
Frozen packages are available in the tag commit.
0.1.0
- Initial release