Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

Commit

Permalink
Refactor rootfs/dockerswarm/dockerswarm-services.yml -> rootfs/docker…
Browse files Browse the repository at this point in the history
…swarm/dockerswarm-endpoints-nodeport.yml
  • Loading branch information
socheatsok78 committed Jun 12, 2024
1 parent 9d3fcf1 commit a5e9b35
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 17 deletions.
110 changes: 110 additions & 0 deletions rootfs/dockerswarm/dockerswarm-endpoints-ingresses.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# The scrape config for probing services via the Blackbox Exporter.
#
# The relabeling allows the actual service scrape endpoint to be configured
# for all or only some services.
#
# Annotations:
# io.prometheus.probe_enabled=<true|false>
# io.prometheus.probe_disabled=<true|false>
#
# io.prometheus.dockerswarm-endpoints.should_be_probed=<true|false>
scrape_configs:

- job_name: 'dockerswarm-endpoints-ingresses'
scrape_interval: 15s

metrics_path: /probe
params:
module: [icmp_ttl5]

dockerswarm_sd_configs:
- host: unix:///var/run/docker.sock
role: services
refresh_interval: 10s

relabel_configs:
# ================================================================================
# Keep or drop targets with the following rules
# ================================================================================

# io.prometheus.dockerswarm-endpoints.should_be_probed=<true|false>
- source_labels:
- __meta_dockerswarm_service_label_io_prometheus_dockerswarm_endpoints_should_be_probed
regex: 'false'
action: drop

# io.prometheus.probe_enabled=<true|false>
- source_labels:
- __meta_dockerswarm_service_label_io_prometheus_probe_enabled
regex: 'false'
action: drop
# io.prometheus.probe_disabled=<true|false>
- source_labels:
- __meta_dockerswarm_service_label_io_prometheus_probe_disabled
regex: 'false'
action: drop

# Keep only tasks connected to the "host" network
- source_labels:
- __meta_dockerswarm_network_ingress
regex: 'true'
action: keep
- source_labels:
- __meta_dockerswarm_service_endpoint_port_publish_mode
regex: 'ingress'
action: keep

# ================================================================================
# Override prometheus and blackbox internal labels
# ================================================================================
- source_labels:
- __address__
target_label: __tmp_target
regex: ([^:]+)(?::\d+)?
replacement: $1
- source_labels: [__address__]
target_label: __tmp_address
- source_labels: [__tmp_target]
target_label: __param_target
- target_label: __address__
replacement: blackbox-exporter.svc.cluster.local:9115
- source_labels: [__tmp_address]
target_label: instance

# Drop all labels starting with "io.prometheus."
- action: labeldrop
regex: __meta_(dockerswarm_service_label_io_prometheus_.+)

# ================================================================================
# Label mapping
# ================================================================================
- action: labelmap
regex: __meta_(dockerswarm_.+)

# ================================================================================
# Kubernetes compatible relabeling
# - namespace
# - deployment
# - pod
# ================================================================================
# Set Kubernetes's Namespace with "com.docker.stack.namespace" label
- source_labels:
- __meta_dockerswarm_service_label_com_docker_stack_namespace
target_label: namespace

# Set Kubernetes's Deployment with "com.docker.stack.namespace" label
- source_labels:
- __meta_dockerswarm_service_label_com_docker_stack_namespace
target_label: deployment

# Set Kubernetes' Service Name with Docker Swarm's Service Name
- source_labels:
- __meta_dockerswarm_service_name
target_label: service
separator: '.'

# Set Kubernetes's Pod Name with Docker Swarm's Service Name
- source_labels:
- __meta_dockerswarm_service_name
target_label: pod
separator: '.'
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
# io.prometheus.dockerswarm-services.should_be_probed=<true|false>
scrape_configs:

- job_name: 'dockerswarm-services'
- job_name: 'dockerswarm-endpoints-nodeport'
scrape_interval: 15s

metrics_path: /probe
params:
module: [http_2xx]
module: [icmp_ttl5]

dockerswarm_sd_configs:
- host: unix:///var/run/docker.sock
Expand All @@ -29,7 +29,7 @@ scrape_configs:

# io.prometheus.dockerswarm-services.should_be_probed=<true|false>
- source_labels:
- __meta_dockerswarm_service_label_io_prometheus_dockerswarm_services_should_be_probed
- __meta_dockerswarm_service_label_io_prometheus_dockerswarm_endpoints_should_be_probed
regex: 'false'
action: drop

Expand All @@ -44,7 +44,15 @@ scrape_configs:
regex: 'false'
action: drop

# Keep only tasks connected to the "dockerswarm_metrics" network
# Keep only tasks connected to the "ingress" network
- source_labels:
- __meta_dockerswarm_network_ingress
regex: 'true'
action: drop
- source_labels:
- __meta_dockerswarm_service_endpoint_port_publish_mode
regex: 'host'
action: keep
- source_labels:
- __meta_dockerswarm_network_name
regex: (^dockerswarm_metrics$)
Expand All @@ -53,11 +61,18 @@ scrape_configs:
# ================================================================================
# Override prometheus and blackbox internal labels
# ================================================================================
- source_labels:
- __address__
target_label: __tmp_target
regex: ([^:]+)(?::\d+)?
replacement: $1
- source_labels: [__address__]
target_label: __tmp_address
- source_labels: [__tmp_target]
target_label: __param_target
- target_label: __address__
replacement: blackbox-exporter.svc.cluster.local:9115
- source_labels: [__param_target]
- source_labels: [__tmp_address]
target_label: instance

# Drop all labels starting with "io.prometheus."
Expand Down
28 changes: 16 additions & 12 deletions test/docker-stack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ services:
labels:
io.prometheus.role: "prometheus"
io.prometheus.dockerswarm-tasks.should_be_scraped: "false"
io.prometheus.dockerswarm-services.should_be_probed: "false"
io.prometheus.dockerswarm-endpoints.should_be_probed: "false"
logging: *x-default-logging
environment:
- DOCKERSWARM_SERVICE_ID={{.Service.ID}}
Expand Down Expand Up @@ -97,15 +97,19 @@ services:

blackbox-exporter:
image: prom/blackbox-exporter:latest
command: --config.file=/etc/blackbox_exporter/config.yml --log.level=debug
deploy:
replicas: 1
resources: *x-exporter-resources-constraints
labels:
io.prometheus.enabled: "true"
io.prometheus.job_name: "blackbox-exporter"
io.prometheus.scrape_port: "9115"
io.prometheus.dockerswarm-services.should_be_probed: "false"
io.prometheus.dockerswarm-endpoints.should_be_probed: "false"
logging: *x-default-logging
ports:
- published: 9115
target: 9115
hostname: blackbox-exporter.svc.cluster.local
networks:
dockerswarm_metrics:
Expand All @@ -124,12 +128,12 @@ services:
labels:
io.prometheus.role: "node-exporter"
io.prometheus.dockerswarm-tasks.should_be_scraped: "false"
io.prometheus.dockerswarm-services.should_be_probed: "false"
io.prometheus.dockerswarm-endpoints.should_be_probed: "false"
logging: *x-default-logging
# ports:
# - published: 9100
# target: 9100
# mode: host
ports:
- published: 9100
target: 9100
mode: host
networks:
prometheus_exporter:
hostname: node-exporter.{{.Node.ID}}.cluster.local
Expand All @@ -153,12 +157,12 @@ services:
labels:
io.prometheus.role: "cadvisor"
io.prometheus.dockerswarm-tasks.should_be_scraped: "false"
io.prometheus.dockerswarm-services.should_be_probed: "false"
io.prometheus.dockerswarm-endpoints.should_be_probed: "false"
logging: *x-default-logging
# ports:
# - published: 8080
# target: 8080
# mode: host
ports:
- published: 8080
target: 8080
mode: host
networks:
prometheus_exporter:
hostname: cadvisor.{{.Node.ID}}.cluster.local
Expand Down

0 comments on commit a5e9b35

Please sign in to comment.