You need to define different modules with the different sets of parameters 
you require, e.g.

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

Then you need to set __param_module to point to that (named) module.  The 
config I provided before copies the "module" label (set in the targets 
list) to the "__param_module" label.

The reason you should do this, rather than just set "__param_module" 
directly in the targets list, is because if you scrape the same target with 
multiple modules, you need the timeseries to be distinct; and the 
timeseries is defined by its set of labels.  Target labels which start with 
double-underscore are used to control scraping but are removed from the 
final label set.

BTW, I recommend using file_sd_configs rather than static_configs.  The 
format is exactly the same (a list of targets+labels), but you can change 
the targets file without having to HUP prometheus.

On Wednesday, 11 August 2021 at 00:04:29 UTC+1 Sebastian N. wrote:

> 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/d9827668-5b0c-4c76-b72c-3ecb7b6f80adn%40googlegroups.com.

Reply via email to