---
title: External Secrets
description: >-
  The External Secrets Operator (ESO) synchronizes secrets from external
  providers into Kubernetes Secrets.
breadcrumbs: Docs > Integrations > External Secrets
---

> For the complete documentation index, see [llms.txt](https://docs.datadoghq.com/llms.txt).

# External Secrets
Supported OS Integration version0.1.0
{% callout %}
# Important note for users on the following Datadog sites: us2.ddog-gov.com

{% alert level="info" %}
To find out if this integration is available in your organization, see your [Datadog Integrations](https://app.datadoghq.com/integrations) page or ask your organization administrator.

To initiate an exception request to enable this integration for your organization, email [support@ddog-gov.com](mailto:support@ddog-gov.com).
{% /alert %}

{% /callout %}

## Overview{% #overview %}

The [External Secrets Operator](https://external-secrets.io/) (ESO) synchronizes secrets from external providers, such as HashiCorp Vault or AWS Secrets Manager, into Kubernetes Secrets. This integration provides visibility into ESO's health and performance, including reconciliation rates, provider API calls, secret sync status, and controller runtime metrics.

## Setup{% #setup %}

### Installation{% #installation %}

If you are using Agent v6.8+ follow the instructions below to install the External Secrets check on your host. See the dedicated Agent guide for [installing community integrations](https://docs.datadoghq.com/agent/guide/use-community-integrations.md) to install checks with the [Agent Manager](https://docs.datadoghq.com/agent/guide/agent-commands.md?tab=agentv6v7#start-stop-and-restart-the-agent) or in a [Docker environment](https://docs.datadoghq.com/agent/guide/use-community-integrations.md?tab=docker).

1. [Download and launch the Datadog Agent](https://app.datadoghq.com/account/settings/agent/latest).

1. Run the following command to install the Agent integration:

   ```shell
   datadog-agent integration install -t datadog-external-secrets==<INTEGRATION_VERSION>
   ```

1. Configure your integration in the same way as core [integrations](https://docs.datadoghq.com/getting_started/integrations.md).

### Configuration{% #configuration %}

1. Edit the `external_secrets.d/conf.yaml` file in the `conf.d/` folder at the root of your [Agent's configuration directory](https://docs.datadoghq.com/agent/guide/agent-configuration-files.md#agent-configuration-directory) to start collecting your External Secrets Operator metrics. See the [sample external_secrets.d/conf.yaml](https://github.com/DataDog/integrations-extras/blob/master/external_secrets/datadog_checks/external_secrets/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 `external_secrets` under the Checks section.

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

### Metrics{% #metrics %}

|  |
|  |
| **external_secrets.externalsecret.status_condition**(gauge)                    | The status condition of a specific External Secret.                               |
| **external_secrets.externalsecret.reconcile_duration**(gauge)                  | The duration time to reconcile the External Secret.*Shown as millisecond*         |
| **external_secrets.externalsecret.sync_calls.count**(count)                    | Total number of the External Secret sync calls.                                   |
| **external_secrets.externalsecret.sync_calls_error.count**(count)             | Total number of the External Secret sync errors.                                  |
| **external_secrets.externalsecret.provider_api_calls.count**(count)           | Number of API calls made to an upstream secret provider API.                      |
| **external_secrets.clusterexternalsecret.status_condition**(gauge)             | The status condition of a specific Cluster External Secret.                       |
| **external_secrets.clusterexternalsecret.reconcile_duration**(gauge)           | The duration time to reconcile the Cluster External Secret.*Shown as millisecond* |
| **external_secrets.pushsecret.status_condition**(gauge)                        | The status condition of a specific Push Secret.                                   |
| **external_secrets.pushsecret.reconcile_duration**(gauge)                      | The duration time to reconcile the Push Secret.*Shown as millisecond*             |
| **external_secrets.clustersecretstore.status_condition**(gauge)                | The status condition of a specific Cluster Secret Store.                          |
| **external_secrets.clustersecretstore.reconcile_duration**(gauge)              | The duration time to reconcile the Cluster Secret Store.*Shown as millisecond*    |
| **external_secrets.secretstore.status_condition**(gauge)                       | The status condition of a specific Secret Store.                                  |
| **external_secrets.secretstore.reconcile_duration**(gauge)                     | The duration time to reconcile the Secret Store.*Shown as millisecond*            |
| **external_secrets.controller_runtime.reconcile.count**(count)                 | Total number of reconciliations per controller.                                   |
| **external_secrets.controller_runtime.reconcile_errors.count**(count)         | Total number of reconciliation errors per controller.                             |
| **external_secrets.controller_runtime.reconcile_time_seconds.count**(count)  | Number of reconciliation duration observations.*Shown as second*                  |
| **external_secrets.controller_runtime.reconcile_time_seconds.sum**(count)    | Sum of reconciliation durations.*Shown as second*                                 |
| **external_secrets.controller_runtime.reconcile_time_seconds.bucket**(count) | Histogram buckets of reconciliation durations.*Shown as second*                   |
| **external_secrets.controller_runtime.active_workers**(gauge)                 | Number of currently used workers per controller.                                  |
| **external_secrets.controller_runtime.max_concurrent_reconciles**(gauge)     | Maximum number of concurrent reconciles per controller.                           |
| **external_secrets.workqueue.depth**(gauge)                                     | Current depth of the workqueue.                                                   |

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

**external_secrets.openmetrics.health**

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

*Statuses: ok, critical*

### Events{% #events %}

The External Secrets integration does not include any events.

## Troubleshooting{% #troubleshooting %}

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

## Further Reading{% #further-reading %}

Additional helpful documentation, links, and articles:

- [External Secrets](https://external-secrets.io/)
