> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chronosphere.io/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenMetrics

> Metrics scraped from OpenMetrics and Prometheus endpoints.

The OpenMetrics integration requires CXDOT Collector 1.4.0 or greater.

[OpenMetrics](https://openmetrics.io/) defines a standard format for exposing metrics.
Use the OpenMetrics integration with the Chronosphere XDOT Collector to collect metrics from
OpenMetrics and Prometheus endpoints running in your environment.

## Supported telemetry types

The OpenMetrics integration supports these telemetry types:

| Type    | Supported |
| ------- | --------- |
| Logs    | No        |
| Metrics | Yes       |
| Traces  | No        |
| Events  | No        |

## Prerequisites

The OpenMetrics integration has the following prerequisites:

* Make each OpenMetrics or Prometheus endpoint reachable from the collector.
* Identify the metric names to collect from each endpoint.

## Configure

To configure the OpenMetrics integration, follow these steps:

1. For discovered endpoints, provide the full endpoint URL and the metrics to collect
   through autodiscovery annotations.

   For more information, see
   [autodiscovery](https://docs.chronosphere.io/ingest/cxdot-collector/autodiscovery).

2. Optional: Configure static targets. For example, add the following to the
   `values.yaml` for your Helm chart:

   ```yaml theme={null}
   config:
     integrations:
       openmetrics:
         scrape:
           endpoints:
             - endpoint: http://app.example.com/metrics
               metrics:
                 include:
                   - requests
   ```

### Validate

To validate the OpenMetrics integration, follow these steps:

1. In the Live Telemetry Analyzer, filter for
   `cxdot.integration.name=openmetrics`. Confirm that the selected metric names
   appear.

2. If you used the preceding static target example, run the following query in Metrics
   Explorer:

   ```text theme={null}
   count by ("server.address", "server.port") ({"requests"})
   ```

   Confirm that the query returns the expected time series for each target.

For more information about diagnosing a failing integration, see
[Troubleshooting](https://docs.chronosphere.io/ingest/cxdot-collector/troubleshooting).

## Configuration reference

Configure one OpenMetrics integration instance with the following settings. In Helm values,
place these settings under `config.integrations.openmetrics`. In a Collector configuration file,
place them under `cxdot.integrations.openmetrics`.

### Optional settings

* **`enabled`**
  Type: `boolean`. Optional. Default: `true`.
  Whether to run the OpenMetrics integration. If true, the Collector collects metrics from
  configured or discovered endpoints. If false, the Collector doesn't run this integration.

* **`scrape`**
  Type: `object`. Optional.
  Settings for collecting metrics from OpenMetrics endpoints.

* **`scrape.enabled`**
  Type: `boolean`. Optional. Default: `true`.
  Whether to collect OpenMetrics metrics. If true, the Collector collects metrics from
  configured or discovered endpoints. If false, it doesn't collect OpenMetrics metrics.

* **`scrape.endpoints`**
  Type: `array of object`. Optional.
  Static OpenMetrics endpoints. Each entry identifies one target and the metrics to collect from
  it. When this list isn't empty, the integration collects from exactly these endpoints instead
  of endpoints found through discovery annotations.

* **`scrape.endpoints[].endpoint`**
  Type: `string`. Required.
  Full URL of the metrics endpoint, for example `https://app.svc:9090/metrics?format=text`.
  Metric collection uses the path and query exactly as given.

* **`scrape.endpoints[].namespace`**
  Type: `string`. Optional.
  A name recorded on every time series from this endpoint, as the `cxdot.openmetrics.namespace`
  resource attribute. Metric names stay exactly as the target exposes them, so this groups an
  endpoint's telemetry without changing what its metrics are called.

* **`scrape.endpoints[].service`**
  Type: `string`. Optional.
  Overrides the `service.name` resource attribute for this endpoint.

* **`scrape.endpoints[].metrics`**
  Type: `object`. Required.
  Which metrics to collect, and how to reshape them.

* **`scrape.endpoints[].metrics.include`**
  Type: `array of string`. Required. Minimum items: `1`.
  Target metrics to collect. The integration always collects its health and collection status
  metrics. Each entry is a regular expression matched against the metric name. Type suffixes are
  not part of the name: a counter exposed as `requests_total` is collected as `requests`,
  because OpenMetrics calls that family `requests` and carries the type separately. To collect
  every target metric, use `".*"`.

* **`scrape.endpoints[].metrics.exclude`**
  Type: `array of string`. Optional.
  Target metrics to exclude from the metrics selected by `include`. Each entry is a regular
  expression matched against the metric name. Health and collection status metrics aren't
  excluded.

* **`scrape.endpoints[].metrics.rename`**
  Type: `object`. Optional.
  Metric renames, as `{old: new}`. Only an exact name can be renamed. The integration ignores a
  rename whose key is a regular expression.

* **`scrape.endpoints[].metrics.types`**
  Type: `object`. Optional.
  Metric type overrides, as `{name: counter}`. Keys are exact metric names or regular
  expressions. Values are `counter` or `gauge`. A metric without a declared type is otherwise
  read as a gauge.

* **`scrape.endpoints[].metrics.strip_prefix`**
  Type: `string`. Optional.
  A prefix removed from every metric name during collection. Removed first, so every other
  option here, `include` included, refers to the shortened name.

* **`scrape.endpoints[].labels`**
  Type: `object`. Optional.
  Settings for renaming labels and dropping samples.

* **`scrape.endpoints[].labels.rename`**
  Type: `object`. Optional.
  Label renames, as `{old: new}`. A rename changes the label name without removing the label, so
  distinct time series remain distinct. Renaming a label to a name the time series already has
  overwrites that label's value.

* **`scrape.endpoints[].labels.sample_drop_rules`**
  Type: `object`. Optional.
  Drops a whole sample when one of its labels matches. Each key is a label name. The value is a
  list of regular expressions matched against the label's value. To drop every sample the label
  appears on with a non-empty value, use `".+"`.

* **`scrape.endpoints[].tags`**
  Type: `array of string`. Optional.
  Extra resource attributes in `key:value` format to add to every time series from this
  endpoint. The integration ignores an entry without a colon.

* **`scrape.endpoints[].interval`**
  Type: `duration`. Optional. Default: `15s`.
  Time between metric collections from this endpoint.

* **`scrape.endpoints[].timeout`**
  Type: `duration`. Optional. Default: `10s`.
  Maximum time to wait for each metric collection.

* **`scrape.endpoints[].max_samples`**
  Type: `integer`. Optional.
  Maximum number of samples accepted from one metric collection. An unset value means no limit.
  A collection that exceeds the limit fails and reports `up` as `0` instead of returning an
  incomplete set of samples.

* **`scrape.endpoints[].follow_redirects`**
  Type: `boolean`. Optional. Default: `true`.
  Whether to follow HTTP redirects. If true, the Collector follows redirects. If false, a
  redirect causes the metric collection to fail.


## Related topics

- [Prometheus and OpenMetrics ingestion](/ingest/metrics-traces/collector/addl-metrics/prom-openmetrics.md)
- [Ingest additional metrics](/ingest/metrics-traces/collector/addl-metrics.md)
- [Ingest metrics and traces using the OpenTelemetry Collector](/ingest/metrics-traces/otel.md)
- [Configure ingestion and processing of OpenTelemetry Metrics](/ingest/metrics-traces/otel/otel-config.md)
- [Configure your OpenTelemetry Collector](/ingest/metrics-traces/otel/otel-ingest.md)
