---
title: Boundary
description: Monitor Boundary controllers and workers.
breadcrumbs: Docs > Integrations > Boundary
---

# Boundary
Supported OS Integration version4.4.1
## Overview{% #overview %}

This check monitors [Boundary](https://www.boundaryproject.io) through the Datadog Agent. The minimum supported version of Boundary is `0.8.0`.

**Minimum Agent version:** 7.38.0

## Setup{% #setup %}

Follow the instructions below to install and configure this check for an Agent running on a host. For containerized environments, see the [Autodiscovery Integration Templates](https://docs.datadoghq.com/agent/kubernetes/integrations.md) for guidance on applying these instructions.

### Installation{% #installation %}

The Boundary check is included in the [Datadog Agent](https://app.datadoghq.com/account/settings/agent/latest) package. No additional installation is needed on your server.

### Configuration{% #configuration %}

#### Listener{% #listener %}

A listener with an `ops` purpose must be set up in the `config.hcl` file to enable metrics collection. Here's an example listener stanza:

```hcl
controller {
  name = "boundary-controller"
  database {
    url = "postgresql://<username>:<password>@10.0.0.1:5432/<database_name>"
  }
}

listener "tcp" {
  purpose = "api"
  tls_disable = true
}

listener "tcp" {
  purpose = "ops"
  tls_disable = true
}
```

The `boundary.controller.health` service check submits as `WARNING` when the controller is shutting down. To enable this shutdown grace period, update the `controller` block with a defined wait duration:

```hcl
controller {
  name = "boundary-controller"
  database {
    url = "env://BOUNDARY_PG_URL"
  }
  graceful_shutdown_wait_duration = "10s"
}
```

#### Datadog Agent{% #datadog-agent %}

1. Edit the `boundary.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your boundary performance data. See the [sample boundary.d/conf.yaml](https://github.com/DataDog/integrations-core/blob/master/boundary/datadog_checks/boundary/data/conf.yaml.example) for all available configuration options.

1. [Restart the Agent](https://docs.datadoghq.com/agent/guide/agent-commands.md#start-stop-and-restart-the-agent).

### Validation{% #validation %}

[Run the Agent's status subcommand](https://docs.datadoghq.com/agent/guide/agent-commands.md#agent-status-and-information) and look for `boundary` under the Checks section.

## Data Collected{% #data-collected %}

### Metrics{% #metrics %}

|  |
|  |
| **boundary.cluster.client.grpc.request\_duration\_seconds.bucket**(count)     | Histogram of latencies for gRPC requests between the cluster and any of its clients.*Shown as second*                                             |
| **boundary.cluster.client.grpc.request\_duration\_seconds.count**(count)      | Histogram of latencies for gRPC requests between the cluster and any of its clients.*Shown as second*                                             |
| **boundary.cluster.client.grpc.request\_duration\_seconds.sum**(count)        | Histogram of latencies for gRPC requests between the cluster and any of its clients.*Shown as second*                                             |
| **boundary.controller.api.http.request\_duration\_seconds.bucket**(count)     | Histogram of latencies for HTTP requests.*Shown as second*                                                                                        |
| **boundary.controller.api.http.request\_duration\_seconds.count**(count)      | Histogram of latencies for HTTP requests.*Shown as second*                                                                                        |
| **boundary.controller.api.http.request\_duration\_seconds.sum**(count)        | Histogram of latencies for HTTP requests.*Shown as second*                                                                                        |
| **boundary.controller.api.http.request\_size\_bytes.bucket**(count)           | Histogram of request sizes for HTTP requests.*Shown as byte*                                                                                      |
| **boundary.controller.api.http.request\_size\_bytes.count**(count)            | Histogram of request sizes for HTTP requests.*Shown as byte*                                                                                      |
| **boundary.controller.api.http.request\_size\_bytes.sum**(count)              | Histogram of request sizes for HTTP requests.*Shown as byte*                                                                                      |
| **boundary.controller.api.http.response\_size\_bytes.bucket**(count)          | Histogram of response sizes for HTTP responses.*Shown as byte*                                                                                    |
| **boundary.controller.api.http.response\_size\_bytes.count**(count)           | Histogram of response sizes for HTTP responses.*Shown as byte*                                                                                    |
| **boundary.controller.api.http.response\_size\_bytes.sum**(count)             | Histogram of response sizes for HTTP responses.*Shown as byte*                                                                                    |
| **boundary.controller.cluster.grpc.request\_duration\_seconds.bucket**(count) | Histogram of latencies for gRPC requests.*Shown as second*                                                                                        |
| **boundary.controller.cluster.grpc.request\_duration\_seconds.count**(count)  | Histogram of latencies for gRPC requests.*Shown as second*                                                                                        |
| **boundary.controller.cluster.grpc.request\_duration\_seconds.sum**(count)    | Histogram of latencies for gRPC requests.*Shown as second*                                                                                        |
| **boundary.worker.proxy.http.write\_header\_duration\_seconds.bucket**(count) | Histogram of time elapsed after the TLS connection is established to when the first http header is written back from the server.*Shown as second* |
| **boundary.worker.proxy.http.write\_header\_duration\_seconds.count**(count)  | Histogram of time elapsed after the TLS connection is established to when the first http header is written back from the server.*Shown as second* |
| **boundary.worker.proxy.http.write\_header\_duration\_seconds.sum**(count)    | Histogram of time elapsed after the TLS connection is established to when the first http header is written back from the server.*Shown as second* |
| **boundary.worker.proxy.websocket.active\_connections**(gauge)                | Count of open websocket proxy connections (to Boundary workers).*Shown as connection*                                                             |
| **boundary.worker.proxy.websocket.received\_bytes.count**(count)              | Count of received bytes for Worker proxy websocket connections.*Shown as byte*                                                                    |
| **boundary.worker.proxy.websocket.sent\_bytes.count**(count)                  | Count of sent bytes for Worker proxy websocket connections.*Shown as byte*                                                                        |

### Events{% #events %}

The Boundary integration does not include any events.

### Service Checks{% #service-checks %}

**boundary.openmetrics.health**

Returns `CRITICAL` if the Agent is unable to connect to the OpenMetrics endpoint, otherwise returns `OK`.

*Statuses: ok, critical*

**boundary.controller.health**

Returns `CRITICAL` if the Agent is unable to connect to the controller's health endpoint, `WARNING` if the controller received a shutdown signal, otherwise returns `OK`.

*Statuses: ok, warning, critical*

### Log collection{% #log-collection %}

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

   ```yaml
   logs_enabled: true
   ```

1. To start collecting your Boundary logs, add this configuration block to your `boundary.d/conf.yaml` file:

   ```yaml
   logs:
      - type: file
        source: boundary
        path: /var/log/boundary/events.ndjson
   ```

Change the `path` parameter value based on your environment. See the [sample `boundary.d/conf.yaml` file](https://github.com/DataDog/integrations-core/blob/master/boundary/datadog_checks/boundary/data/conf.yaml.example) for all available configuration options.

## Troubleshooting{% #troubleshooting %}

Need help? Contact [Datadog support](https://docs.datadoghq.com/help/).
