Well, there is a good reason to keep the port out of the "instance" label: 
it's very awkward to make a query to join two different different metrics 
collected from two different exporters on the same host, if one has (say) 
instance="foo:9100" and another has instance="foo:9104".  A second reason 
is that it's nicer in dashboards to see "foo" rather than "foo:9100"

See https://www.robustperception.io/controlling-the-instance-label

IMO the cleanest way to achieve this is to leave the port out of the 
targets file, copy __address__ to instance, and then append the exporter 
port statically to __address__.

However, you could leave the port number in the targets file, and strip it 
out to create the instance label:

      - source_labels: [__address__]
        regex: '(.*):[0-9]+'
        target_label: instance
        replacement: '${1}'

This would be useful if the same exporter were running on different ports 
on different hosts (fairly uncommon I think).

Also, you risk a collision of metrics if targets list includes the same 
host twice on two different ports in the same scrape job (which should be 
very unlikely).

On Thursday, 27 April 2023 at 15:14:03 UTC+1 Kolja Krückmann wrote:

> Hi Brian,
>
> thank you very much for your response!
> I just wanted to clarify, if it's better to "regex" the port to the end of 
> the address, or if it is equally fine to just add the port in the 
> target.yml to each target? (That's what im currently doing) Is it just best 
> practice with the regex expression or is there actually a technical reason 
> behind that?
>
> Kind regards
> Kolja
>
> Brian Candler schrieb am Dienstag, 18. April 2023 um 13:34:53 UTC+2:
>
>> Alternatively, you use rewriting rules.
>>
>> - targets:
>>   - SVR-DS01 172.25.X0.XXX
>>   - SRV-DS02 172.21.X1.XXX
>> ... etc
>>
>> and the corresponding relabel_configs in your scrape job could be 
>> something like this:
>>
>>     relabel_configs:
>>       # When __address__ consists of just a name or IP address,
>>       # copy it to the "instance" label.  This keeps the port
>>       # number out of the instance label.
>>       - source_labels: [__address__]
>>         regex: '([^ ]+)'
>>         target_label: instance
>>
>>       # When __address__ is of the form "name address", extract
>>       # name to "instance" label and address to "__address__"
>>       - source_labels: [__address__]
>>         regex: '(.+) (.+)'
>>         target_label: instance
>>         replacement: '${1}'
>>       - source_labels: [__address__]
>>         regex: '(.+) (.+)'
>>         target_label: __address__
>>         replacement: '${2}'
>>
>>       # Append port number to __address__ so that scrape gets
>>       # sent to the right port
>>       - source_labels: [__address__]
>>         target_label: __address__
>>         replacement: '${1}:9182'
>>
>> On Tuesday, 18 April 2023 at 11:14:23 UTC+1 Julius Volz wrote:
>>
>>> The labels in the SD file can only be provided for each target group 
>>> (the top-level list item type of the YAML file), so you'd have to do 
>>> something like this:
>>>
>>> - targets:
>>>   - [...first list of targets...]
>>>   labels:
>>>     instance: "A"
>>> - targets:
>>>   - [...second list of targets...]
>>>   labels:
>>>     instance: "B"
>>> - targets:
>>>   - [...third list of targets...]
>>>   labels:
>>>     instance: "C"
>>>   
>>>
>>> On Tue, Apr 18, 2023 at 11:20 AM Kolja Krückmann <kolja.kr...@opheo.com> 
>>> wrote:
>>>
>>>> Hi y'all I'm trying to get a label for each target in my file_sd_config
>>>>
>>>> my prom.yml is:
>>>> (redacted)
>>>>
>>>> # my global config
>>>> global:
>>>>   scrape_interval: 1m # Set the scrape interval to every 15 seconds. 
>>>> Default is every 1 minute.
>>>>   evaluation_interval: 30s # Evaluate rules every 15 seconds. The 
>>>> default is every 1 minute.
>>>>   scrape_timeout: 30s
>>>>
>>>> scrape_configs:
>>>>   # The job name is added as a label `job=<job_name>` to any timeseries 
>>>> scraped from this config.
>>>>   - job_name: 'node'
>>>>     file_sd_configs:
>>>>       - files:
>>>>         - 
>>>> C:/Prometheus/prometheus-2.41.0.windows-amd64/target_cluster_b.yml
>>>>
>>>> my target_cluster_b.yml:
>>>> - targets:
>>>>     - 172.25.X0.XXX:9182
>>>>     labels:
>>>>         instance: "SVR-DS01"
>>>>     - 172.21.X1.XXX:9182   
>>>>     - 172.25.X2.XXX:9182
>>>>     - 172.25.X3.XXX:9182
>>>>
>>>> as seen in the target.yml I want to try to get a label to each target - 
>>>> to see in the prom dashboard which ip is which targetname
>>>>
>>>> Thanks in advance.
>>>> Kind regards Kolja
>>>>
>>>> -- 
>>>> 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 prometheus-use...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/prometheus-users/fa4e5c9e-807b-4680-9640-592c8172e568n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/prometheus-users/fa4e5c9e-807b-4680-9640-592c8172e568n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
>>>
>>> -- 
>>> Julius Volz
>>> PromLabs - promlabs.com
>>>
>>

-- 
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 prometheus-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/9dd1ed1f-cdba-4248-9d34-30faed6b6107n%40googlegroups.com.

Reply via email to