mirror of https://gerrit.hackerspace.pl/hscloud
ops/monitoring/lib/cluster.libsonnet: scrape based on annotations
This adds automatic scraping of pods and services based on presence of annotations: - prometheus.io/scrape - prometheus.io/port - prometheus.io/path Change-Id: I1c1afecc75c30278889de1f6ca0b17da69997295 Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1850 Reviewed-by: implr <implr@hackerspace.pl>changes/50/1850/4
parent
4e46d5017a
commit
30a563c49f
|
@ -169,25 +169,124 @@ local kube = import "../../../kube/kube.libsonnet";
|
|||
static_configs: [
|
||||
{ targets: ["rook-ceph-mgr.ceph-waw3.svc.cluster.local:9283"], labels: { core_service: "ceph-mgr", ceph_cluster: "waw3" } }
|
||||
],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
remote_write: [
|
||||
// Srape pods having "prometheus.io/scrape: true" annotation
|
||||
// https://github.com/prometheus/prometheus/blob/release-2.48/documentation/examples/prometheus-kubernetes.yml#L262
|
||||
{
|
||||
url: u.remote,
|
||||
basic_auth: {
|
||||
username: cluster.cfg.username,
|
||||
password: u.password,
|
||||
job_name: "kubernetes-pods",
|
||||
scheme: "http",
|
||||
scrape_interval: "30s",
|
||||
kubernetes_sd_configs: [ {"role": "pod"} ],
|
||||
relabel_configs: [
|
||||
// "prometheus.io/scrape = true"
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_pod_annotation_prometheus_io_scrape"],
|
||||
action: "keep",
|
||||
regex: "true",
|
||||
},
|
||||
// "prometheus.io/path = something"
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_pod_annotation_prometheus_io_path"],
|
||||
action: "replace",
|
||||
target_label: "__metrics_path__",
|
||||
regex: "(.+)",
|
||||
},
|
||||
// "prometheus.io/port = 12345"
|
||||
{
|
||||
source_labels: ["__address__", "__meta_kubernetes_pod_annotation_prometheus_io_port"],
|
||||
action: "replace",
|
||||
regex: "([^:]+)(?::\\d+)?;(\\d+)",
|
||||
replacement: "$1:$2",
|
||||
target_label: "__address__",
|
||||
},
|
||||
{
|
||||
action: "labelmap",
|
||||
regex: "__meta_kubernetes_pod_label_(.+)",
|
||||
},
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_namespace"],
|
||||
action: "replace",
|
||||
target_label: "namespace",
|
||||
},
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_pod_name"],
|
||||
action: "replace",
|
||||
target_label: "pod"
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
job_name: "kubernetes-service-endpoints",
|
||||
kubernetes_sd_configs: [ {"role": "endpoints"} ],
|
||||
scheme: "http",
|
||||
scrape_interval: "30s",
|
||||
tls_config: {
|
||||
insecure_skip_verify: true,
|
||||
},
|
||||
}
|
||||
for u in cluster.cfg.upstreams
|
||||
],
|
||||
},
|
||||
relabel_configs: [
|
||||
// "prometheus.io/scrape = true"
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_service_annotation_prometheus_io_scrape"],
|
||||
action: "keep",
|
||||
regex: "true",
|
||||
},
|
||||
// "prometheus.io/path = something"
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_service_annotation_prometheus_io_path"],
|
||||
action: "replace",
|
||||
target_label: "__metrics_path__",
|
||||
regex: "(.+)",
|
||||
},
|
||||
// "prometheus.io/port = 12345"
|
||||
{
|
||||
source_labels: ["__address__", "__meta_kubernetes_service_annotation_prometheus_io_port"],
|
||||
action: "replace",
|
||||
regex: "([^:]+)(?::\\d+)?;(\\d+)",
|
||||
replacement: "$1:$2",
|
||||
target_label: "__address__",
|
||||
},
|
||||
// "prometheus.io/scheme = https"
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_service_annotation_prometheus_io_scheme"],
|
||||
action: "replace",
|
||||
target_label: "__scheme__",
|
||||
regex: "(https?)",
|
||||
},
|
||||
{
|
||||
action: "labelmap",
|
||||
regex: "__meta_kubernetes_service_label_(.+)",
|
||||
},
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_namespace"],
|
||||
action: "replace",
|
||||
target_label: "namespace",
|
||||
},
|
||||
{
|
||||
source_labels: ["__meta_kubernetes_service_name"],
|
||||
action: "replace",
|
||||
target_label: "service",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
configmap: kube.ConfigMap("prometheus-cluster") {
|
||||
metadata+: {
|
||||
namespace: cfg.namespace,
|
||||
},
|
||||
remote_write: [
|
||||
{
|
||||
url: u.remote,
|
||||
basic_auth: {
|
||||
username: cluster.cfg.username,
|
||||
password: u.password,
|
||||
},
|
||||
}
|
||||
for u in cluster.cfg.upstreams
|
||||
],
|
||||
},
|
||||
|
||||
configmap: kube.ConfigMap("prometheus-cluster") {
|
||||
metadata+: {
|
||||
namespace: cfg.namespace,
|
||||
},
|
||||
data: {
|
||||
"prometheus.yml": std.manifestYamlDoc(prometheus.configuration),
|
||||
},
|
||||
|
@ -222,6 +321,12 @@ local kube = import "../../../kube/kube.libsonnet";
|
|||
},
|
||||
spec+: {
|
||||
template+: {
|
||||
metadata+: {
|
||||
annotations+: {
|
||||
"prometheus.io/scrape": "true",
|
||||
"prometheus.io/port": "9090",
|
||||
},
|
||||
},
|
||||
spec+: {
|
||||
containers_: {
|
||||
default: kube.Container("default") {
|
||||
|
|
Loading…
Reference in New Issue