Menu
Open source

Migrate from Prometheus to Grafana Alloy

The built-in Alloy convert command can migrate your Prometheus configuration to an Alloy configuration.

This topic describes how to:

  • Convert a Prometheus configuration to an Alloy configuration.
  • Run a Prometheus configuration natively using Alloy.

Components used in this topic

Before you begin

  • You must have an existing Prometheus configuration.
  • You must have a set of Prometheus applications ready to push telemetry data to Alloy.
  • You must be familiar with the concept of Components in Alloy.

Convert a Prometheus configuration

To fully migrate your configuration from Prometheus to Alloy, you must convert your Prometheus configuration into an Alloy configuration. This conversion will enable you to take full advantage of the many additional features available in Alloy.

In this task, you will use the convert CLI command to output an Alloy configuration from a Prometheus configuration.

  1. Open a terminal window and run the following command.

    shell
    alloy convert --source-format=prometheus --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>

    Replace the following:

    • <INPUT_CONFIG_PATH>: The full path to the Prometheus configuration.
    • <OUTPUT_CONFIG_PATH>: The full path to output the Alloy configuration.
  2. Run Alloy using the new Alloy configuration from <OUTPUT_CONFIG_PATH>:

Debugging

  1. If the convert command can’t convert a Prometheus configuration, diagnostic information is sent to stderr.
    You can bypass any non-critical issues and output the Alloy configuration using a best-effort conversion by including the --bypass-errors flag.

    Caution

    If you bypass the errors, the behavior of the converted configuration may not match the original Prometheus configuration. Make sure you fully test the converted configuration before using it in a production environment.
    shell
    alloy convert --source-format=prometheus --bypass-errors --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>

    Replace the following:

    • <INPUT_CONFIG_PATH>: The full path to the Prometheus configuration.
    • <OUTPUT_CONFIG_PATH>: The full path to output the Alloy configuration.
  2. You can also output a diagnostic report by including the --report flag.

    shell
    alloy convert --source-format=prometheus --report=<OUTPUT_REPORT_PATH> --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>

    Replace the following:

    • <INPUT_CONFIG_PATH>: The full path to the Prometheus configuration.
    • <OUTPUT_CONFIG_PATH>: The full path to output the Alloy configuration.
    • <OUTPUT_REPORT_PATH>: The output path for the report.

    Using the example Prometheus configuration below, the diagnostic report provides the following information:

    plaintext
    (Info) Converted scrape_configs job_name "prometheus" into...
      A prometheus.scrape.prometheus component
    (Info) Converted 1 remote_write[s] "grafana-cloud" into...
      A prometheus.remote_write.default component

Run a Prometheus configuration

If you’re not ready to completely switch to an Alloy configuration, you can run Alloy using your existing Prometheus configuration. The --config.format=prometheus flag tells Alloy to convert your Prometheus configuration to an Alloy configuration and load it directly without saving the new configuration. This allows you to try Alloy without modifying your existing Prometheus configuration infrastructure.

In this task, you will use the run CLI command to run Alloy using a Prometheus configuration.

Run Alloy and include the command line flag --config.format=prometheus. Your configuration file must be a valid Prometheus configuration file rather than an Alloy configuration file.

Debugging

  1. You can follow the convert CLI command debugging instructions to generate a diagnostic report.

  2. Refer to Debug Alloy for more information about a running Alloy.

  3. If your Prometheus configuration can’t be converted and loaded directly into Alloy, diagnostic information is sent to stderr. You can bypass any non-critical issues and start Alloy by including the --config.bypass-conversion-errors flag in addition to --config.format=prometheus.

    Caution

    If you bypass the errors, the behavior of the converted configuration may not match the original Prometheus configuration. Don’t use this flag in a production environment.

Example

This example demonstrates converting a Prometheus configuration file to an Alloy configuration file.

The following Prometheus configuration file provides the input for the conversion.

yaml
global:
  scrape_timeout:    45s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:12345"]

remote_write:
  - name: "grafana-cloud"
    url: "https://prometheus-us-central1.grafana.net/api/prom/push"
    basic_auth:
      username: <USERNAME>
      password: <PASSWORD>

The convert command takes the YAML file as input and outputs a Alloy configuration] file.

shell
alloy convert --source-format=prometheus --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>

Replace the following:

  • <INPUT_CONFIG_PATH>: The full path to the Prometheus configuration.
  • <OUTPUT_CONFIG_PATH>: The full path to output the Alloy configuration.

The new Alloy configuration file looks like this:

alloy
prometheus.scrape "prometheus" {
  targets = [{
    __address__ = "localhost:12345",
  }]
  forward_to     = [prometheus.remote_write.default.receiver]
  job_name       = "prometheus"
  scrape_timeout = "45s"
}

prometheus.remote_write "default" {
  endpoint {
    name = "grafana-cloud"
    url  = "https://prometheus-us-central1.grafana.net/api/prom/push"

    basic_auth {
      username = "USERNAME"
      password = "PASSWORD"
    }

    queue_config {
      capacity             = 2500
      max_shards           = 200
      max_samples_per_send = 500
    }

    metadata_config {
      max_samples_per_send = 500
    }
  }
}

Limitations

Configuration conversion is done on a best-effort basis. Alloy will issue warnings or errors where the conversion can’t be performed.

After the configuration is converted, review the Alloy configuration file created and verify that it’s correct before starting to use it in a production environment.

The following list is specific to the convert command and not Alloy:

  • The following configurations aren’t available for conversion to Alloy: rule_files, alerting, remote_read, storage, and tracing. Any additional unsupported features are returned as errors during conversion.
  • Check if you are using any extra command line arguments with Prometheus that aren’t present in your configuration file. For example, --web.listen-address.
  • Metamonitoring metrics exposed by Alloy usually match Prometheus metamonitoring metrics but will use a different name. Make sure that you use the new metric names, for example, in your alerts and dashboards queries.
  • The logs produced by Alloy differ from those produced by Prometheus.
  • Alloy exposes the Alloy UI.