From 54dbbe36753c940839f98a17d1df5eccb41b0637 Mon Sep 17 00:00:00 2001 From: Giorgi Imerlishvili Date: Fri, 17 Apr 2026 02:24:52 +0400 Subject: [PATCH 1/2] Add Prometheus metrics data stream --- packages/haproxy/changelog.yml | 5 + .../_dev/test/system/test-default-config.yml | 9 + .../metrics/agent/stream/stream.yml.hbs | 25 + .../elasticsearch/ingest_pipeline/default.yml | 17 + .../metrics/fields/base-fields.yml | 12 + .../data_stream/metrics/fields/ecs.yml | 27 + .../data_stream/metrics/fields/fields.yml | 1159 +++++++++++++++++ .../haproxy/data_stream/metrics/manifest.yml | 40 + .../data_stream/metrics/sample_event.json | 107 ++ packages/haproxy/manifest.yml | 60 +- 10 files changed, 1460 insertions(+), 1 deletion(-) create mode 100755 packages/haproxy/data_stream/metrics/_dev/test/system/test-default-config.yml create mode 100644 packages/haproxy/data_stream/metrics/agent/stream/stream.yml.hbs create mode 100644 packages/haproxy/data_stream/metrics/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/haproxy/data_stream/metrics/fields/base-fields.yml create mode 100644 packages/haproxy/data_stream/metrics/fields/ecs.yml create mode 100644 packages/haproxy/data_stream/metrics/fields/fields.yml create mode 100644 packages/haproxy/data_stream/metrics/manifest.yml create mode 100644 packages/haproxy/data_stream/metrics/sample_event.json diff --git a/packages/haproxy/changelog.yml b/packages/haproxy/changelog.yml index f21a9d8dbff..829f2840506 100644 --- a/packages/haproxy/changelog.yml +++ b/packages/haproxy/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.19.0" + changes: + - description: Add Prometheus metric data stream + type: enhancement + link: https://github.com/elastic/integrations/pull/17270 - version: "1.18.0" changes: - description: Expose condition option in UI for metrics diff --git a/packages/haproxy/data_stream/metrics/_dev/test/system/test-default-config.yml b/packages/haproxy/data_stream/metrics/_dev/test/system/test-default-config.yml new file mode 100755 index 00000000000..0907e4f4c58 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/_dev/test/system/test-default-config.yml @@ -0,0 +1,9 @@ +service: haproxy +vars: + hosts: + - http://{{Hostname}}:8405 +input: prometheus/metrics +data_stream: + vars: + period: 10s + metrics_path: /metrics diff --git a/packages/haproxy/data_stream/metrics/agent/stream/stream.yml.hbs b/packages/haproxy/data_stream/metrics/agent/stream/stream.yml.hbs new file mode 100644 index 00000000000..3ef86b864b7 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/agent/stream/stream.yml.hbs @@ -0,0 +1,25 @@ +metricsets: ["collector"] +hosts: +{{#each hosts}} + - {{this}} +{{/each}} +metrics_path: {{metrics_path}} +period: {{period}} +{{#if username}} +username: "{{username}}" +{{/if}} +{{#if password}} +password: "{{password}}" +{{/if}} +{{#if ssl}} +{{ssl}} +{{/if}} +tags: +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#if processors}} +processors: +{{processors}} +{{/if}} + diff --git a/packages/haproxy/data_stream/metrics/elasticsearch/ingest_pipeline/default.yml b/packages/haproxy/data_stream/metrics/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..40a2287ed11 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,17 @@ +--- +description: Pipeline for parsing HAProxy metrics. +processors: + - remove: + field: prometheus.metrics.up + ignore_missing: true + - remove: + field: prometheus.labels + ignore_missing: true + - rename: + field: prometheus.metrics + target_field: haproxy.metrics + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{{_ingest.on_failure_message}}}" diff --git a/packages/haproxy/data_stream/metrics/fields/base-fields.yml b/packages/haproxy/data_stream/metrics/fields/base-fields.yml new file mode 100644 index 00000000000..4da5428ca93 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. \ No newline at end of file diff --git a/packages/haproxy/data_stream/metrics/fields/ecs.yml b/packages/haproxy/data_stream/metrics/fields/ecs.yml new file mode 100644 index 00000000000..37cf21eb826 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/fields/ecs.yml @@ -0,0 +1,27 @@ +- external: ecs + name: service.address + dimension: true +- external: ecs + name: agent.id + dimension: true +- external: ecs + name: cloud.account.id + dimension: true +- external: ecs + name: cloud.region + dimension: true +- external: ecs + name: cloud.availability_zone + dimension: true +- external: ecs + name: cloud.instance.id + dimension: true +- external: ecs + name: cloud.provider + dimension: true +- external: ecs + name: container.id + dimension: true +- external: ecs + name: host.name + dimension: true diff --git a/packages/haproxy/data_stream/metrics/fields/fields.yml b/packages/haproxy/data_stream/metrics/fields/fields.yml new file mode 100644 index 00000000000..af95288eb3f --- /dev/null +++ b/packages/haproxy/data_stream/metrics/fields/fields.yml @@ -0,0 +1,1159 @@ +- name: prometheus + type: group + description: Prometheus metadata and labels. + fields: + - name: labels + type: group + description: Prometheus target labels. + fields: + - name: instance + type: keyword + dimension: true + description: Prometheus target instance label. + - name: job + type: keyword + dimension: true + description: Prometheus target job label. + - name: proxy + type: keyword + dimension: true + description: HAProxy proxy label exported with metrics. + - name: state + type: keyword + dimension: true + description: HAProxy state label exported with metrics. + +- name: haproxy.metrics + type: group + fields: + - name: haproxy_backend_active_servers + type: double + metric_type: gauge + description: >- + Total number of active UP servers with a non-zero weight + - name: haproxy_backend_agg_check_status + type: double + metric_type: gauge + description: >- + Backend's aggregated gauge of servers' state check status + - name: haproxy_backend_agg_server_check_status + type: double + metric_type: gauge + description: >- + [DEPRECATED] Backend's aggregated gauge of servers' status + - name: haproxy_backend_agg_server_status + type: double + metric_type: gauge + description: >- + Backend's aggregated gauge of servers' status + - name: haproxy_backend_backup_servers + type: double + metric_type: gauge + description: >- + Total number of backup UP servers with a non-zero weight + - name: haproxy_backend_bytes_in_total + type: long + metric_type: counter + description: >- + Total number of request bytes since process started + - name: haproxy_backend_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of response bytes since process started + - name: haproxy_backend_check_last_change_seconds + type: double + metric_type: gauge + description: >- + How long ago the last server state changed, in seconds + - name: haproxy_backend_check_up_down_total + type: long + metric_type: counter + description: >- + Total number of failed checks causing UP to DOWN server transitions, per server/backend, since the worker process started + - name: haproxy_backend_client_aborts_total + type: long + metric_type: counter + description: >- + Total number of requests or connections aborted by the client since the worker process started + - name: haproxy_backend_connect_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. connect time for last 1024 successful connections. + - name: haproxy_backend_connection_attempts_total + type: long + metric_type: counter + description: >- + Total number of outgoing connection attempts on this backend/server since the worker process started + - name: haproxy_backend_connection_errors_total + type: long + metric_type: counter + description: >- + Total number of failed connections to server since the worker process started + - name: haproxy_backend_connection_reuses_total + type: long + metric_type: counter + description: >- + Total number of reused connection on this backend/server since the worker process started + - name: haproxy_backend_current_queue + type: double + metric_type: gauge + description: >- + Number of current queued connections + - name: haproxy_backend_current_session_rate + type: double + metric_type: gauge + description: >- + Total number of sessions processed by this object over the last second (sessions for listeners/frontends, requests for backends/servers) + - name: haproxy_backend_current_sessions + type: double + metric_type: gauge + description: >- + Number of current sessions on the frontend, backend or server + - name: haproxy_backend_downtime_seconds_total + type: long + metric_type: counter + description: >- + Total time spent in DOWN state, for server or backend + - name: haproxy_backend_failed_header_rewriting_total + type: long + metric_type: counter + description: >- + Total number of failed HTTP header rewrites since the worker process started + - name: haproxy_backend_http_cache_hits_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests not found in the cache on this frontend/backend since the worker process started + - name: haproxy_backend_http_cache_lookups_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests looked up in the cache on this frontend/backend since the worker process started + - name: haproxy_backend_http_comp_bytes_bypassed_total + type: long + metric_type: counter + description: >- + Total number of bytes that bypassed HTTP compression for this object since the worker process started (CPU/memory/bandwidth limitation) + - name: haproxy_backend_http_comp_bytes_in_total + type: long + metric_type: counter + description: >- + Total number of bytes submitted to the HTTP compressor for this object since the worker process started + - name: haproxy_backend_http_comp_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of bytes emitted by the HTTP compressor for this object since the worker process started + - name: haproxy_backend_http_comp_responses_total + type: long + metric_type: counter + description: >- + Total number of HTTP responses that were compressed for this object since the worker process started + - name: haproxy_backend_http_requests_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests processed by this object since the worker process started + - name: haproxy_backend_http_responses_total + type: long + metric_type: counter + description: >- + Total number of HTTP responses with status 100-199 returned by this object since the worker process started + - name: haproxy_backend_internal_errors_total + type: long + metric_type: counter + description: >- + Total number of internal errors since process started + - name: haproxy_backend_last_session_seconds + type: double + metric_type: gauge + description: >- + How long ago some traffic was seen on this object on this worker process, in seconds + - name: haproxy_backend_limit_sessions + type: double + metric_type: gauge + description: >- + Frontend/listener/server's maxconn, backend's fullconn + - name: haproxy_backend_loadbalanced_total + type: long + metric_type: counter + description: >- + Total number of requests routed by load balancing since the worker process started (ignores queue pop and stickiness) + - name: haproxy_backend_max_connect_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed time spent waiting for a connection to complete + - name: haproxy_backend_max_queue + type: double + metric_type: gauge + description: >- + Highest value of queued connections encountered since process started + - name: haproxy_backend_max_queue_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed time spent in the queue + - name: haproxy_backend_max_response_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed time spent waiting for a server response + - name: haproxy_backend_max_session_rate + type: double + metric_type: gauge + description: >- + Highest value of sessions per second observed since the worker process started + - name: haproxy_backend_max_sessions + type: double + metric_type: gauge + description: >- + Highest value of current sessions encountered since process started + - name: haproxy_backend_max_total_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed total request+response time (request+queue+connect+response+processing) + - name: haproxy_backend_queue_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. queue time for last 1024 successful connections. + - name: haproxy_backend_redispatch_warnings_total + type: long + metric_type: counter + description: >- + Total number of server redispatches due to connection failures since the worker process started + - name: haproxy_backend_requests_denied_total + type: long + metric_type: counter + description: >- + Total number of denied requests since process started + - name: haproxy_backend_response_errors_total + type: long + metric_type: counter + description: >- + Total number of invalid responses since the worker process started + - name: haproxy_backend_response_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. response time for last 1024 successful connections. + - name: haproxy_backend_responses_denied_total + type: long + metric_type: counter + description: >- + Total number of denied responses since process started + - name: haproxy_backend_retry_warnings_total + type: long + metric_type: counter + description: >- + Total number of server connection retries since the worker process started + - name: haproxy_backend_server_aborts_total + type: long + metric_type: counter + description: >- + Total number of requests or connections aborted by the server since the worker process started + - name: haproxy_backend_sessions_total + type: long + metric_type: counter + description: >- + Total number of sessions since process started + - name: haproxy_backend_status + type: double + metric_type: gauge + description: >- + Current status of the service, per state label value. + - name: haproxy_backend_total_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. total time for last 1024 successful connections. + - name: haproxy_backend_uweight + type: double + metric_type: gauge + description: >- + Server's user weight, or sum of active servers' user weights for a backend + - name: haproxy_backend_weight + type: double + metric_type: gauge + description: >- + Server's effective weight, or sum of active servers' effective weights for a backend + - name: haproxy_listener_bytes_in_total + type: long + metric_type: counter + description: >- + Total number of request bytes since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of response bytes since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_current_sessions + type: double + metric_type: gauge + description: >- + Number of current sessions on the frontend, backend or server. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_denied_connections_total + type: long + metric_type: counter + description: >- + Total number of incoming connections blocked on a listener/frontend by a tcp-request connection rule since the worker process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_denied_sessions_total + type: long + metric_type: counter + description: >- + Total number of incoming sessions blocked on a listener/frontend by a tcp-request connection rule since the worker process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_internal_errors_total + type: long + metric_type: counter + description: >- + Total number of internal errors since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_limit_sessions + type: double + metric_type: gauge + description: >- + Frontend/listener/server’s maxconn, backend’s fullconn. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_max_sessions + type: double + metric_type: gauge + description: >- + Highest value of current sessions encountered since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_request_errors_total + type: long + metric_type: counter + description: >- + Total number of invalid requests since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_requests_denied_total + type: long + metric_type: counter + description: >- + Total number of denied requests since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_responses_denied_total + type: long + metric_type: counter + description: >- + Total number of denied responses since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_sessions_total + type: long + metric_type: counter + description: >- + Total number of sessions since process started. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_ssl_failed_handshake + type: long + metric_type: counter + description: >- + Total number of failed handshake. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_ssl_reused_sess + type: long + metric_type: counter + description: >- + Total number of ssl sessions reused. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_ssl_sess + type: long + metric_type: counter + description: >- + Total number of ssl sessions established. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name. + - name: haproxy_listener_status + type: double + metric_type: gauge + description: >- + Current status of the service. One metric for each combination of service and status. To enable, add option socket-stats to your Prometheus frontend in the load balancer configuration. Labels: proxy=listener or frontend name, listener=bind name, state=service state. + - name: haproxy_frontend_bytes_in_total + type: long + metric_type: counter + description: >- + Total number of request bytes since process started. Label: proxy=frontend name. + - name: haproxy_frontend_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of response bytes since process started. Label: proxy=frontend name. + - name: haproxy_frontend_connections_rate_max + type: double + metric_type: gauge + description: >- + Highest value of connections per second observed since the worker process started + - name: haproxy_frontend_connections_total + type: long + metric_type: counter + description: >- + Total number of new connections accepted on this frontend since the worker process started + - name: haproxy_frontend_current_session_rate + type: double + metric_type: gauge + description: >- + Total number of sessions processed by this object over the last second (sessions for listeners/frontends, requests for backends/servers) + - name: haproxy_frontend_current_sessions + type: double + metric_type: gauge + description: >- + Number of current sessions on the frontend, backend or server + - name: haproxy_frontend_denied_connections_total + type: long + metric_type: counter + description: >- + Total number of incoming connections blocked on a listener/frontend by a tcp-request connection rule since the worker process started + - name: haproxy_frontend_denied_sessions_total + type: long + metric_type: counter + description: >- + Total number of incoming sessions blocked on a listener/frontend by a tcp-request connection rule since the worker process started + - name: haproxy_frontend_failed_header_rewriting_total + type: long + metric_type: counter + description: >- + Total number of failed HTTP header rewrites since the worker process started + - name: haproxy_frontend_http_cache_hits_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests not found in the cache on this frontend/backend since the worker process started + - name: haproxy_frontend_http_cache_lookups_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests looked up in the cache on this frontend/backend since the worker process started + - name: haproxy_frontend_http_comp_bytes_bypassed_total + type: long + metric_type: counter + description: >- + Total number of bytes that bypassed HTTP compression for this object since the worker process started (CPU/memory/bandwidth limitation) + - name: haproxy_frontend_http_comp_bytes_in_total + type: long + metric_type: counter + description: >- + Total number of bytes submitted to the HTTP compressor for this object since the worker process started + - name: haproxy_frontend_http_comp_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of bytes emitted by the HTTP compressor for this object since the worker process started + - name: haproxy_frontend_http_comp_responses_total + type: long + metric_type: counter + description: >- + Total number of HTTP responses that were compressed for this object since the worker process started + - name: haproxy_frontend_http_requests_rate_max + type: double + metric_type: gauge + description: >- + Highest value of http requests observed since the worker process started + - name: haproxy_frontend_http_requests_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests processed by this object since the worker process started + - name: haproxy_frontend_http_responses_total + type: long + metric_type: counter + description: >- + Total number of HTTP responses with status 100-199 returned by this object since the worker process started + - name: haproxy_frontend_intercepted_requests_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests intercepted on the frontend (redirects/stats/services) since the worker process started + - name: haproxy_frontend_internal_errors_total + type: long + metric_type: counter + description: >- + Total number of internal errors since process started + - name: haproxy_frontend_limit_session_rate + type: double + metric_type: gauge + description: >- + Limit on the number of sessions accepted in a second (frontend only, 'rate-limit sessions' setting) + - name: haproxy_frontend_limit_sessions + type: double + metric_type: gauge + description: >- + Frontend/listener/server's maxconn, backend's fullconn + - name: haproxy_frontend_max_session_rate + type: double + metric_type: gauge + description: >- + Highest value of sessions per second observed since the worker process started + - name: haproxy_frontend_max_sessions + type: double + metric_type: gauge + description: >- + Highest value of current sessions encountered since process started + - name: haproxy_frontend_request_errors_total + type: long + metric_type: counter + description: >- + Total number of invalid requests since process started + - name: haproxy_frontend_requests_denied_total + type: long + metric_type: counter + description: >- + Total number of denied requests since process started + - name: haproxy_frontend_responses_denied_total + type: long + metric_type: counter + description: >- + Total number of denied responses since process started + - name: haproxy_frontend_sessions_total + type: long + metric_type: counter + description: >- + Total number of sessions since process started + - name: haproxy_frontend_status + type: double + metric_type: gauge + description: >- + Current status of the service, per state label value. + - name: haproxy_process_active_peers + type: double + metric_type: gauge + description: >- + Current number of verified active peers connections on the current worker process + - name: haproxy_process_build_info + type: double + metric_type: gauge + description: >- + Build info + - name: haproxy_process_busy_polling_enabled + type: double + metric_type: gauge + description: >- + 1 if busy-polling is currently in use on the worker process, otherwise zero (config.busy-polling) + - name: haproxy_process_bytes_out_rate + type: double + metric_type: gauge + description: >- + Number of bytes emitted by current worker process over the last second + - name: haproxy_process_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of bytes emitted by current worker process since started + - name: haproxy_process_connected_peers + type: double + metric_type: gauge + description: >- + Current number of peers having passed the connection step on the current worker process + - name: haproxy_process_connections_total + type: long + metric_type: counter + description: >- + Total number of connections on this worker process since started + - name: haproxy_process_current_backend_ssl_key_rate + type: double + metric_type: gauge + description: >- + Number of SSL keys created on backends in this worker process over the last second + - name: haproxy_process_current_connection_rate + type: double + metric_type: gauge + description: >- + Number of front connections created on this worker process over the last second + - name: haproxy_process_current_connections + type: double + metric_type: gauge + description: >- + Current number of connections on this worker process + - name: haproxy_process_current_frontend_ssl_key_rate + type: double + metric_type: gauge + description: >- + Number of SSL keys created on frontends in this worker process over the last second + - name: haproxy_process_current_run_queue + type: double + metric_type: gauge + description: >- + Total number of active tasks+tasklets in the current worker process + - name: haproxy_process_current_session_rate + type: double + metric_type: gauge + description: >- + Number of sessions created on this worker process over the last second + - name: haproxy_process_current_ssl_connections + type: double + metric_type: gauge + description: >- + Current number of SSL endpoints on this worker process (front+back) + - name: haproxy_process_current_ssl_rate + type: double + metric_type: gauge + description: >- + Number of SSL connections created on this worker process over the last second + - name: haproxy_process_current_tasks + type: double + metric_type: gauge + description: >- + Total number of tasks in the current worker process (active + sleeping) + - name: haproxy_process_current_zlib_memory + type: double + metric_type: gauge + description: >- + Amount of memory currently used by HTTP compression on the current worker process (in bytes) + - name: haproxy_process_dropped_logs_total + type: long + metric_type: counter + description: >- + Total number of dropped logs for current worker process since started + - name: haproxy_process_failed_resolutions + type: long + metric_type: counter + description: >- + Total number of failed DNS resolutions in current worker process since started + - name: haproxy_process_frontend_ssl_reuse + type: double + metric_type: gauge + description: >- + Percent of frontend SSL connections which did not require a new key + - name: haproxy_process_hard_max_connections + type: double + metric_type: gauge + description: >- + Hard limit on the number of per-process connections (imposed by Memmax_MB or Ulimit-n) + - name: haproxy_process_http_comp_bytes_in_total + type: long + metric_type: counter + description: >- + Number of bytes submitted to the HTTP compressor in this worker process over the last second + - name: haproxy_process_http_comp_bytes_out_total + type: long + metric_type: counter + description: >- + Number of bytes emitted by the HTTP compressor in this worker process over the last second + - name: haproxy_process_idle_time_percent + type: double + metric_type: gauge + description: >- + Percentage of last second spent waiting in the current worker thread + - name: haproxy_process_jobs + type: double + metric_type: gauge + description: >- + Current number of active jobs on the current worker process (frontend connections, master connections, listeners) + - name: haproxy_process_limit_connection_rate + type: double + metric_type: gauge + description: >- + Hard limit for ConnRate (global.maxconnrate) + - name: haproxy_process_limit_http_comp + type: double + metric_type: gauge + description: >- + Limit of CompressBpsOut beyond which HTTP compression is automatically disabled + - name: haproxy_process_limit_session_rate + type: double + metric_type: gauge + description: >- + Hard limit for SessRate (global.maxsessrate) + - name: haproxy_process_limit_ssl_rate + type: double + metric_type: gauge + description: >- + Hard limit for SslRate (global.maxsslrate) + - name: haproxy_process_listeners + type: double + metric_type: gauge + description: >- + Current number of active listeners on the current worker process + - name: haproxy_process_max_backend_ssl_key_rate + type: double + metric_type: gauge + description: >- + Highest SslBackendKeyRate reached on this worker process since started (in SSL keys per second) + - name: haproxy_process_max_connection_rate + type: double + metric_type: gauge + description: >- + Highest ConnRate reached on this worker process since started (in connections per second) + - name: haproxy_process_max_connections + type: double + metric_type: gauge + description: >- + Hard limit on the number of per-process connections (configured or imposed by Ulimit-n) + - name: haproxy_process_max_fds + type: double + metric_type: gauge + description: >- + Hard limit on the number of per-process file descriptors + - name: haproxy_process_max_frontend_ssl_key_rate + type: double + metric_type: gauge + description: >- + Highest SslFrontendKeyRate reached on this worker process since started (in SSL keys per second) + - name: haproxy_process_max_memory_bytes + type: double + metric_type: gauge + description: >- + Worker process's hard limit on memory usage in byes (-m on command line) + - name: haproxy_process_max_pipes + type: double + metric_type: gauge + description: >- + Hard limit on the number of pipes for splicing, 0=unlimited + - name: haproxy_process_max_session_rate + type: double + metric_type: gauge + description: >- + Highest SessRate reached on this worker process since started (in sessions per second) + - name: haproxy_process_max_sockets + type: double + metric_type: gauge + description: >- + Hard limit on the number of per-process sockets + - name: haproxy_process_max_ssl_connections + type: double + metric_type: gauge + description: >- + Hard limit on the number of per-process SSL endpoints (front+back), 0=unlimited + - name: haproxy_process_max_ssl_rate + type: double + metric_type: gauge + description: >- + Highest SslRate reached on this worker process since started (in connections per second) + - name: haproxy_process_max_zlib_memory + type: double + metric_type: gauge + description: >- + Limit on the amount of memory used by HTTP compression above which it is automatically disabled (in bytes, see global.maxzlibmem) + - name: haproxy_process_nbproc + type: double + metric_type: gauge + description: >- + Number of started worker processes (historical, always 1) + - name: haproxy_process_nbthread + type: double + metric_type: gauge + description: >- + Number of started threads (global.nbthread) + - name: haproxy_process_node + type: double + metric_type: gauge + description: >- + Node name (global.node) + - name: haproxy_process_pipes_free_total + type: long + metric_type: counter + description: >- + Current number of allocated and available pipes in this worker process + - name: haproxy_process_pipes_used_total + type: long + metric_type: counter + description: >- + Current number of pipes in use in this worker process + - name: haproxy_process_pool_allocated_bytes + type: double + metric_type: gauge + description: >- + Amount of memory allocated in pools (in bytes) + - name: haproxy_process_pool_failures_total + type: long + metric_type: counter + description: >- + Number of failed pool allocations since this worker was started + - name: haproxy_process_pool_used_bytes + type: double + metric_type: gauge + description: >- + Amount of pool memory currently used (in bytes) + - name: haproxy_process_recv_logs_total + type: long + metric_type: counter + description: >- + Total number of log messages received by log-forwarding listeners on this worker process since started + - name: haproxy_process_relative_process_id + type: double + metric_type: gauge + description: >- + Relative worker process number (1) + - name: haproxy_process_requests_total + type: long + metric_type: counter + description: >- + Total number of requests on this worker process since started + - name: haproxy_process_spliced_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of bytes emitted by current worker process through a kernel pipe since started + - name: haproxy_process_ssl_cache_lookups_total + type: long + metric_type: counter + description: >- + Total number of SSL session ID lookups in the SSL session cache on this worker since started + - name: haproxy_process_ssl_cache_misses_total + type: long + metric_type: counter + description: >- + Total number of SSL session ID lookups that didn't find a session in the SSL session cache on this worker since started + - name: haproxy_process_ssl_connections_total + type: long + metric_type: counter + description: >- + Total number of SSL endpoints on this worker process since started (front+back) + - name: haproxy_process_start_time_seconds + type: double + metric_type: gauge + description: >- + Start time in seconds + - name: haproxy_process_stopping + type: double + metric_type: gauge + description: >- + 1 if the worker process is currently stopping, otherwise zero + - name: haproxy_process_total_warnings + type: long + metric_type: counter + description: >- + Total warnings issued + - name: haproxy_process_unstoppable_jobs + type: double + metric_type: gauge + description: >- + Current number of unstoppable jobs on the current worker process (master connections) + - name: haproxy_process_uptime_seconds + type: double + metric_type: gauge + description: >- + How long ago this worker process was started (seconds) + - name: haproxy_resolver_any_err + type: double + metric_type: gauge + description: >- + Any errors + - name: haproxy_resolver_cname + type: double + metric_type: gauge + description: >- + CNAME + - name: haproxy_resolver_cname_error + type: double + metric_type: gauge + description: >- + CNAME error + - name: haproxy_resolver_invalid + type: double + metric_type: gauge + description: >- + Invalid + - name: haproxy_resolver_nx + type: double + metric_type: gauge + description: >- + NX + - name: haproxy_resolver_other + type: double + metric_type: gauge + description: >- + Other + - name: haproxy_resolver_outdated + type: double + metric_type: gauge + description: >- + Outdated + - name: haproxy_resolver_refused + type: double + metric_type: gauge + description: >- + Refused + - name: haproxy_resolver_send_error + type: double + metric_type: gauge + description: >- + Send error + - name: haproxy_resolver_sent + type: double + metric_type: gauge + description: >- + Sent + - name: haproxy_resolver_timeout + type: double + metric_type: gauge + description: >- + Timeout + - name: haproxy_resolver_too_big + type: double + metric_type: gauge + description: >- + Too big + - name: haproxy_resolver_truncated + type: double + metric_type: gauge + description: >- + Truncated + - name: haproxy_resolver_update + type: double + metric_type: gauge + description: >- + Update + - name: haproxy_resolver_valid + type: double + metric_type: gauge + description: >- + Valid + - name: haproxy_server_active + type: double + metric_type: gauge + description: >- + Total number of active UP servers with a non-zero weight + - name: haproxy_server_backup + type: double + metric_type: gauge + description: >- + Total number of backup UP servers with a non-zero weight + - name: haproxy_server_bytes_in_total + type: long + metric_type: counter + description: >- + Total number of request bytes since process started + - name: haproxy_server_bytes_out_total + type: long + metric_type: counter + description: >- + Total number of response bytes since process started + - name: haproxy_server_check_code + type: double + metric_type: gauge + description: >- + layer5-7 code, if available of the last health check. + - name: haproxy_server_check_duration_seconds + type: double + metric_type: gauge + description: >- + Total duration of the latest server health check, in seconds. + - name: haproxy_server_check_failures_total + type: long + metric_type: counter + description: >- + Total number of failed individual health checks per server/backend, since the worker process started + - name: haproxy_server_check_last_change_seconds + type: double + metric_type: gauge + description: >- + How long ago the last server state changed, in seconds + - name: haproxy_server_check_status + type: double + metric_type: gauge + description: >- + Status of last health check, per state label value. + - name: haproxy_server_check_up_down_total + type: long + metric_type: counter + description: >- + Total number of failed checks causing UP to DOWN server transitions, per server/backend, since the worker process started + - name: haproxy_server_client_aborts_total + type: long + metric_type: counter + description: >- + Total number of requests or connections aborted by the client since the worker process started + - name: haproxy_server_connect_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. connect time for last 1024 successful connections. + - name: haproxy_server_connection_attempts_total + type: long + metric_type: counter + description: >- + Total number of outgoing connection attempts on this backend/server since the worker process started + - name: haproxy_server_connection_errors_total + type: long + metric_type: counter + description: >- + Total number of failed connections to server since the worker process started + - name: haproxy_server_connection_reuses_total + type: long + metric_type: counter + description: >- + Total number of reused connection on this backend/server since the worker process started + - name: haproxy_server_current_queue + type: double + metric_type: gauge + description: >- + Number of current queued connections + - name: haproxy_server_current_session_rate + type: double + metric_type: gauge + description: >- + Total number of sessions processed by this object over the last second (sessions for listeners/frontends, requests for backends/servers) + - name: haproxy_server_current_sessions + type: double + metric_type: gauge + description: >- + Number of current sessions on the frontend, backend or server + - name: haproxy_server_current_throttle + type: double + metric_type: gauge + description: >- + Throttling ratio applied to a server's maxconn and weight during the slowstart period (0 to 100%) + - name: haproxy_server_downtime_seconds_total + type: long + metric_type: counter + description: >- + Total time spent in DOWN state, for server or backend + - name: haproxy_server_failed_header_rewriting_total + type: long + metric_type: counter + description: >- + Total number of failed HTTP header rewrites since the worker process started + - name: haproxy_server_http_requests_total + type: long + metric_type: counter + description: >- + Total number of HTTP requests processed by this object since the worker process started + - name: haproxy_server_http_responses_total + type: long + metric_type: counter + description: >- + Total number of HTTP responses with status 100-199 returned by this object since the worker process started + - name: haproxy_server_idle_connections_current + type: double + metric_type: gauge + description: >- + Current number of idle connections available for reuse on this server + - name: haproxy_server_idle_connections_limit + type: double + metric_type: gauge + description: >- + Limit on the number of available idle connections on this server (server 'pool_max_conn' directive) + - name: haproxy_server_internal_errors_total + type: long + metric_type: counter + description: >- + Total number of internal errors since process started + - name: haproxy_server_last_session_seconds + type: double + metric_type: gauge + description: >- + How long ago some traffic was seen on this object on this worker process, in seconds + - name: haproxy_server_limit_sessions + type: double + metric_type: gauge + description: >- + Frontend/listener/server's maxconn, backend's fullconn + - name: haproxy_server_loadbalanced_total + type: long + metric_type: counter + description: >- + Total number of requests routed by load balancing since the worker process started (ignores queue pop and stickiness) + - name: haproxy_server_max_connect_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed time spent waiting for a connection to complete + - name: haproxy_server_max_queue + type: double + metric_type: gauge + description: >- + Highest value of queued connections encountered since process started + - name: haproxy_server_max_queue_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed time spent in the queue + - name: haproxy_server_max_response_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed time spent waiting for a server response + - name: haproxy_server_max_session_rate + type: double + metric_type: gauge + description: >- + Highest value of sessions per second observed since the worker process started + - name: haproxy_server_max_sessions + type: double + metric_type: gauge + description: >- + Highest value of current sessions encountered since process started + - name: haproxy_server_max_total_time_seconds + type: double + metric_type: gauge + description: >- + Maximum observed total request+response time (request+queue+connect+response+processing) + - name: haproxy_server_need_connections_current + type: double + metric_type: gauge + description: >- + Estimated needed number of connections + - name: haproxy_server_queue_limit + type: double + metric_type: gauge + description: >- + Limit on the number of connections in queue, for servers only (maxqueue argument) + - name: haproxy_server_queue_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. queue time for last 1024 successful connections. + - name: haproxy_server_redispatch_warnings_total + type: long + metric_type: counter + description: >- + Total number of server redispatches due to connection failures since the worker process started + - name: haproxy_server_response_errors_total + type: long + metric_type: counter + description: >- + Total number of invalid responses since the worker process started + - name: haproxy_server_response_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. response time for last 1024 successful connections. + - name: haproxy_server_responses_denied_total + type: long + metric_type: counter + description: >- + Total number of denied responses since process started + - name: haproxy_server_retry_warnings_total + type: long + metric_type: counter + description: >- + Total number of server connection retries since the worker process started + - name: haproxy_server_safe_idle_connections_current + type: double + metric_type: gauge + description: >- + Current number of safe idle connections + - name: haproxy_server_server_aborts_total + type: long + metric_type: counter + description: >- + Total number of requests or connections aborted by the server since the worker process started + - name: haproxy_server_sessions_total + type: long + metric_type: counter + description: >- + Total number of sessions since process started + - name: haproxy_server_status + type: double + metric_type: gauge + description: >- + Current status of the service, per state label value. + - name: haproxy_server_total_time_average_seconds + type: double + metric_type: gauge + description: >- + Avg. total time for last 1024 successful connections. + - name: haproxy_server_unsafe_idle_connections_current + type: double + metric_type: gauge + description: >- + Current number of unsafe idle connections + - name: haproxy_server_used_connections_current + type: double + metric_type: gauge + description: >- + Current number of connections in use + - name: haproxy_server_uweight + type: double + metric_type: gauge + description: >- + Server's user weight, or sum of active servers' user weights for a backend + + - name: haproxy_server_weight + type: double + metric_type: gauge + description: >- + Server's effective weight, or sum of active servers' effective weights for a backend \ No newline at end of file diff --git a/packages/haproxy/data_stream/metrics/manifest.yml b/packages/haproxy/data_stream/metrics/manifest.yml new file mode 100644 index 00000000000..2b6b8703441 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/manifest.yml @@ -0,0 +1,40 @@ +type: metrics +title: HAProxy Prometheus metrics +streams: + - input: prometheus/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 10s + - name: metrics_path + type: text + title: Metrics Path + multi: false + required: true + show_user: true + default: /metrics + - name: tags + type: text + title: Tags + multi: true + required: false + show_user: false + default: [] + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the events are shipped. See [Processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html) for details. + template_path: stream.yml.hbs + title: HAProxy Prometheus metrics + description: Collect HAProxy metrics via the Prometheus /metrics endpoint. +elasticsearch: + index_mode: "time_series" + diff --git a/packages/haproxy/data_stream/metrics/sample_event.json b/packages/haproxy/data_stream/metrics/sample_event.json new file mode 100644 index 00000000000..930857f9a52 --- /dev/null +++ b/packages/haproxy/data_stream/metrics/sample_event.json @@ -0,0 +1,107 @@ +{ + "@timestamp": "2026-03-24T00:27:13.407Z", + "agent": { + "ephemeral_id": "70c712a8-e9ce-4360-ad68-a47aad61bc02", + "id": "bdfe958f-242b-4f40-8cc5-93f6388e5345", + "name": "EPGETBIW05AD", + "type": "metricbeat", + "version": "9.3.1" + }, + "data_stream": { + "dataset": "haproxy.metrics", + "namespace": "default", + "type": "metrics" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "bdfe958f-242b-4f40-8cc5-93f6388e5345", + "snapshot": false, + "version": "9.3.1" + }, + "event": { + "agent_id_status": "verified", + "dataset": "haproxy.metrics", + "duration": 10873000, + "ingested": "2026-03-24T00:27:13Z", + "module": "prometheus" + }, + "haproxy": { + "metrics": { + "haproxy_frontend_bytes_in_total": 17229, + "haproxy_frontend_bytes_out_total": 2084777, + "haproxy_frontend_connections_rate_max": 6, + "haproxy_frontend_connections_total": 46, + "haproxy_frontend_current_session_rate": 1, + "haproxy_frontend_current_sessions": 1, + "haproxy_frontend_denied_connections_total": 0, + "haproxy_frontend_denied_sessions_total": 0, + "haproxy_frontend_failed_header_rewriting_total": 0, + "haproxy_frontend_http_cache_hits_total": 0, + "haproxy_frontend_http_cache_lookups_total": 0, + "haproxy_frontend_http_comp_bytes_bypassed_total": 0, + "haproxy_frontend_http_comp_bytes_in_total": 0, + "haproxy_frontend_http_comp_bytes_out_total": 0, + "haproxy_frontend_http_comp_responses_total": 0, + "haproxy_frontend_http_requests_rate_max": 6, + "haproxy_frontend_http_requests_total": 46, + "haproxy_frontend_intercepted_requests_total": 31, + "haproxy_frontend_internal_errors_total": 0, + "haproxy_frontend_limit_session_rate": 0, + "haproxy_frontend_limit_sessions": 25000, + "haproxy_frontend_max_session_rate": 6, + "haproxy_frontend_max_sessions": 2, + "haproxy_frontend_request_errors_total": 0, + "haproxy_frontend_requests_denied_total": 0, + "haproxy_frontend_responses_denied_total": 0, + "haproxy_frontend_sessions_total": 46 + } + }, + "host": { + "architecture": "arm64", + "hostname": "EPGETBIW05AD", + "id": "EA0EF0A6-3698-566E-93AD-49EC580C1969", + "ip": [ + "192.168.8.247", + "fe80::432:f789:5d89:8418", + "fe80::4e2:681:a281:2d4d", + "fe80::1036:28ff:fe7c:649e", + "fe80::a2a5:e63d:cc82:b7ef", + "fe80::ce81:b1c:bd2c:69e", + "fe80::ed2d:e501:f5f3:db4f" + ], + "mac": [ + "12-36-28-7C-64-9E", + "1A-52-43-7C-F8-C2", + "36-BD-64-BA-FB-00", + "36-BD-64-BA-FB-04", + "36-BD-64-BA-FB-08", + "42-29-38-E4-A3-AA", + "42-29-38-E4-A3-AB", + "42-29-38-E4-A3-AC", + "42-29-38-E4-A3-CA", + "42-29-38-E4-A3-CB", + "42-29-38-E4-A3-CC", + "A6-51-3F-B3-70-0A" + ], + "name": "epgetbiw05ad", + "os": { + "build": "25D2128", + "family": "darwin", + "kernel": "25.3.0", + "name": "macOS", + "platform": "darwin", + "type": "macos", + "version": "26.3.1" + } + }, + "metricset": { + "name": "collector", + "period": 10000 + }, + "service": { + "address": "http://localhost:8405/metrics", + "type": "prometheus" + } +} \ No newline at end of file diff --git a/packages/haproxy/manifest.yml b/packages/haproxy/manifest.yml index d589e0c74c3..84fd12b6d94 100644 --- a/packages/haproxy/manifest.yml +++ b/packages/haproxy/manifest.yml @@ -1,6 +1,6 @@ name: haproxy title: HAProxy -version: "1.18.0" +version: "1.19.0" description: Collect logs and metrics from HAProxy servers with Elastic Agent. type: integration icons: @@ -93,6 +93,64 @@ policy_templates: show_user: false title: Collect HAProxy info and stat metrics description: Collecting info and stat metrics from HAProxy instances + - type: prometheus/metrics + vars: + - name: username + type: text + title: Username + multi: false + required: false + show_user: false + - name: password + type: password + title: Password + multi: false + required: false + show_user: false + secret: true + - name: ssl + type: yaml + title: SSL Configuration + default: | + # ssl.certificate_authorities: | + # -----BEGIN CERTIFICATE----- + # MIID+jCCAuKgAwIBAgIGAJJMzlxLMA0GCSqGSIb3DQEBCwUAMHoxCzAJBgNVBAYT + # AlVTMQwwCgYDVQQKEwNJQk0xFjAUBgNVBAsTDURlZmF1bHROb2RlMDExFjAUBgNV + # BAsTDURlZmF1bHRDZWxsMDExGTAXBgNVBAsTEFJvb3QgQ2VydGlmaWNhdGUxEjAQ + # BgNVBAMTCWxvY2FsaG9zdDAeFw0yMTEyMTQyMjA3MTZaFw0yMjEyMTQyMjA3MTZa + # MF8xCzAJBgNVBAYTAlVTMQwwCgYDVQQKEwNJQk0xFjAUBgNVBAsTDURlZmF1bHRO + # b2RlMDExFjAUBgNVBAsTDURlZmF1bHRDZWxsMDExEjAQBgNVBAMTCWxvY2FsaG9z + # dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMv5HCsJZIpI5zCy+jXV + # z6lmzNc9UcVSEEHn86h6zT6pxuY90TYeAhlZ9hZ+SCKn4OQ4GoDRZhLPTkYDt+wW + # CV3NTIy9uCGUSJ6xjCKoxClJmgSQdg5m4HzwfY4ofoEZ5iZQ0Zmt62jGRWc0zuxj + # hegnM+eO2reBJYu6Ypa9RPJdYJsmn1RNnC74IDY8Y95qn+WZj//UALCpYfX41hko + # i7TWD9GKQO8SBmAxhjCDifOxVBokoxYrNdzESl0LXvnzEadeZTd9BfUtTaBHhx6t + # njqqCPrbTY+3jAbZFd4RiERPnhLVKMytw5ot506BhPrUtpr2lusbN5svNXjuLeea + # MMUCAwEAAaOBoDCBnTATBgNVHSMEDDAKgAhOatpLwvJFqjAdBgNVHSUEFjAUBggr + # BgEFBQcDAQYIKwYBBQUHAwIwVAYDVR0RBE0wS4E+UHJvZmlsZVVVSUQ6QXBwU3J2 + # MDEtQkFTRS05MDkzMzJjMC1iNmFiLTQ2OTMtYWI5NC01Mjc1ZDI1MmFmNDiCCWxv + # Y2FsaG9zdDARBgNVHQ4ECgQITzqhA5sO8O4wDQYJKoZIhvcNAQELBQADggEBAKR0 + # gY/BM69S6BDyWp5dxcpmZ9FS783FBbdUXjVtTkQno+oYURDrhCdsfTLYtqUlP4J4 + # CHoskP+MwJjRIoKhPVQMv14Q4VC2J9coYXnePhFjE+6MaZbTjq9WaekGrpKkMaQA + # iQt5b67jo7y63CZKIo9yBvs7sxODQzDn3wZwyux2vPegXSaTHR/rop/s/mPk3YTS + # hQprs/IVtPoWU4/TsDN3gIlrAYGbcs29CAt5q9MfzkMmKsuDkTZD0ry42VjxjAmk + # xw23l/k8RoD1wRWaDVbgpjwSzt+kl+vJE/ip2w3h69eEZ9wbo6scRO5lCO2JM4Pr + # 7RhLQyWn2u00L7/9Omw= + # -----END CERTIFICATE----- + description: SSL configuration options. See [documentation](https://www.elastic.co/guide/en/fleet/current/elastic-agent-ssl-configuration.html) for details. + multi: false + required: false + show_user: false + - name: hosts + type: text + title: Hosts + multi: true + required: true + show_user: true + default: + - http://localhost:8405 + title: HAProxy Prometheus metrics + description: Collect HAProxy metrics via the Prometheus /metrics endpoint. owner: github: elastic/obs-infraobs-integrations type: elastic From f0827ed3ecc4a9644611ba359f80ae0018acabe1 Mon Sep 17 00:00:00 2001 From: Giorgi Imerlishvili Date: Fri, 17 Apr 2026 02:28:54 +0400 Subject: [PATCH 2/2] update pr link in changelog --- packages/haproxy/changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/haproxy/changelog.yml b/packages/haproxy/changelog.yml index 829f2840506..cf32b570b23 100644 --- a/packages/haproxy/changelog.yml +++ b/packages/haproxy/changelog.yml @@ -3,7 +3,7 @@ changes: - description: Add Prometheus metric data stream type: enhancement - link: https://github.com/elastic/integrations/pull/17270 + link: https://github.com/elastic/integrations/pull/18439 - version: "1.18.0" changes: - description: Expose condition option in UI for metrics