Skip to content

Files

Latest commit

b2f185a · Sep 14, 2021

History

History
This branch is 7382 commits behind DataDog/integrations-core:master.

haproxy

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Aug 17, 2021
Sep 9, 2021
May 30, 2018
Mar 15, 2021
Sep 14, 2021
Dec 22, 2018
Sep 14, 2021
Mar 1, 2021
Aug 17, 2021
Oct 11, 2018
May 14, 2018
Aug 31, 2021
Jun 17, 2021

Haproxy Integration

HAProxy Out of the box Dashboard

Overview

Capture HAProxy activity in Datadog to:

  • Visualize HAProxy load-balancing performance.
  • Know when a server goes down.
  • Correlate the performance of HAProxy with the rest of your applications.

Setup

Installation

The Haproxy check is included in the Datadog Agent package, so you don't need to install anything else on your Haproxy server.

Prepare HAProxy

Using Prometheus

The recommended way to set up this integration is by enabling the Prometheus endpoint on HAProxy. This endpoint is built into HAProxy starting with version 2 (enterprise version 1.9rc1). If you are using an older version, consider setting up the HAProxy Prometheus exporter, or alternatively set up the legacy socket-based integration described in the next section.

  1. Configure your haproxy.conf using the official guide.

  2. Enable the setting use_prometheus in haproxy.d/conf.yaml.

  3. Restart HAProxy to enable the Prometheus endpoint.

  4. Restart the Agent.

Using the stats endpoint

Note: This configuration strategy is provided as a reference for legacy users. If you are setting up the integration for the first time, consider using the Prometheus-based strategy described in the previous section.

The Agent collects metrics via a stats endpoint:

  1. Configure one in your haproxy.conf:

      listen stats # Define a listen section called "stats"
      bind :9000 # Listen on localhost:9000
      mode http
      stats enable  # Enable stats page
      stats hide-version  # Hide HAProxy version
      stats realm Haproxy\ Statistics  # Title text for popup window
      stats uri /haproxy_stats  # Stats URI
      stats auth Username:Password  # Authentication credentials
    
  2. Restart HAProxy to enable the stats endpoint.

Configuration

Host

To configure this check for an Agent running on a host:

Edit the haproxy.d/conf.yaml file, in the conf.d/ folder at the root of your Agent's configuration directory to start collecting your HAProxy metrics and logs. See the sample haproxy.d/conf.yaml for all available configuration options.

Metric collection
  1. Add this configuration block to your haproxy.d/conf.yaml file to start gathering your Haproxy Metrics:

    init_config:
    
    instances:
      ## @param url - string - required
      ## Haproxy URL to connect to gather metrics.
      ## Set the according <USERNAME> and <PASSWORD> or use directly a unix stats
      ## or admin socket: unix:///var/run/haproxy.sock
      #
      - url: http://localhost/admin?stats
  2. Restart the Agent.

Log collection

{{< site-region region="us3" >}} Log collection is not supported for this site. {{< /site-region >}}

By default Haproxy sends logs over UDP to port 514. The Agent can listen for these logs on this port, however, binding to a port number under 1024 requires elevated permissions. Follow the instructions below to set this up. Alternatively, you can use a different port and skip step 3.

  1. Collecting logs is disabled by default in the Datadog Agent, enable it in your datadog.yaml file:

    logs_enabled: true
  2. Add this configuration block to your haproxy.d/conf.yaml file to start collecting your Haproxy Logs:

    logs:
      - type: udp
        port: 514
        service: <SERVICE_NAME>
        source: haproxy

    Change the service parameter value and configure it for your environment. See the sample haproxy.d/conf.yaml for all available configuration options.

  3. Grant access to port 514 using the setcap command:

    sudo setcap CAP_NET_BIND_SERVICE=+ep /opt/datadog-agent/bin/agent/agent

    Verify the setup is correct by running the getcap command:

    sudo getcap /opt/datadog-agent/bin/agent/agent

    With the expected output:

    /opt/datadog-agent/bin/agent/agent = cap_net_bind_service+ep

    Note: Re-run this setcap command every time you upgrade the Agent.

  4. Restart the Agent.

Docker

To configure this check for an Agent running on a container:

Metric collection

Set Autodiscovery Integrations Templates as Docker labels on your application container:

LABEL "com.datadoghq.ad.check_names"='["haproxy"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"url": "https://%%host%%/admin?stats"}]'
Log collection

{{< site-region region="us3" >}} Log collection is not supported for this site. {{< /site-region >}}

Collecting logs is disabled by default in the Datadog Agent. To enable it, see the Docker log collection documentation.

Then, set Log Integrations as Docker labels:

LABEL "com.datadoghq.ad.logs"='[{"source":"haproxy","service":"<SERVICE_NAME>"}]'

Kubernetes

To configure this check for an Agent running on Kubernetes:

Metric collection

Set Autodiscovery Integrations Templates as pod annotations on your application container. Aside from this, templates can also be configured with a file, a configmap, or a key-value store.

apiVersion: v1
kind: Pod
metadata:
  name: haproxy
  annotations:
    ad.datadoghq.com/haproxy.check_names: '["haproxy"]'
    ad.datadoghq.com/haproxy.init_configs: '[{}]'
    ad.datadoghq.com/haproxy.instances: |
      [
        {
          "url": "https://%%host%%/admin?stats"
        }
      ]
spec:
  containers:
    - name: haproxy
Log collection

{{< site-region region="us3" >}} Log collection is not supported for this site. {{< /site-region >}}

Available for Agent versions >6.0

Collecting logs is disabled by default in the Datadog Agent. To enable it, see the Kubernetes log collection documentation.

Then, set Log Integrations as pod annotations. This can also be configured with a file, a configmap, or a key-value store.

apiVersion: v1
kind: Pod
metadata:
  name: haproxy
  annotations:
    ad.datadoghq.com/haproxy.logs: '[{"source":"haproxy","service":"<SERVICE_NAME>"}]'
spec:
  containers:
    - name: haproxy

ECS

To configure this check for an Agent running on ECS:

Metric collection

Set Autodiscovery Integrations Templates as Docker labels on your application container:

{
  "containerDefinitions": [{
    "name": "haproxy",
    "image": "haproxy:latest",
    "dockerLabels": {
      "com.datadoghq.ad.check_names": "[\"haproxy\"]",
      "com.datadoghq.ad.init_configs": "[{}]",
      "com.datadoghq.ad.instances": "[{\"url\": \"https://%%host%%/admin?stats\"}]"
    }
  }]
}
Log collection

{{< site-region region="us3" >}} Log collection is not supported for this site. {{< /site-region >}}

Available for Agent versions >6.0

Collecting logs is disabled by default in the Datadog Agent. To enable it, see the ECS log collection documentation.

Then, set Log Integrations as Docker labels:

{
  "containerDefinitions": [{
    "name": "haproxy",
    "image": "haproxy:latest",
    "dockerLabels": {
      "com.datadoghq.ad.logs": "[{\"source\":\"haproxy\",\"service\":\"<SERVICE_NAME>\"}]"
    }
  }]
}

Validation

Run the Agent's status subcommand and look for haproxy under the Checks section.

Data Collected

Metrics

See metadata.csv for a list of metrics provided by this integration.

Events

The Haproxy check does not include any events.

Service Checks

See service_checks.json for a list of service checks provided by this integration.

Troubleshooting

Need help? Contact Datadog support.

Further Reading