Grafana Alloy is the new name for our distribution of the OTel collector. Grafana Agent has been deprecated and is in Long-Term Support (LTS) through October 31, 2025. Grafana Agent will reach an End-of-Life (EOL) on November 1, 2025. Read more about why we recommend migrating to Grafana Alloy.

Important: This documentation is about an older version. It's relevant only to the release noted, many of the features and functions have been updated or replaced. Please view the current version.

Open source RSS

Integrations Revamp (Experimental)

Release v0.22.0 of Grafana Agent includes experimental support for a revamped integrations subsystem. The integrations subsystem is the second oldest part of Grafana Agent, and has started to feel out of place as we built out the project.

The revamped integrations subsystem can be enabled by passing integrations-next to the -enable-features command line flag. As an experimental feature, there are no stability guarantees, and it may receive a higher frequency of breaking changes than normal.

The revamped integrations subsystem has the following benefits over the original subsystem:

  • Integrations can opt in to supporting multiple instances. For example, you may now run any number of redis_exporter integrations, where before you could only have one per agent. Integrations such as node_exporter still only support a single instance, as it wouldn’t make sense to have multiple instances of those.

  • Autoscrape (previously called “self-scraping”), when enabled, now supports sending metrics for an integration directly to a running metrics instance. This allows you configuring an integration to send to a specific Prometheus remote_write endpoint.

  • A new service discovery HTTP API is included. This can be used with Prometheus’ http_sd_config. The API returns extra labels for integrations that previously were only availble when autoscraping, such as agent_hostname.

  • Integrations that aren’t Prometheus exporters may now be added, such as integrations that generate logs or traces.

  • Autoscrape, when enabled, now works completely in-memory without using the network.

Config changes

The revamp contains a number of breaking changes to the config. The schema of the integrations key in the config file is now the following:

  # Controls settings for integrations that generate metrics.
    # Controls default settings for autoscrape. Individual instances of
    # integrations inherit the defaults and may override them.
      # Enables autoscrape of integrations.
      [enable: <boolean> | default = true]

      # Specifies the metrics instance name to send metrics to. Instance
      # names are located at metrics.configs[].name from the top-level config.
      # The instance must exist.
      # As it is common to use the name "default" for your primary instance,
      # we assume the same here.
      [metrics_instance: <string> | default = "default"]

      # Autoscrape interval and timeout. Defaults are inherited from the global
      # section of the top-level metrics config.
      [scrape_interval: <duration> | default = <>]
      [scrape_timeout: <duration> | default = <>]

  # Configs for integrations which do not support multiple instances.
  [agent: <agent_config>]
  [cadvisor: <cadvisor_config>]
  [node_exporter: <node_exporter_config>]
  [process: <process_exporter_config>]
  [statsd: <statsd_exporter_config>]
  [windows: <windows_exporter_config>]
  [eventhandler: <eventhandler_config>]
  [snmp: <snmp_exporter_config>]

  # Configs for integrations that do support multiple instances. Note that
  # these must be arrays.
    [- <consul_exporter_config> ...]

    [- <dnsmasq_exporter_config> ...]

    [- <elasticsearch_exporter_config> ...]

    [- <github_exporter_config> ...]

    [- <kafka_exporter_config> ...]

    [- <memcached_exporter_config> ...]

    [- <mongodb_exporter_config> ...]

    [- <mysqld_exporter_config> ...]

    [- <postgres_exporter_config> ...]

    [- <redis_exporter_config> ...]

    [- <app_agent_receiver_config>]

Note that most integrations are no longer configured with the _exporter name. node_exporter is the only integration with _exporter name due to its popularity in the Prometheus ecosystem.

Integrations changes

Integrations no longer support an enabled field; they are enabled by being defined in the YAML. To disable an integration, comment it out or remove it.

Metrics-based integrations now use this common set of options:

# Provide an explicit value to uniquely identify this instance of the
# integration. If not provided, a reasonable default will be inferred based
# on the integration.
# The value here must be unique across all instances of the same integration.
[instance: <string>]

# Override autoscrape defaults for this integration.
  # Enables autoscrape of integrations.
  [enable: <boolean> | default = <integrations.metrics.autoscrape.enable>]

  # Specifies the metrics instance name to send metrics to.
  [metrics_instance: <string> | default = <integrations.metrics.autoscrape.metrics_instance>]

  # Relabel the autoscrape job.
    [- <relabel_config> ... ]

  # Relabel metrics coming from the integration.
    [ - <relabel_config> ... ]

  # Autoscrape interval and timeout.
  [scrape_interval: <duration> | default = <integrations.metrics.autoscrape.scrape_interval>]
  [scrape_timeout: <duration> | default = <integrations.metrics.autoscrape.scrape_timeout>]

# An optional extra set of labels to add to metrics from the integration target. These
# labels are only exposed via the integration service discovery HTTP API and
# added when autoscrape is used. They will not be found directly on the metrics
# page for an integration.
  [ <labelname>: <labelvalue> ... ]

The old set of common options have been removed and do not work when the revamp is being used:


[enabled: <boolean> | default = false]
[instance: <string>]
[scrape_integration: <boolean> | default = <integrations_config.scrape_integrations>]
[scrape_interval: <duration> | default = <global_config.scrape_interval>]
[scrape_timeout: <duration> | default = <global_config.scrape_timeout>]
[wal_truncate_frequency: <duration> | default = "60m"]
  [- <relabel_config> ...]
  [ - <relabel_config> ...]