---
title: "Set up meta-monitoring to collect Alloy telemetry | Grafana Alloy documentation"
description: "Learn how to set up meta-monitoring for Grafana Alloy"
---

# Set up meta-monitoring to collect Alloy telemetry

You can configure Alloy to collect its own telemetry and forward it to the backend of your choosing.

This topic describes how to collect and forward metrics, logs, and traces data from Alloy.

## Components and configuration blocks used in this topic

- [`prometheus.exporter.self`](../../reference/components/prometheus/prometheus.exporter.self/)
- [`prometheus.scrape`](../../reference/components/prometheus/prometheus.scrape/)
- [`logging`](../../reference/config-blocks/logging/)
- [`tracing`](../../reference/config-blocks/tracing/)

## Before you begin

- Identify where to send Alloy’s telemetry data.
- Be familiar with the concept of [Components](../../get-started/components/) in Alloy.

## Meta-monitoring metrics

Alloy exposes its internal metrics using the Prometheus exposition format.

The metrics are exposed on a `/metrics` endpoint on an address configurable via the `--server.http.listen-addr` [command line flag](../../reference/cli/run/). For example, `127.0.0.1:12345/metrics`. However, it’s also possible to access the same metrics using the `prometheus.exporter.self` component.

In this task, you use the [`prometheus.exporter.self`](../../reference/components/prometheus/prometheus.exporter.self/) and [`prometheus.scrape`](../../reference/components/prometheus/prometheus.scrape/) components to scrape Alloy’s internal metrics and forward it to compatible Alloy components.

1. Add the following `prometheus.exporter.self` component to your configuration. The component accepts no arguments.
   
   Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```alloy
   prometheus.exporter.self "<SELF_LABEL>" {
   }
   ```
   
   Replace the following:
   
   - *`<SELF_LABEL>`* : The label for the component such as `default` or `metamonitoring`. The label must be unique across all `prometheus.exporter.self` components in the same configuration file.
2. Add the following `prometheus.scrape` component to your configuration file.
   
   Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```alloy
   prometheus.scrape "<SCRAPE_LABEL>" {
     targets    = prometheus.exporter.self.<SELF_LABEL>.targets
     forward_to = [<METRICS_RECEIVER_LIST>]
   }
   ```
   
   Replace the following:
   
   - *`<SCRAPE_LABEL>`* : The label for the scrape component such as `default`. The label must be unique across all `prometheus.scrape` components in the same configuration file.
   - *`<METRICS_RECEIVER_LIST>`* : A comma-delimited list of component receivers to forward metrics to. For example, to send to a remote write component, use `prometheus.remote_write.WRITE_LABEL.receiver`. Similarly, to send data to a relabeling component, use `prometheus.relabel.PROCESS_LABEL.receiver`. To use data in the OTLP format, you can send data to a converter component, like `otelcol.receiver.prometheus.OTEL.receiver`.

The following example demonstrates configuring a possible sequence of components.

Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```alloy
prometheus.exporter.self "default" {
}

prometheus.scrape "metamonitoring" {
  targets    = prometheus.exporter.self.default.targets
  forward_to = [prometheus.remote_write.default.receiver]
}

prometheus.remote_write "default" {
  endpoint {
    url = "http://mimir:9009/api/v1/push"
  }
}
```

## Meta-monitoring logs

The [logging](../../reference/config-blocks/logging/) block defines the logging behavior of Alloy.

In this task, you use the [logging](../../reference/config-blocks/logging/) block to forward Alloy’s logs to a compatible component. The block is specified without a label and can only be provided once per configuration file.

1. Add the following `logging` configuration block to the top level of your configuration file.
   
   Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```alloy
   logging {
     level    = "<LOG_LEVEL>"
     format   = "<LOG_FORMAT>"
     write_to = [<LOGS_RECEIVER_LIST>]
   }
   ```
   
   Replace the following:
   
   - *`<LOG_LEVEL>`* : The log level to use for Alloy’s logs. If the attribute isn’t set, it defaults to `info`.
   - *`<LOG_FORMAT>`* : The log format to use for Alloy’s logs. If the attribute isn’t set, it defaults to `logfmt`.
   - *`<LOGS_RECEIVER_LIST>`* : A comma-delimited list of component receivers to forward logs to. For example, to send to a processing component, use `loki.process.PROCESS_LABEL.receiver`. Similarly, to send data to a relabeling component, use `loki.relabel.PROCESS_LABEL.receiver`. To use data in the OTLP format, you can send data to a converter component, like `otelcol.receiver.loki.OTEL.receiver`.

The following example demonstrates configuring the logging block and sending to a compatible component.

Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```alloy
logging {
  level    = "warn"
  format   = "json"
  write_to = [loki.write.default.receiver]
}

loki.write "default" {
  endpoint {
    url = "http://loki:3100/loki/api/v1/push"
  }
}
```

## Meta-monitoring traces

The [tracing](../../reference/config-blocks/tracing/) block defines the tracing behavior of Alloy.

In this task, you use the [tracing](../../reference/config-blocks/tracing/) block to forward Alloy internal traces to a compatible component. The block is specified without a label and can only be provided once per configuration file.

1. Add the following `tracing` configuration block to the top level of your configuration file.
   
   Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```alloy
   tracing {
     sampling_fraction = <SAMPLING_FRACTION>
     write_to          = [<TRACES_RECEIVER_LIST>]
   }
   ```
   
   Replace the following:
   
   - *`<SAMPLING_FRACTION>`* : The fraction of traces to keep. If the attribute isn’t set, it defaults to `0.1`.
   - *`<TRACES_RECEIVER_LIST>`* : A comma-delimited list of component receivers to forward traces to. For example, to send to an OpenTelemetry exporter component use `otelcol.exporter.otlp.EXPORT_LABEL.input`.

The following example demonstrates configuring the tracing block and sending to a compatible component.

Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```alloy
tracing {
  sampling_fraction = 0.1
  write_to          = [otelcol.exporter.otlp.default.input]
}

otelcol.exporter.otlp "default" {
    client {
        endpoint = "tempo:4317"
    }
}
```
