Hey Brian, 

thanks for the quick and detailed answer. It's really insightful so I'll be 
sure to adapt that to our needs. However, I'm still a bit lost how I can 
solve my requirement (maybe my approach is wrong or it's simply not 
possible).
Given this blackbox-exporter module definition...

modules:
  http_2xx:
    prober: http
    timeout: 10s
    http:
      follow_redirects: false
      headers:
        User-Agent: "BlackBox-Exporter/EO"
      preferred_ip_protocol: "ip4"

and this Prometheus scraping config...

prometheus_scrape_configs:
  scrape_configs:
    - job_name: 'blackbox-http'
      scrape_interval: 5m
      metrics_path: /probe
      params:
        module: [http_2xx]
      static_configs:
        - targets:
            - https://foo.dev.contoso.com/
            - https://foo.dev.contoso.com/cms/
            - https://foo.dev.contoso.com/dealer-portal/
            - https://bar.dev.contoso.com/
            - https://bar.dev.contoso.com/cms/
            - https://bar.dev.contoso.com/dealer-portal/
          labels:
            env: dev
        - targets:
            - https://foo.int.contoso.com/
            - https://foo.int.contoso.com/cms/
            - https://foo.int.contoso.com/dealer-portal/
            - https://bar.int.contoso.com/
            - https://bar.int.contoso.com/cms/
            - https://bar.int.contoso.com/dealer-portal/
          labels:
            env: int
        - targets:
            - https://foo.contoso.com/
            - https://foo.contoso.com/cms/
            - https://foo.contoso.com/dealer-portal/
            - https://bar.contoso.com/
            - https://bar.contoso.com/cms/
            - https://bar.contoso.com/dealer-portal/
          labels:
            env: prod
      relabel_configs:
        - source_labels: [__address__]
          target_label: __param_target
        - source_labels: [__param_target]
          target_label: instance
        - target_label: __address__
          replacement: blackbox-exporter:9115 # Docker service name
        - target_label: project
          replacement: contoso

...is there any way to override the module parameters on a per-target 
basis? E.g. change user agent, enable/disable certificate trust, 
enable/disable following redirects for a single target?

Kind regards,
Seb


On Friday, August 6, 2021 at 1:32:29 PM UTC+2 Brian Candler wrote:

> This should work:
>
>   - job_name: blackbox
>     file_sd_configs:
>       - files:
>         - /etc/prometheus/blackbox.d/*.yml
>     metrics_path: /probe
>     relabel_configs:
>       - source_labels: [__address__]
>         target_label: __param_target
>       - source_labels: [module]
>         target_label: __param_module
>       - target_label: __address__
>         replacement: 127.0.0.1:9115  # Blackbox exporter
>
> That is, you set a label "module" in your targets file, and it gets copied 
> to __param_module.  Your targets files /etc/prometheus/blackbox.d/foo.yml 
> look like this:
>
> - labels:
>     module: icmp
>   targets:
>     - 1.1.1.1
>     - 2.2.2.2
> - labels:
>     module: dns
>   targets:
>     - 3.3.3.3
> ... etc
>
> All your blackbox scrapes are done in a single job.
>
> The actual config I use is a little more complex than that:
>
>   - job_name: blackbox
>     file_sd_configs:
>       - files:
>         - /etc/prometheus/blackbox.d/*.yml
>     metrics_path: /probe
>     relabel_configs:
>       - source_labels: [__address__]
>         regex: '([^/]+)'  # name or address only
>         target_label: instance
>       - source_labels: [__address__]
>         regex: '([^/]+)'  # name or address only
>         target_label: __param_target
>       - source_labels: [__address__]
>         regex: '(.+)/(.+)'  # name/address
>         target_label: instance
>         replacement: '${1}'
>       - source_labels: [__address__]
>         regex: '(.+)/(.+)'  # name/address
>         target_label: __param_target
>         replacement: '${2}'
>       - source_labels: [module]
>         target_label: __param_module
>       - target_label: __address__
>         replacement: 127.0.0.1:9115  # Blackbox exporter
>
> This lets me use target entries of the form 
> "<instance-label>/<address-or-hostname>", e.g.
>
> - labels:
>     module: icmp
>   targets:
>     - google-primary/8.8.8.8
>     - google-secondary/8.8.4.4
>
> so my metrics have meaningful instance labels 
> <https://www.robustperception.io/controlling-the-instance-label>.
>
> On Friday, 6 August 2021 at 10:17:06 UTC+1 Sebastian N. wrote:
>
>> Hey guys,
>>
>> In the following discussion 
>> <https://groups.google.com/g/prometheus-users/c/a0uePOVkG1c/m/4u0NwDN5AwAJ> 
>> about the blackbox exporter Julius Volz mentioned the following:
>>
>> The Blackbox targets to probe (like "https://google.com";) can come from 
>> file_sd (or any other SD), no problem. You still need a scrape config in 
>> the Prometheus config that actually scrapes the Blackbox exporter, but it 
>> can get targets to probe from file_sd. *You can even vary the Blackbox 
>> Exporter probe module to use for each target by setting a "__param_module" 
>> hidden label on each target to override any "module" HTTP param that is set 
>> in the scrape config itself.*
>>
>> During my research I have not found an example that shows me how I can 
>> override module parameters on a per-target basis. My use case is that I'd 
>> like to set a different user agent or toggle the follow_redirects flag for 
>> some hosts without having to create another scraping job for that.  
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/b3bd2db5-a161-4a01-be7c-59d8cf7665f8n%40googlegroups.com.

Reply via email to