Hi, Julius!
Thanks for quick reply.
Yes, you are right, if I will use separate http.ServeMux on separate server
I will loose "promhttp_*" metrics for my application(because they will be
counted for separate server).
I have found the solution, but don't like it.
<pre style='color:#d1d1d1;background:#000000;'>type discardResponseWriter
<span style='color:#e66170; font-weight:bold; '>struct</span><span
style='color:#b060b0; '>{</span><span style='color:#b060b0; '>}</span>
func <span style='color:#d2cd86; '>(</span>d <span style='color:#d2cd86;
'>*</span>discardResponseWriter<span style='color:#d2cd86; '>)</span>
Header<span style='color:#d2cd86; '>(</span><span style='color:#d2cd86;
'>)</span> http<span style='color:#d2cd86; '>.</span>Header <span
style='color:#b060b0; '>{</span>
<span style='color:#e66170; font-weight:bold; '>return</span> make<span
style='color:#d2cd86; '>(</span>http<span style='color:#d2cd86;
'>.</span>Header<span style='color:#d2cd86; '>)</span>
<span style='color:#b060b0; '>}</span>
func <span style='color:#d2cd86; '>(</span>d <span style='color:#d2cd86;
'>*</span>discardResponseWriter<span style='color:#d2cd86; '>)</span>
Write<span style='color:#d2cd86; '>(</span>b <span style='color:#d2cd86;
'>[</span><span style='color:#d2cd86; '>]</span>byte<span
style='color:#d2cd86; '>)</span> <span style='color:#d2cd86;
'>(</span><span style='color:#e66170; font-weight:bold; '>int</span><span
style='color:#d2cd86; '>,</span> error<span style='color:#d2cd86;
'>)</span> <span style='color:#b060b0; '>{</span>
<span style='color:#e66170; font-weight:bold; '>return</span> io<span
style='color:#d2cd86; '>.</span>Discard<span style='color:#d2cd86;
'>.</span>Write<span style='color:#d2cd86; '>(</span>b<span
style='color:#d2cd86; '>)</span>
<span style='color:#b060b0; '>}</span>
func <span style='color:#d2cd86; '>(</span>d <span style='color:#d2cd86;
'>*</span>discardResponseWriter<span style='color:#d2cd86; '>)</span>
WriteHeader<span style='color:#d2cd86; '>(</span>statusCode <span
style='color:#e66170; font-weight:bold; '>int</span><span
style='color:#d2cd86; '>)</span> <span style='color:#b060b0; '>{</span>
<span style='color:#b060b0; '>}</span>
func Middleware<span style='color:#d2cd86; '>(</span><span
style='color:#d2cd86; '>)</span> func<span style='color:#d2cd86;
'>(</span>next http<span style='color:#d2cd86; '>.</span><span
style='color:#e66170; font-weight:bold; '>Handler</span><span
style='color:#d2cd86; '>)</span> http<span style='color:#d2cd86;
'>.</span><span style='color:#e66170; font-weight:bold; '>Handler</span>
<span style='color:#b060b0; '>{</span>
metric <span style='color:#b060b0; '>:</span><span
style='color:#d2cd86; '>=</span> prometheus<span style='color:#d2cd86;
'>.</span>NewHistogramVec<span style='color:#d2cd86;
'>(</span>prometheus<span style='color:#d2cd86;
'>.</span>HistogramOpts<span style='color:#ffffff; background:#dd0000;
'>{</span>
Name<span style='color:#b060b0; '>:</span> <span
style='color:#02d045; '>"</span><span style='color:#00c4c4;
'>promhttp_metric_handler_requests_duration_seconds</span><span
style='color:#02d045; '>"</span><span style='color:#d2cd86; '>,</span>
Help<span style='color:#b060b0; '>:</span> <span
style='color:#02d045; '>"</span><span style='color:#00c4c4; '>Request
duration for method + url in seconds</span><span style='color:#02d045;
'>"</span><span style='color:#d2cd86; '>,</span>
<span style='color:#ffffff; background:#dd0000; '>}</span><span
style='color:#d2cd86; '>,</span> <span style='color:#d2cd86;
'>[</span><span style='color:#d2cd86; '>]</span>string<span
style='color:#ffffff; background:#dd0000; '>{</span><span
style='color:#02d045; '>"</span><span style='color:#00c4c4;
'>method</span><span style='color:#02d045; '>"</span><span
style='color:#d2cd86; '>,</span> <span style='color:#02d045;
'>"</span><span style='color:#00c4c4; '>url</span><span
style='color:#02d045; '>"</span><span style='color:#ffffff;
background:#dd0000; '>}</span><span style='color:#d2cd86; '>)</span>
prometheus<span style='color:#d2cd86; '>.</span>MustRegister<span
style='color:#d2cd86; '>(</span>metric<span style='color:#d2cd86; '>)</span>
h <span style='color:#b060b0; '>:</span><span style='color:#d2cd86;
'>=</span> promhttp<span style='color:#d2cd86; '>.</span><span
style='color:#e66170; font-weight:bold; '>Handler</span><span
style='color:#d2cd86; '>(</span><span style='color:#d2cd86; '>)</span>
<span style='color:#e66170; font-weight:bold; '>return</span> func<span
style='color:#d2cd86; '>(</span>next http<span style='color:#d2cd86;
'>.</span><span style='color:#e66170; font-weight:bold;
'>Handler</span><span style='color:#d2cd86; '>)</span> http<span
style='color:#d2cd86; '>.</span><span style='color:#e66170;
font-weight:bold; '>Handler</span> <span style='color:#b060b0; '>{</span>
<span style='color:#e66170; font-weight:bold; '>return</span>
http<span style='color:#d2cd86; '>.</span>HandlerFunc<span
style='color:#d2cd86; '>(</span>func<span style='color:#d2cd86; '>(</span>w
http<span style='color:#d2cd86; '>.</span>ResponseWriter<span
style='color:#d2cd86; '>,</span> r <span style='color:#d2cd86;
'>*</span>http<span style='color:#d2cd86; '>.</span>Request<span
style='color:#d2cd86; '>)</span> <span style='color:#ffffff;
background:#dd0000; '>{</span>
h<span style='color:#d2cd86; '>.</span>ServeHTTP<span
style='color:#d2cd86; '>(</span><span style='color:#d2cd86;
'>&</span>discardResponseWriter<span style='color:#ffffff;
background:#dd0000; '>{</span><span style='color:#ffffff;
background:#dd0000; '>}</span><span style='color:#d2cd86; '>,</span> r<span
style='color:#d2cd86; '>)</span>
start <span style='color:#b060b0; '>:</span><span
style='color:#d2cd86; '>=</span> time<span style='color:#d2cd86;
'>.</span>Now<span style='color:#d2cd86; '>(</span><span
style='color:#d2cd86; '>)</span>
next<span style='color:#d2cd86; '>.</span>ServeHTTP<span
style='color:#d2cd86; '>(</span>w<span style='color:#d2cd86; '>,</span>
r<span style='color:#d2cd86; '>)</span>
metric<span style='color:#d2cd86;
'>.</span>WithLabelValues<span style='color:#d2cd86; '>(</span>r<span
style='color:#d2cd86; '>.</span>Method<span style='color:#d2cd86;
'>,</span> r<span style='color:#d2cd86; '>.</span>URL<span
style='color:#d2cd86; '>.</span>Path<span style='color:#d2cd86;
'>)</span><span style='color:#d2cd86; '>.</span>Observe<span
style='color:#d2cd86; '>(</span>time<span style='color:#d2cd86;
'>.</span>Since<span style='color:#d2cd86; '>(</span>start<span
style='color:#d2cd86; '>)</span><span style='color:#d2cd86;
'>.</span>Seconds<span style='color:#d2cd86; '>(</span><span
style='color:#d2cd86; '>)</span><span style='color:#d2cd86; '>)</span>
<span style='color:#ffffff; background:#dd0000; '>}</span><span
style='color:#d2cd86; '>)</span>
<span style='color:#b060b0; '>}</span>
<span style='color:#b060b0; '>}</span>
</pre>
<!--Created using ToHtml.com on 2022-08-17 09:54:56 UTC -->
вторник, 16 августа 2022 г. в 21:05:14 UTC+3, [email protected]:
> Hi Alex,
>
> both approaches are generally fine, based on your needs. With "losing
> instrumentation metrics", do you mean the "promhttp_*" metrics about the
> scrape itself? Those should still be present when just using
> "promhttp.Handler()" on a different http.ServeMux and starting a second
> server for that ServeMux. Could you share the relevant lines of your code
> and/or elaborate?
>
> Regards,
> Julius
>
> On Mon, Aug 15, 2022 at 11:34 PM Oleksandr Matsak <[email protected]>
> wrote:
>
>> Hi!
>>
>> I have REST API application and looking for solution for exposing metrics
>> endpoint for internal only access.
>>
>> I can see two options:
>>
>> 1. use same *http.Server* as application and protect endpoint with
>> supported auth flow (basic, token, etc)
>> 2. use different *http.Server* on internal port without any
>> authentication
>>
>> First has drawback of hardcoding auth credentials on both infrastructure
>> and application sides, I want to avoid it.
>>
>> While considering second, found that if just put *promhttp.Handler* to
>> separate server I will loose instrumentation metrics.
>>
>> So how do I see it:
>>
>> - put instrumentation metrics middleware to application server
>> - run another server on internal only port with metrics output handler
>>
>> Any advise ?
>>
>> Thanks,
>> Alex
>>
>> --
>> 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/54038168-acda-40f2-97f7-7fc1212e926cn%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/prometheus-users/54038168-acda-40f2-97f7-7fc1212e926cn%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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/prometheus-users/4c5d624c-80db-4723-aa3e-9dd7ea7c0870n%40googlegroups.com.