• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..23-Dec-2021-

READMEH A D23-Dec-202116.7 KiB355316

service-prometheus.cH A D23-Dec-202167.3 KiB1,5761,255

README

1PROMEX: A Prometheus exporter for HAProxy
2-------------------------------------------
3
4Prometheus is a monitoring and alerting system. More and more people use it to
5monitor their environment (this is written February 2019). It collects metrics
6from monitored targets by scraping metrics HTTP endpoints on these targets. For
7HAProxy, The Prometheus team officially supports an exporter written in Go
8(https://github.com/prometheus/haproxy_exporter). But it requires an extra
9software to deploy and monitor. PROMEX, on its side, is a built-in Prometheus
10exporter for HAProxy. It was developed as a service and is directly available in
11HAProxy, like the stats applet.
12
13However, PROMEX is not built by default with HAProxy. It is provided as an extra
14component for everyone want to use it. So you need to explicitly build HAProxy
15with the PROMEX service, setting the Makefile variable "USE_PROMEX" to "1". For
16instance:
17
18    > make TARGET=linux-glibc USE_PROMEX=1
19
20if HAProxy provides the PROMEX service, the following build option will be
21reported by the command "haproxy -vv":
22
23    Built with the Prometheus exporter as a service
24
25To be used, it must be enabled in the configuration with an "http-request" rule
26and the corresponding HTTP proxy must enable the HTX support. For instance:
27
28    frontend test
29        mode http
30        ...
31        http-request use-service prometheus-exporter if { path /metrics }
32        ...
33
34
35This service has been developed as a third-party component because it could
36become obsolete, depending on how much time Prometheus will remain heavily
37used. This is said with no ulterior motive of course. Prometheus is a great
38software and I hope all the well for it. But we involve in a environment moving
39quickly and a solution may be obvious today could be deprecated the next
40year. And because PROMEX is not integrated by default into the HAProxy codebase,
41it will need some interest to be actively supported. All contribution of any
42kind are welcome.
43
44You must also be careful if you use with huge configurations. Unlike the stats
45applet, all metrics are not grouped by service (proxy, listener or server). With
46PROMEX, all lines for a given metric are provided as one single group. So
47instead of collecting all metrics for a proxy before moving to the next one, we
48must loop on all proxies for each metric. Same for the servers. Thus, it will
49spend much more resources to produce the Prometheus metrics than the CSV export
50through the stats page. To give a comparison order, quick benchmarks shown that
51a PROMEX dump is 5x slower and 20x more verbose than a CSV export.
52
53
54metrics filtering
55-------------------
56
57It is possible to dynamically select the metrics to export if you don't use all
58of them passing parameters in the query-string.
59
60* Filtering on scopes
61
62The metrics may be filtered by scopes. Multiple parameters with "scope" as name
63may be passed in the query-string to filter exported metrics, with one of those
64values: global, frontend, backend, server or '*' (means all). A scope parameter
65with no value means to filter out all scopes (nothing is returned). The scope
66parameters are parsed in their appearance order in the query-string. So an empty
67scope will reset all scopes already parsed. But it can be overridden by
68following scope parameters in the query-string. By default everything is
69exported. Here are examples:
70
71  /metrics?scope=server                 # ==> server metrics will be exported
72  /metrics?scope=frontend&scope=backend # ==> Frontend and backend metrics will be exported
73  /metrics?scope=listener               # ==> listener metrics will be exported
74  /metrics?scope=*&scope=               # ==> no metrics will be exported
75  /metrics?scope=&scope=global          # ==> global metrics will be exported
76  /metrics?scope=sticktable             # ==> stick tables metrics will be exported
77
78* How do I prevent my prometheus instance to explode?
79
80** Filtering on servers state
81
82It is possible to exclude from returned metrics all servers in maintenance mode
83passing the parameter "no-maint" in the query-string. This parameter may help to
84solve performance issues of configuration that use the server templates to
85manage dynamic provisionning. Note there is no consistency check on the servers
86state. So, if the state of a server changes while the exporter is running, only
87a part of the metrics for this server will be dumped.
88
89prometheus example config:
90
91For server-template users:
92- <job>
93  params:
94    no-maint:
95    - empty
96
97** Scrap server health checks only
98
99All health checks status are dump through `state` label values. If you want to
100scrap server health check status but prevent all server metrics to be saved,
101except the server_check_status, you may configure prometheus that way:
102
103- <job>
104   metric_relabel_configs:
105   - source_labels: ['__name__']
106      regex: 'haproxy_(process_|frontend_|listener_|backend_|server_check_status).*'
107      action: keep
108
109Exported metrics
110------------------
111
112See prometheus export for the description of each field.
113
114* Globals metrics
115
116+------------------------------------------------+
117|    Metric name                                 |
118+------------------------------------------------+
119| haproxy_process_nbthread                       |
120| haproxy_process_nbproc                         |
121| haproxy_process_relative_process_id            |
122| haproxy_process_uptime_seconds                 |
123| haproxy_process_pool_failures_total            |
124| haproxy_process_max_fds                        |
125| haproxy_process_max_sockets                    |
126| haproxy_process_max_connections                |
127| haproxy_process_hard_max_connections           |
128| haproxy_process_current_connections            |
129| haproxy_process_connections_total              |
130| haproxy_process_requests_total                 |
131| haproxy_process_max_ssl_connections            |
132| haproxy_process_current_ssl_connections        |
133| haproxy_process_ssl_connections_total          |
134| haproxy_process_max_pipes                      |
135| haproxy_process_pipes_used_total               |
136| haproxy_process_pipes_free_total               |
137| haproxy_process_current_connection_rate        |
138| haproxy_process_limit_connection_rate          |
139| haproxy_process_max_connection_rate            |
140| haproxy_process_current_session_rate           |
141| haproxy_process_limit_session_rate             |
142| haproxy_process_max_session_rate               |
143| haproxy_process_current_ssl_rate               |
144| haproxy_process_limit_ssl_rate                 |
145| haproxy_process_max_ssl_rate                   |
146| haproxy_process_current_frontend_ssl_key_rate  |
147| haproxy_process_max_frontend_ssl_key_rate      |
148| haproxy_process_frontend_ssl_reuse             |
149| haproxy_process_current_backend_ssl_key_rate   |
150| haproxy_process_max_backend_ssl_key_rate       |
151| haproxy_process_ssl_cache_lookups_total        |
152| haproxy_process_ssl_cache_misses_total         |
153| haproxy_process_http_comp_bytes_in_total       |
154| haproxy_process_http_comp_bytes_out_total      |
155| haproxy_process_limit_http_comp                |
156| haproxy_process_current_zlib_memory            |
157| haproxy_process_max_zlib_memory                |
158| haproxy_process_current_tasks                  |
159| haproxy_process_current_run_queue              |
160| haproxy_process_idle_time_percent              |
161| haproxy_process_stopping                       |
162| haproxy_process_jobs                           |
163| haproxy_process_unstoppable_jobs               |
164| haproxy_process_listeners                      |
165| haproxy_process_active_peers                   |
166| haproxy_process_connected_peers                |
167| haproxy_process_dropped_logs_total             |
168| haproxy_process_busy_polling_enabled           |
169| haproxy_process_failed_resolutions             |
170| haproxy_process_bytes_out_total                |
171| haproxy_process_spliced_bytes_out_total        |
172| haproxy_process_bytes_out_rate                 |
173| haproxy_process_recv_logs_total                |
174| haproxy_process_build_info                     |
175| haproxy_process_max_memory_bytes               |
176| haproxy_process_pool_allocated_bytes           |
177| haproxy_process_pool_used_bytes                |
178| haproxy_process_start_time_seconds             |
179+------------------------------------------------+
180
181* Frontend metrics
182
183+-------------------------------------------------+
184|    Metric name                                  |
185+-------------------------------------------------+
186| haproxy_frontend_current_sessions               |
187| haproxy_frontend_max_sessions                   |
188| haproxy_frontend_limit_sessions                 |
189| haproxy_frontend_sessions_total                 |
190| haproxy_frontend_bytes_in_total                 |
191| haproxy_frontend_bytes_out_total                |
192| haproxy_frontend_requests_denied_total          |
193| haproxy_frontend_responses_denied_total         |
194| haproxy_frontend_request_errors_total           |
195| haproxy_frontend_status                         |
196| haproxy_frontend_limit_session_rate             |
197| haproxy_frontend_max_session_rate               |
198| haproxy_frontend_http_responses_total           |
199| haproxy_frontend_http_requests_rate_max         |
200| haproxy_frontend_http_requests_total            |
201| haproxy_frontend_http_comp_bytes_in_total       |
202| haproxy_frontend_http_comp_bytes_out_total      |
203| haproxy_frontend_http_comp_bytes_bypassed_total |
204| haproxy_frontend_http_comp_responses_total      |
205| haproxy_frontend_connections_rate_max           |
206| haproxy_frontend_connections_total              |
207| haproxy_frontend_intercepted_requests_total     |
208| haproxy_frontend_denied_connections_total       |
209| haproxy_frontend_denied_sessions_total          |
210| haproxy_frontend_failed_header_rewriting_total  |
211| haproxy_frontend_http_cache_lookups_total       |
212| haproxy_frontend_http_cache_hits_total          |
213| haproxy_frontend_internal_errors_total          |
214+-------------------------------------------------+
215
216* Listener metrics
217
218+-------------------------------------------------+
219|    Metric name                                  |
220+-------------------------------------------------+
221| haproxy_listener_current_sessions               |
222| haproxy_listener_max_sessions                   |
223| haproxy_listener_limit_sessions                 |
224| haproxy_listener_sessions_total                 |
225| haproxy_listener_bytes_in_total                 |
226| haproxy_listener_bytes_out_total                |
227| haproxy_listener_requests_denied_total          |
228| haproxy_listener_responses_denied_total         |
229| haproxy_listener_request_errors_total           |
230| haproxy_listener_status                         |
231| haproxy_listener_denied_connections_total       |
232| haproxy_listener_denied_sessions_total          |
233| haproxy_listener_failed_header_rewriting_total  |
234| haproxy_listener_internal_errors_total          |
235+-------------------------------------------------+
236
237* Backend metrics
238
239+-----------------------------------------------------+
240|    Metric name                                      |
241+-----------------------------------------------------+
242| haproxy_backend_current_queue                       |
243| haproxy_backend_max_queue                           |
244| haproxy_backend_current_sessions                    |
245| haproxy_backend_max_sessions                        |
246| haproxy_backend_limit_sessions                      |
247| haproxy_backend_sessions_total                      |
248| haproxy_backend_bytes_in_total                      |
249| haproxy_backend_bytes_out_total                     |
250| haproxy_backend_requests_denied_total               |
251| haproxy_backend_responses_denied_total              |
252| haproxy_backend_connection_errors_total             |
253| haproxy_backend_response_errors_total               |
254| haproxy_backend_retry_warnings_total                |
255| haproxy_backend_redispatch_warnings_total           |
256| haproxy_backend_status                              |
257| haproxy_backend_weight                              |
258| haproxy_backend_active_servers                      |
259| haproxy_backend_backup_servers                      |
260| haproxy_backend_check_up_down_total                 |
261| haproxy_backend_check_last_change_seconds           |
262| haproxy_backend_downtime_seconds_total              |
263| haproxy_backend_loadbalanced_total                  |
264| haproxy_backend_max_session_rate                    |
265| haproxy_backend_http_responses_total                |
266| haproxy_backend_http_requests_total                 |
267| haproxy_backend_client_aborts_total                 |
268| haproxy_backend_server_aborts_total                 |
269| haproxy_backend_http_comp_bytes_in_total            |
270| haproxy_backend_http_comp_bytes_out_total           |
271| haproxy_backend_http_comp_bytes_bypassed_total      |
272| haproxy_backend_http_comp_responses_total           |
273| haproxy_backend_last_session_seconds                |
274| haproxy_backend_queue_time_average_seconds          |
275| haproxy_backend_connect_time_average_seconds        |
276| haproxy_backend_response_time_average_seconds       |
277| haproxy_backend_total_time_average_seconds          |
278| haproxy_backend_failed_header_rewriting_total       |
279| haproxy_backend_connection_attempts_total           |
280| haproxy_backend_connection_reuses_total             |
281| haproxy_backend_http_cache_lookups_total            |
282| haproxy_backend_http_cache_hits_total               |
283| haproxy_backend_max_queue_time_seconds              |
284| haproxy_backend_max_connect_time_seconds            |
285| haproxy_backend_max_response_time_seconds           |
286| haproxy_backend_max_total_time_seconds              |
287| haproxy_backend_internal_errors_total               |
288| haproxy_backend_uweight                             |
289+-----------------------------------------------------+
290
291* Server metrics
292
293+----------------------------------------------------+
294|    Metric name                                     |
295+----------------------------------------------------+
296| haproxy_server_current_queue                       |
297| haproxy_server_max_queue                           |
298| haproxy_server_current_sessions                    |
299| haproxy_server_max_sessions                        |
300| haproxy_server_limit_sessions                      |
301| haproxy_server_sessions_total                      |
302| haproxy_server_bytes_in_total                      |
303| haproxy_server_bytes_out_total                     |
304| haproxy_server_responses_denied_total              |
305| haproxy_server_connection_errors_total             |
306| haproxy_server_response_errors_total               |
307| haproxy_server_retry_warnings_total                |
308| haproxy_server_redispatch_warnings_total           |
309| haproxy_server_status                              |
310| haproxy_server_weight                              |
311| haproxy_server_check_failures_total                |
312| haproxy_server_check_up_down_total                 |
313| haproxy_server_check_last_change_seconds           |
314| haproxy_server_downtime_seconds_total              |
315| haproxy_server_queue_limit                         |
316| haproxy_server_current_throttle                    |
317| haproxy_server_loadbalanced_total                  |
318| haproxy_server_max_session_rate                    |
319| haproxy_server_check_status                        |
320| haproxy_server_check_code                          |
321| haproxy_server_check_duration_seconds              |
322| haproxy_server_http_responses_total                |
323| haproxy_server_client_aborts_total                 |
324| haproxy_server_server_aborts_total                 |
325| haproxy_server_last_session_seconds                |
326| haproxy_server_queue_time_average_seconds          |
327| haproxy_server_connect_time_average_seconds        |
328| haproxy_server_response_time_average_seconds       |
329| haproxy_server_total_time_average_seconds          |
330| haproxy_server_failed_header_rewriting_total       |
331| haproxy_server_connection_attempts_total           |
332| haproxy_server_connection_reuses_total             |
333| haproxy_server_idle_connections_current            |
334| haproxy_server_idle_connections_limit              |
335| haproxy_server_max_queue_time_seconds              |
336| haproxy_server_max_connect_time_seconds            |
337| haproxy_server_max_response_time_seconds           |
338| haproxy_server_max_total_time_seconds              |
339| haproxy_server_internal_errors_total               |
340| haproxy_server_unsafe_idle_connections_current     |
341| haproxy_server_safe_idle_connections_current       |
342| haproxy_server_used_connections_current            |
343| haproxy_server_need_connections_current            |
344| haproxy_server_uweight                             |
345+----------------------------------------------------+
346
347* Stick table metrics
348
349+----------------------------------------------------+
350|    Metric name                                     |
351+----------------------------------------------------+
352| haproxy_sticktable_size                            |
353| haproxy_sticktable_used                            |
354+----------------------------------------------------+
355