将 Grafana Agent Static 迁移到 Grafana Alloy
内置的 Alloy `convert` 命令可以将您的 Grafana Agent Static 配置迁移到 Alloy 配置。
本主题介绍如何
- 将 Grafana Agent Static 配置转换为 Alloy 配置。
- 使用 Alloy 原生运行 Grafana Agent Static 配置。
本主题使用的组件
prometheus.scrape
prometheus.remote_write
local.file_match
loki.process
loki.source.file
loki.write
otelcol.receiver.otlp
otelcol.processor.batch
otelcol.exporter.otlp
开始之前
- 您必须具有 Grafana Agent Static 配置。
- 您必须熟悉 Alloy 中的组件概念。
转换 Grafana Agent Static 配置
要完全将 Grafana Agent Static 迁移到 Alloy,您必须将 Grafana Agent Static 配置转换为 Alloy 配置。此转换使您可以充分利用 Alloy 中提供的许多附加功能。
在此任务中,您将使用 convert CLI 命令从 Grafana Agent Static 配置输出 Alloy 配置。
打开终端窗口并运行以下命令。
alloy convert --source-format=static --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>
替换以下内容
<INPUT_CONFIG_PATH>
: Grafana Agent Static 配置文件的完整路径。<OUTPUT_CONFIG_PATH>
: 输出 Alloy 配置的完整路径。
停止 Grafana Agent static。
使用
中的新 Alloy 配置运行 Alloy
调试
如果 convert 命令无法转换 Grafana Agent Static 配置,诊断信息将发送到 `stderr`。您可以使用 `--bypass-errors` 标志绕过任何非关键问题,并以最佳努力转换方式输出 Alloy 配置。
注意
如果您绕过错误,转换后的配置行为可能与原始 Grafana Agent Static 配置不匹配。请确保在生产环境中使用转换后的配置之前对其进行充分测试。
alloy convert --source-format=static --bypass-errors --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>
替换以下内容
<INPUT_CONFIG_PATH>
: Grafana Agent Static 配置文件的完整路径。<OUTPUT_CONFIG_PATH>
: 输出 Alloy 配置的完整路径。
您可以使用 `--report` 标志输出诊断报告。
alloy convert --source-format=static --report=<OUTPUT_REPORT_PATH> --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>
替换以下内容
<INPUT_CONFIG_PATH>
: Grafana Agent Static 配置文件的完整路径。<OUTPUT_CONFIG_PATH>
: 输出 Alloy 配置的完整路径。<OUTPUT_REPORT_PATH>
: 报告的输出路径。
使用下面的示例 Grafana Agent Static 配置,诊断报告提供以下信息。
(Warning) Please review your agent command line flags and ensure they are set in your Alloy configuration file where necessary.
以 Grafana Agent Static 模式运行配置
如果您尚未准备好完全切换到 Alloy 配置,您可以使用 Grafana Agent Static 配置来运行 Alloy。`--config.format=static` 标志指示 Alloy 将您的 Grafana Agent Static 配置转换为 Alloy 并直接加载,而无需保存配置。这使您可以在不修改 Grafana Agent Static 配置基础设施的情况下试用 Alloy。
在此任务中,您将使用 run CLI 命令以 Grafana Agent Static 配置运行 Alloy。
运行 Alloy 并包含命令行标志 `--config.format=static`。您的配置文件必须是有效的 Grafana Agent Static 配置文件。
调试
按照 convert CLI 命令的调试说明生成诊断报告。
有关运行 Alloy 的更多信息,请参阅 Alloy 调试 UI。
如果您的 Grafana Agent Static 配置无法直接转换并加载到 Alloy,诊断信息将发送到 `stderr`。您可以将 `--config.bypass-conversion-errors` 标志与 `--config.format=static` 一起使用,以绕过任何非关键问题并启动 Alloy。
注意
如果您绕过错误,转换后的配置行为可能与原始 Grafana Agent Static 配置不匹配。请勿在生产环境中使用此标志。
示例
此示例演示如何将 Grafana Agent Static 配置文件转换为 Alloy 配置文件。
以下 Grafana Agent Static 配置文件提供了转换输入。
server:
log_level: info
metrics:
global:
scrape_interval: 15s
remote_write:
- url: https://prometheus-us-central1.grafana.net/api/prom/push
basic_auth:
username: USERNAME
password: PASSWORD
configs:
- name: test
host_filter: false
scrape_configs:
- job_name: local-agent
static_configs:
- targets: ['127.0.0.1:12345']
labels:
cluster: 'localhost'
logs:
global:
file_watch_config:
min_poll_frequency: 1s
max_poll_frequency: 5s
positions_directory: /var/lib/agent/data-agent
configs:
- name: varlogs
scrape_configs:
- job_name: varlogs
static_configs:
- targets:
- localhost
labels:
job: varlogs
host: mylocalhost
__path__: /var/log/*.log
pipeline_stages:
- match:
selector: '{filename="/var/log/*.log"}'
stages:
- drop:
expression: '^[^0-9]{4}'
- regex:
expression: '^(?P<timestamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?P<level>[[:alpha:]]+)\] (?:\d+)\#(?:\d+): \*(?:\d+) (?P<message>.+)$'
- pack:
labels:
- level
clients:
- url: https://USER_ID:API_KEY@logs-prod3.grafana.net/loki/api/v1/push
traces:
configs:
- name: tempo
receivers:
otlp:
protocols:
grpc:
http:
batch:
send_batch_size: 10000
timeout: 20s
remote_write:
- endpoint: tempo-us-central1.grafana.net:443
basic_auth:
username: USERNAME
password: PASSWORD
convert 命令以 YAML 文件作为输入,并输出一个 Alloy 配置文件。
alloy convert --source-format=static --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>
替换以下内容
<INPUT_CONFIG_PATH>
: Grafana Agent Static 配置文件的完整路径。<OUTPUT_CONFIG_PATH>
: 输出 Alloy 配置的完整路径。
Alloy 配置文件如下所示
prometheus.scrape "metrics_test_local_agent" {
targets = [{
__address__ = "127.0.0.1:12345",
cluster = "localhost",
}]
forward_to = [prometheus.remote_write.metrics_test.receiver]
job_name = "local-agent"
scrape_interval = "15s"
}
prometheus.remote_write "metrics_test" {
endpoint {
name = "test-4dec64"
url = "https://prometheus-us-central1.grafana.net/api/prom/push"
basic_auth {
username = "<USERNAME>"
password = "<PASSWORD>"
}
queue_config { }
metadata_config { }
}
}
local.file_match "logs_varlogs_varlogs" {
path_targets = [{
__address__ = "localhost",
__path__ = "/var/log/*.log",
host = "mylocalhost",
job = "varlogs",
}]
}
loki.process "logs_varlogs_varlogs" {
forward_to = [loki.write.logs_varlogs.receiver]
stage.match {
selector = "{filename=\"/var/log/*.log\"}"
stage.drop {
expression = "^[^0-9]{4}"
}
stage.regex {
expression = "^(?P<timestamp>\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}) \\[(?P<level>[[:alpha:]]+)\\] (?:\\d+)\\#(?:\\d+): \\*(?:\\d+) (?P<message>.+)$"
}
stage.pack {
labels = ["level"]
ingest_timestamp = false
}
}
}
loki.source.file "logs_varlogs_varlogs" {
targets = local.file_match.logs_varlogs_varlogs.targets
forward_to = [loki.process.logs_varlogs_varlogs.receiver]
file_watch {
min_poll_frequency = "1s"
max_poll_frequency = "5s"
}
legacy_positions_file = "/var/lib/agent/data-agent/varlogs.yml"
}
loki.write "logs_varlogs" {
endpoint {
url = "https://USER_ID:API_KEY@logs-prod3.grafana.net/loki/api/v1/push"
}
external_labels = {}
}
otelcol.receiver.otlp "default" {
grpc {
include_metadata = true
}
http {
include_metadata = true
}
output {
metrics = []
logs = []
traces = [otelcol.processor.batch.default.input]
}
}
otelcol.processor.batch "default" {
timeout = "20s"
send_batch_size = 10000
output {
metrics = []
logs = []
traces = [otelcol.exporter.otlp.default_0.input]
}
}
otelcol.exporter.otlp "default_0" {
retry_on_failure {
max_elapsed_time = "1m0s"
}
client {
endpoint = "tempo-us-central1.grafana.net:443"
headers = {
authorization = "Basic VVNFUk5BTUU6UEFTU1dPUkQ=",
}
}
}
Integrations Next
您可以通过为 convert 添加 `extra-args` 标志或为 run 添加 `config.extra-args` 来转换 integrations next 配置。
alloy convert --source-format=static --extra-args="-enable-features=integrations-next" --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH>
替换以下内容
<INPUT_CONFIG_PATH>
: Grafana Agent Static 配置文件的完整路径。<OUTPUT_CONFIG_PATH>
: 输出 Alloy 配置的完整路径。
环境变量
您可以使用 `-config.expand-env` 命令行标志来解释 Grafana Agent Static 配置中的环境变量。您可以将这些标志传递给 convert (使用 `--extra-args="-config.expand-env"`) 或传递给 run (使用 `--config.extra-args="-config.expand-env"`)。
可以将 `integrations-next` 与 `expand-env` 结合使用。对于 convert,您可以使用 `--extra-args="-enable-features=integrations-next -config.expand-env"`
限制
配置转换以最佳努力为基础进行。如果无法完成转换,Alloy 会发出警告或错误。
配置转换后,请仔细检查 Alloy 配置文件,并在生产环境中使用之前验证其正确性。
以下列表特定于 convert 命令而非 Alloy
- Agent Management 配置选项无法自动转换为 Alloy。任何其他不受支持的功能将在转换期间作为错误返回。
- Alloy 没有可配置的 gRPC 服务器。任何非默认配置在转换期间都将显示为不受支持。
- 检查您是否使用了 Grafana Agent Static 配置中不存在的额外命令行参数。例如,`-server.http.address`。
- 检查您是否在 Grafana Agent Static 配置中使用了任何环境变量。这些变量在转换期间会被评估,您可能需要在转换后将它们替换为 Alloy 标准库的 sys.env 函数。
- 查看额外的Prometheus 限制,了解特定于您的Metrics 配置的限制。
- 查看额外的Promtail 限制,了解特定于您的Logs 配置的限制。
- Alloy 产生的日志与 Grafana Agent Static 产生的日志不同。
- Alloy 暴露了 Alloy UI。