Skip to content

Latest commit

 

History

History
1928 lines (1536 loc) · 37 KB

File metadata and controls

1928 lines (1536 loc) · 37 KB
title tags metaDescription redirects freshnessValidatedDate
HAProxy monitoring integration
Integrations
On-host integrations
On-host integrations list
New Relic's HAProxy integration: what data it reports and how to configure it.
/docs/integrations/host-integrations/host-integrations-list/haproxy-monitoring-integration
/docs/haproxy-integration-new-relic-infrastructure
never

Our HAProxy integration collects and sends inventory and metrics from your HAProxy instance to the New Relic platform, where you can aggregate and visualize key performance metrics for the HAProxy server, frontends, and backends.

Read on to install the integration, and to see what data we collect.

Compatibility and requirements [#comp-req]

Before installation, ensure you meet these requirements:

  • A New Relic account. Don't have one? Sign up for free! No credit card required.
  • HAProxy versions 1.3 - 3.x.
  • HAProxy statistics page is enabled and accessible.

Quick start [#quick]

If you're not running HAProxy in Kubernetes or ECS environments, we recommend our guided install. Our guided install uses our infrastructure agent and our CLI to set up the HAProxy integration, and discovers other applications and log sources running in your environment and then recommends which ones you should instrument.

The guided install works with most setups. But if it doesn't suit your needs, there are other install options below.

Ready to get started? Click the relevant button, depending on which data center region you use. When you're done with the install, return to this documentation to review the configuration options.

Guided install, US region

<ButtonLink role="button" to="https://one.eu.newrelic.com/marketplace/install-data-source?state=6c028963-3596-edf4-83dd-26b9f6e43c5a" variant="primary"

Guided install, EU region

Install and activate [#install]

If you're not using the guided install, follow the instructions for your environment:

See [Monitor service running on ECS](/docs/integrations/host-integrations/host-integrations-list/monitor-services-running-amazon-ecs).

{ ' ' }

<Collapser id="k8s-install" title="Kubernetes"

See [Monitor service running on
Kubernetes](/docs/monitor-service-running-kubernetes).

<Collapser id="linux-install" title="Linux"

1. Install [the infrastructure agent](/docs/integrations/host-integrations/installation/install-infrastructure-host-integrations/#install), and replace the `INTEGRATION_FILE_NAME` variable with `nri-haproxy`.
2. Change directory to the integrations folder:

   ```
   cd /etc/newrelic-infra/integrations.d
   ```
3. Copy the sample configuration file:

   ```
   sudo cp haproxy-config.yml.sample haproxy-config.yml
   ```
4. Edit the `haproxy-config.yml` file as described in the [configuration settings](#config).

<Collapser id="windows-install" title="Windows"

1. Install [the infrastructure agent](/docs/integrations/host-integrations/installation/install-infrastructure-host-integrations/#install), and replace the `INTEGRATION_FILE_NAME` variable with `nri-haproxy`.
2. Download the `nri-haproxy` .MSI installer image from:

   [https://download.newrelic.com/infrastructure_agent/windows/integrations/nri-haproxy/nri-haproxy-amd64.msi](https://download.newrelic.com/infrastructure_agent/windows/integrations/nri-haproxy/nri-haproxy-amd64.msi)
3. To install from the Windows command prompt, run:

   ```
   msiexec.exe /qn /i PATH\TO\nri-haproxy-amd64.msi
   ```
4. In the Integrations directory, `C:\Program Files\New Relic\newrelic-infra\integrations.d\`, create a copy of the sample configuration file by running:

   ```
   cp haproxy-config.yml.sample haproxy-config.yml
   ```
5. Edit the `haproxy-config.yml` configuration file using the [configuration settings](#config).

Update your integration [#update]

This integration doesn't automatically update. For best results, regularly update the integration package and the infrastructure agent.

Post-installation tasks [#after-install]

When you're done with the install, you can set configuration options. Some configurations are required to get the integration to work, while some are optional.

Configure the integration [#config]

If you enabled this integration via our ECS or Kubernetes integration, see those docs:

An integration's YAML format configuration is where you can place required login credentials and configure how data is collected. The options you change depend on your setup and preference.

The configuration file has common settings applicable to all integrations like interval, timeout, inventory_source. To read all about these common settings refer to our Configuration Format document.

If you're still using our legacy configuration/definition files, see the on-host integrations standard configuration format for help.

Specific settings related to HAProxy are defined using the env section of the configuration file. These settings control the connection to your HAProxy instance as well as other security settings and features.

HAProxy configuration options [#config-options]

The Apache integration collects both metrics and inventory information. This table shows what each configuration option applies to.

  <th>
    Description
  </th>

  <th>
    Default
  </th>

  <th>
    Applies To
  </th>
</tr>
  <td>
    A URL pointing to the HAProxy stats page.
  </td>

  <td>
    N/A
  </td>

  <td style={{ "text-align": "center" }}>
    M/I
  </td>
</tr>

{
  ' '
}

<tr>
  <td>
    <DNT>
      **USERNAME**
    </DNT>
  </td>

  <td>
    Username for the HAProxy connection.
  </td>

  <td>
    N/A
  </td>

  <td style={{ 'text-align': 'center' }}>
    M/I
  </td>
</tr>

{
  ' '
}

<tr>
  <td>
    <DNT>
      **PASSWORD**
    </DNT>
  </td>

  <td>
    Password for the given user.
  </td>

  <td>
    N/A
  </td>

  <td style={{ 'text-align': 'center' }}>
    M/I
  </td>
</tr>

{
  ' '
}

<tr>
  <td>
    <DNT>
      **HA_PROXY_CLUSTER_NAME**
    </DNT>
  </td>

  <td>
    A user-defined name to uniquely identify the cluster being monitored.
    <DNT>**Required**</DNT>.
  </td>

  <td>
    N/A
  </td>

  <td style={{ 'text-align': 'center' }}>
    M/I
  </td>
</tr>

{
  ' '
}

<tr>
  <td>
    <DNT>
      **METRICS**
    </DNT>
  </td>

  <td>
    Set to `true` to enable Metrics-only collection.
  </td>

  <td>
    false
  </td>

  <td style={{ 'text-align': 'center' }}/>
</tr>

{
  ' '
}

<tr>
  <td>
    <DNT>
      **INVENTORY**
    </DNT>
  </td>

  <td>
    Set to `true` to enable Inventory-only collection.
  </td>

  <td>
    false
  </td>

  <td style={{ 'text-align': 'center' }}/>
</tr>
Setting
**STATS_URL**

The values for these settings can be defined in several ways:

  • Adding the value directly in the config file (the most common way).
  • Replacing the values from environment variables using the {{}} notation. This requires infrastructure agent version 1.14.0 or higher. For more information, see Infrastructure configuration or see the environment variable example.
  • Using secrets management. Use this to protect sensitive information, such as passwords that would be exposed in plain text in the configuration file. For more information, see Secrets management.

Labels [#labels]

You can further decorate your metrics using labels. Labels allow you to add attributes (key/value pairs) to your metrics, which you can then use to query, filter, or group your metrics.

Our default sample config file includes examples of labels but, because they're not mandatory, you can remove, modify, or add new ones of your choice.

 labels:
   env: production
   role: load_balancer

Example configurations [#examples]

Here are some example YAML configurations:

This is the basic configuration for collecting Metrics and Inventory from your localhost:
```
integrations:
  - name: nri-haproxy
    env:
      STATS_URL: http://haproxy-instance/stats
      USERNAME: haproxy_user
      PASSWORD: haproxy_password
      HA_PROXY_CLUSTER_NAME: haproxycluster
    interval: 15s
    labels:
      env: production
      role: load_balancer
    inventory_source: config/haproxy
```

<Collapser id="envvar-replacement" title="Environment variables replacement"

This configuration uses the environment variable `HAPROXY_STATS` to populate the STATS_URL setting of the integration:

```
integrations:
  - name: nri-haproxy
    env:
      METRICS: "true"
      STATS_URL: {{HAPROXY_STATUS}}
      USERNAME: haproxy_user
      PASSWORD: haproxy_password
      HA_PROXY_CLUSTER_NAME: haproxycluster
    interval: 15s
    labels:
      env: production
      role: load_balancer
```

<Collapser id="multi-instance" title="Multi-instance monitoring"

This configuration monitors multiple HAProxy servers from the same integration. The first instance (`STATUS_URL: https://1st_haproxy-instance/stats`) collects metrics and inventory, the second instance (`STATUS_URL: https://2nd_haproxy-instance/stats`) only collects metrics.

```
integrations:
  - name: nri-haproxy
    env:
      METRICS: "true"
      STATS_URL: http://1st_haproxy-instance/stats
      USERNAME: haproxy_user
      PASSWORD: haproxy_password
      HA_PROXY_CLUSTER_NAME: haproxycluster1
    interval: 15s
    labels:
      env: production
      role: load_balancer
  - name: nri-haproxy
    env:
      INVENTORY: "true"
      STATS_URL: http://1st_haproxy-instance/stats
      USERNAME: haproxy_user
      PASSWORD: haproxy_password
      HA_PROXY_CLUSTER_NAME: haproxycluster1
    interval: 60s
    labels:
      env: production
      role: load_balancer
    inventory_source: config/haproxy

  - name: nri-haproxy
    env:
      METRICS: "true"
      STATS_URL: http://2nd_haproxy-instance/stats
      USERNAME: haproxy_user
      PASSWORD: haproxy_password
      HA_PROXY_CLUSTER_NAME: haproxycluster2
    interval: 15s
    labels:
      env: production
      role: load_balancer
```

Find and use data [#find-and-use]

Data from this integration can be found by going to: one.newrelic.com > Infrastructure > Third-party services > HAProxy.

Metrics are attached to the following event types:

  • HAProxyBackendSample
  • HAProxyFrontendSample
  • HAProxyServerSample

You can query this data for troubleshooting purposes or to create custom charts and dashboards.

For more on how to find and use your data, see Understand integration data.This integration's data is reported to a dedicated New Relic dashboard.

Metric data [#metrics]

The HAProxy integration collects the following metric data attributes. Each metric name is prefixed with a category indicator and a period, such as backend., frontend., or server..

HAProxy backend sample metrics [#backend-sample]

These attributes are attached to the HAProxyBackendSample event type:

  <th>
    Description
  </th>
</tr>
  <td>
    Number of active servers.
  </td>
</tr>

<tr>
  <td>
    `backend.averageConnectTimeInSeconds`
  </td>

  <td>
    Average connect time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `backend.averageQueueTimeInSeconds`
  </td>

  <td>
    Average queue time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `backend.averageResponseTimeInSeconds`
  </td>

  <td>
    Average response time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `backend.averageTotalSessionTimeInSeconds`
  </td>

  <td>
    Average total session time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `backend.backupServers`
  </td>

  <td>
    Number of backup servers.
  </td>
</tr>

<tr>
  <td>
    `backend.bytesInPerSecond`
  </td>

  <td>
    Bytes received per second.
  </td>
</tr>

<tr>
  <td>
    `backend.bytesOutPerSecond`
  </td>

  <td>
    Bytes sent per second.
  </td>
</tr>

<tr>
  <td>
    `backend.bytesThatBypassedCompressorPerSecond`
  </td>

  <td>
    Number of bytes that bypassed the HTTP compressor per second.
  </td>
</tr>

<tr>
  <td>
    `backend.connectingRequestErrorsPerSecond`
  </td>

  <td>
    Number of requests that encountered an error trying to connect to a backend server per second.
  </td>
</tr>

<tr>
  <td>
    `backend.connectionRetriesPerSecond`
  </td>

  <td>
    Number of times a connection to a server was retried per second.
  </td>
</tr>

<tr>
  <td>
    `backend.cookieName`
  </td>

  <td>
    The name of the cookie.
  </td>
</tr>

<tr>
  <td>
    `backend.currentQueuedRequestsWithoutServer`
  </td>

  <td>
    Current queued requests without a server assigned.
  </td>
</tr>

<tr>
  <td>
    `backend.currentSessions`
  </td>

  <td>
    Number of current sessions.
  </td>
</tr>

<tr>
  <td>
    `backend.dataTransfersAbortedByClientPerSecond`
  </td>

  <td>
    Number of data transfers aborted by the client per second.
  </td>
</tr>

<tr>
  <td>
    `backend.dataTransfersAbortedByServerPerSecond`
  </td>

  <td>
    Number of data transfers aborted by the server per second.
  </td>
</tr>

<tr>
  <td>
    `backend.downtimeInSeconds`
  </td>

  <td>
    Total downtime in seconds.
  </td>
</tr>

<tr>
  <td>
    `backend.http100ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 1xx code per second.
  </td>
</tr>

<tr>
  <td>
    `backend.http200ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 2xx code per second.
  </td>
</tr>

<tr>
  <td>
    `backend.http300ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 3xx code per second.
  </td>
</tr>

<tr>
  <td>
    `backend.http400ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 4xx code per second.
  </td>
</tr>

<tr>
  <td>
    `backend.http500ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 5xx code per second.
  </td>
</tr>

<tr>
  <td>
    `backend.httpOtherResponsesPerSecond`
  </td>

  <td>
    HTTP responses with other codes (protocol error) per second.
  </td>
</tr>

<tr>
  <td>
    `backend.httpRequestsPerSecond`
  </td>

  <td>
    HTTP requests per second.
  </td>
</tr>

<tr>
  <td>
    `backend.httpResponseBytesEmittedByCompressorPerSecond`
  </td>

  <td>
    Number of HTTP response bytes emitted by the compressor per second.
  </td>
</tr>

<tr>
  <td>
    `backend.httpResponseBytesFedToCompressorPerSecond`
  </td>

  <td>
    Number of HTTP response bytes fed to the compressor per second.
  </td>
</tr>

<tr>
  <td>
    `backend.httpResponsesCompressedPerSecond`
  </td>

  <td>
    Number of HTTP responses that were compressed per second.
  </td>
</tr>

<tr>
  <td>
    `backend.interceptedRequestsPerSecond`
  </td>

  <td>
    Intercepted requests per second.
  </td>
</tr>

<tr>
  <td>
    `backend.maxQueuedRequestsWithoutServer`
  </td>

  <td>
    Maximum queued requests without a server assigned.
  </td>
</tr>

<tr>
  <td>
    `backend.maxSessions`
  </td>

  <td>
    Maximum number of sessions.
  </td>
</tr>

<tr>
  <td>
    `backend.maxSessionsPerSecond`
  </td>

  <td>
    Maximum number of new sessions per second.
  </td>
</tr>

<tr>
  <td>
    `backend.mode`
  </td>

  <td>
    The proxy mode. Options: tcp, http, health, unknown.
  </td>
</tr>

<tr>
  <td>
    `backend.proxyName`
  </td>

  <td>
    The name of the proxy.
  </td>
</tr>

<tr>
  <td>
    `backend.requestRedispatchPerSecond`
  </td>

  <td>
    Number of times a request was redispatched to another server per second.
  </td>
</tr>

<tr>
  <td>
    `backend.requestsDenied.securityConcernPerSecond`
  </td>

  <td>
    Requests denied bytcp-request connection rules per second.
  </td>
</tr>

<tr>
  <td>
    `backend.responseErrorsPerSecond`
  </td>

  <td>
    Response errors per second.
  </td>
</tr>

<tr>
  <td>
    `backend.responsesDenied.securityConcernPerSecond`
  </td>

  <td>
    Requests denied bytcp-request session rules per second.
  </td>
</tr>

<tr>
  <td>
    `backend.serverSelectedPerSecond`
  </td>

  <td>
    Number of times a server was selected per second, either for new sessions, or when re-dispatching.
  </td>
</tr>

<tr>
  <td>
    `backend.sessionsPerSecond`
  </td>

  <td>
    Sessions created per second.
  </td>
</tr>

<tr>
  <td>
    `backend.status`
  </td>

  <td>
    Status. Options: UP, DOWN, NOLB, MAINT, MAINT(via), MAINT(resolution).
  </td>
</tr>

<tr>
  <td>
    `backend.timeSinceLastSessionAssignedInSeconds`
  </td>

  <td>
    Number of seconds since last session assigned to backend.
  </td>
</tr>

<tr>
  <td>
    `backend.timeSinceLastUpDownTransitionInSeconds`
  </td>

  <td>
    Number of seconds since the last UP&lt;->DOWN transition.
  </td>
</tr>

<tr>
  <td>
    `backend.totalWeight`
  </td>

  <td>
    Total weight of the backend.
  </td>
</tr>

<tr>
  <td>
    `backend.type`
  </td>

  <td>
    Type of backend. `0` = frontend, `1` = backend, `2` = server, `3` = socket/listener.
  </td>
</tr>

<tr>
  <td>
    `backend.upToDownTransitionsPerSecond`
  </td>

  <td>
    Number of UP->DOWN transitions per second.
  </td>
</tr>
Metric
`backend.activeServers`

HAProxy frontend sample metrics [#frontend-sample]

These attributes are attached to the HAProxyFrontendSample event type:

  <th>
    Description
  </th>
</tr>
  <td>
    Number of bytes received per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.bytesOutPerSecond`
  </td>

  <td>
    Number of bytes sent per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.connectionsPerSecond`
  </td>

  <td>
    Number of connections per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.currentSessions`
  </td>

  <td>
    Number of current sessions.
  </td>
</tr>

<tr>
  <td>
    `frontend.http100ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 1xx code per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.http200ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 2xx code per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.http300ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 3xx code per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.http400ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 4xx code per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.http500ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 5xx code per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.httpOtherResponsesPerSecond`
  </td>

  <td>
    HTTP responses with other codes (protocol error).
  </td>
</tr>

<tr>
  <td>
    `frontend.httpRequests.maxPerSecond`
  </td>

  <td>
    Max number of HTTP requests per second observed.
  </td>
</tr>

<tr>
  <td>
    `frontend.httpRequestsPerSecond`
  </td>

  <td>
    HTTP requests per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.interceptedRequestsPerSecond`
  </td>

  <td>
    Intercepted requests per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.maxConnectionsPerSecond`
  </td>

  <td>
    Maximum number of connections.
  </td>
</tr>

<tr>
  <td>
    `frontend.maxSessions`
  </td>

  <td>
    Maximum number of sessions.
  </td>
</tr>

<tr>
  <td>
    `frontend.maxSessionsPerSecond`
  </td>

  <td>
    Maximum number of new sessions per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.mode`
  </td>

  <td>
    Proxy mode. One of tcp, http, health, unknown.
  </td>
</tr>

<tr>
  <td>
    `frontend.proxyName`
  </td>

  <td>
    The name of the proxy.
  </td>
</tr>

<tr>
  <td>
    `frontend.requestErrors`
  </td>

  <td>
    Request errors per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.requestsDenied.securityConcernsPerSecond`
  </td>

  <td>
    Requests denied because of security concerns per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.requestsDenied.tcpRequestConnectionRulesPerSecond`
  </td>

  <td>
    Requests denied bytcp-request connection rules per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.requestsDenied.tcpRequestSessionRulesPerSecond`
  </td>

  <td>
    Requests denied bytcp-request session rules per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.responsesDenied.securityConcernsPerSecond`
  </td>

  <td>
    Responses denied because of security concerns per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.serviceName`
  </td>

  <td>
    The name of the service.
  </td>
</tr>

<tr>
  <td>
    `frontend.sessionsPerSecond`
  </td>

  <td>
    Sessions created per second.
  </td>
</tr>

<tr>
  <td>
    `frontend.status`
  </td>

  <td>
    The status of the frontend. Options: UP, DOWN, NOLB, MAINT, MAINT(via), MAINT(resolution).
  </td>
</tr>

<tr>
  <td>
    `frontend.type`
  </td>

  <td>
    Type of frontend. `0` = frontend, `1` = backend, `2` = server, `3` = socket/listener.
  </td>
</tr>
Metric
`frontend.bytesInPerSecond`

HAProxy server sample metrics [#server-sample]

These attributes are attached to the HAProxyServerSample event type:

  <th>
    Description
  </th>
</tr>
  <td>
    Last agent check contents or textual error.
  </td>
</tr>

<tr>
  <td>
    `server.agentDurationSeconds`
  </td>

  <td>
    Time taken to finish last check, in seconds.
  </td>
</tr>

<tr>
  <td>
    `server.agentStatus`
  </td>

  <td>
    Status of the agent.
  </td>
</tr>

<tr>
  <td>
    `server.agentStatusDescription`
  </td>

  <td>
    Short human-readable description of `agent_status`.
  </td>
</tr>

<tr>
  <td>
    `server.averageConnectTimeInSeconds`
  </td>

  <td>
    Average connect time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `server.averageQueueTimeInSeconds`
  </td>

  <td>
    Average queue time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `server.averageResponseTimeInSeconds`
  </td>

  <td>
    Average response time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `server.averageTotalSessionTimeInSeconds`
  </td>

  <td>
    Average total session time over the 1024 last requests, in seconds.
  </td>
</tr>

<tr>
  <td>
    `server.bytesInPerSecond`
  </td>

  <td>
    Bytes received per second.
  </td>
</tr>

<tr>
  <td>
    `server.bytesOutPerSecond`
  </td>

  <td>
    Bytes sent per second.
  </td>
</tr>

<tr>
  <td>
    `server.checkStatusDescription`
  </td>

  <td>
    Short human-readable description of `check_status`.
  </td>
</tr>

<tr>
  <td>
    `server.connectingToBackendRequestErrorsPerSecond`
  </td>

  <td>
    Number of requests that encountered an error trying to connect to a backend server per second.
  </td>
</tr>

<tr>
  <td>
    `server.connectionRetriesPerSecond`
  </td>

  <td>
    Number of times a connection to a server was retried per second.
  </td>
</tr>

<tr>
  <td>
    `server.cookieValue`
  </td>

  <td>
    Server's cookie value.
  </td>
</tr>

<tr>
  <td>
    `server.currentSessions`
  </td>

  <td>
    Number of current sessions.
  </td>
</tr>

<tr>
  <td>
    `server.dataTransfersAbortedByClientPerSecond`
  </td>

  <td>
    Number of data transfers aborted by the client per second.
  </td>
</tr>

<tr>
  <td>
    `server.dataTransfersAbortedByServerPerSecond`
  </td>

  <td>
    Number of data transfers aborted by the server per second.
  </td>
</tr>

<tr>
  <td>
    `server.downtimeInSeconds`
  </td>

  <td>
    Total downtime in seconds.
  </td>
</tr>

<tr>
  <td>
    `server.failedChecksPerSecond`
  </td>

  <td>
    Number of failed checks per second.
  </td>
</tr>

<tr>
  <td>
    `server.failedHealthCheckDetails`
  </td>

  <td>
    Failed health check details.
  </td>
</tr>

<tr>
  <td>
    `server.healthCheckContents`
  </td>

  <td>
    Last health check contents or textual error.
  </td>
</tr>

<tr>
  <td>
    `server.healthCheckDurationInMilliseconds`
  </td>

  <td>
    Time it took to finish the last health check, in milliseconds.
  </td>
</tr>

<tr>
  <td>
    `server.healthCheckStatus`
  </td>

  <td>
    Health check status.
  </td>
</tr>

<tr>
  <td>
    `server.http100ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 1xx code per second.
  </td>
</tr>

<tr>
  <td>
    `server.http200ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 2xx code per second.
  </td>
</tr>

<tr>
  <td>
    `server.http300ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 3xx code per second.
  </td>
</tr>

<tr>
  <td>
    `server.http400ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 4xx code per second.
  </td>
</tr>

<tr>
  <td>
    `server.http500ResponsesPerSecond`
  </td>

  <td>
    HTTP responses with 5xx code per second.
  </td>
</tr>

<tr>
  <td>
    `server.httpOtherResponsesPerSecond`
  </td>

  <td>
    HTTP responses with other codes (protocol error).
  </td>
</tr>

<tr>
  <td>
    `server.isActive`
  </td>

  <td>
    Whether the server is active. `0` = Inactive, `1` = Active.
  </td>
</tr>

<tr>
  <td>
    `server.isBackup`
  </td>

  <td>
    Whether the server is a backup. `0` = Not Backup, `1` = Backup.
  </td>
</tr>

<tr>
  <td>
    `server.layerCode`
  </td>

  <td>
    Layer 5-7 code, if available.
  </td>
</tr>

<tr>
  <td>
    `server.maximumQueuedRequests`
  </td>

  <td>
    Maximum queued requests.
  </td>
</tr>

<tr>
  <td>
    `server.maxSessions`
  </td>

  <td>
    Number of maximum sessions.
  </td>
</tr>

<tr>
  <td>
    `server.maxSessionsPerSecond`
  </td>

  <td>
    Max sessions per second.
  </td>
</tr>

<tr>
  <td>
    `server.mode`
  </td>

  <td>
    Proxy mode. One of tcp, http, health, unknown.
  </td>
</tr>

<tr>
  <td>
    `server.proxyName`
  </td>

  <td>
    The name of the proxy.
  </td>
</tr>

<tr>
  <td>
    `server.queuedRequests`
  </td>

  <td>
    Current queued requests.
  </td>
</tr>

<tr>
  <td>
    `server.requestRedispatchPerSecond`
  </td>

  <td>
    Number of times a request was redispatched to another server per second.
  </td>
</tr>

<tr>
  <td>
    `server.requestsDenied.securityConcernPerSecond`
  </td>

  <td>
    Requests denied because of security concerns per second.
  </td>
</tr>

<tr>
  <td>
    `server.responseErrorsPerSecond`
  </td>

  <td>
    Response errors per second.
  </td>
</tr>

<tr>
  <td>
    `server.responsesDenied.securityConcernPerSecond`
  </td>

  <td>
    Responses denied because of security concerns per second.
  </td>
</tr>

<tr>
  <td>
    `server.serverID`
  </td>

  <td>
    The server ID.
  </td>
</tr>

<tr>
  <td>
    `server.serverSelectedPerSecond`
  </td>

  <td>
    Number of times a server was selected per second, either for new sessions, or when re-dispatching.
  </td>
</tr>

<tr>
  <td>
    `server.serverWeight`
  </td>

  <td>
    The server weight.
  </td>
</tr>

<tr>
  <td>
    `server.serviceName`
  </td>

  <td>
    The name of the service.
  </td>
</tr>

<tr>
  <td>
    `server.sessionsPerSecond`
  </td>

  <td>
    Sessions per second.
  </td>
</tr>

<tr>
  <td>
    `server.status`
  </td>

  <td>
    The status of the server. Options: UP, DOWN, NOLB, MAINT, MAINT(via), MAINT(resolution).
  </td>
</tr>

<tr>
  <td>
    `server.throttlePercentage`
  </td>

  <td>
    Throttle percentage for the server, when slowstart is active. Or no value if not in slowstart.
  </td>
</tr>

<tr>
  <td>
    `server.timeSinceLastSessionAssignedInSeconds`
  </td>

  <td>
    Number of seconds since last session assigned to backend.
  </td>
</tr>

<tr>
  <td>
    `server.timeSinceLastUpDownTransitionInSeconds`
  </td>

  <td>
    Number of seconds since the last UP&lt;->DOWN transition.
  </td>
</tr>

<tr>
  <td>
    `server.type`
  </td>

  <td>
    The type of server. `0` = frontend, `1` = backend, `2` = server, `3` = socket/listener.
  </td>
</tr>

<tr>
  <td>
    `server.upToDownTransitionsPerSecond`
  </td>

  <td>
    Number of UP->DOWN transitions per second.
  </td>
</tr>
Metric
`server.agentCheckContents`

Inventory data [#inventory]

The HAProxy integration captures the configuration parameters of the HAProxy instance. The data is available on the infrastructure Inventory page, under the config/haproxy source. For more about inventory data, see Understand integration data.

The integration captures data for the following configuration parameters:

Backend inventory

  <th>
    Description
  </th>
</tr>
  <td>
    The backend proxy ID.
  </td>
</tr>

<tr>
  <td>
    `pid`
  </td>

  <td>
    The backend process ID.
  </td>
</tr>

<tr>
  <td>
    `slim`
  </td>

  <td>
    The backend session limit.
  </td>
</tr>
Name
`iid`

Frontend inventory

  <th>
    Description
  </th>
</tr>
  <td>
    The frontend proxy ID.
  </td>
</tr>

<tr>
  <td>
    `pid`
  </td>

  <td>
    The frontend process ID.
  </td>
</tr>

<tr>
  <td>
    `rate_lim`
  </td>

  <td>
    New session per second limit.
  </td>
</tr>

<tr>
  <td>
    `slim`
  </td>

  <td>
    The frontend session limit.
  </td>
</tr>
Name
`iid`

Server inventory

  <th>
    Description
  </th>
</tr>
  <td>
    The backend proxy ID.
  </td>
</tr>

<tr>
  <td>
    `pid`
  </td>

  <td>
    The server process ID.
  </td>
</tr>

<tr>
  <td>
    `qmax`
  </td>

  <td>
    The configured max queue. `0` = no limit.
  </td>
</tr>

<tr>
  <td>
    `sid`
  </td>

  <td>
    The server ID.
  </td>
</tr>

<tr>
  <td>
    `slim`
  </td>

  <td>
    The server session limit.
  </td>
</tr>
Name
`iid`

Check the source code [#source-code]

This integration is open source software. That means you can browse its source code and send improvements, or create your own fork and build it.