欢迎参与 8 月 1 日中午 11 点的线上分享,了解 GreptimeDB 联合处理指标和日志的最新方案! 👉🏻 点击加入

Skip to content
On this page
技术
2025-6-13

使用 Grafana Alloy 将指标、日志与链路追踪数据采集至 GreptimeDB 的实践指南

本文介绍了如何使用 Grafana Alloy 采集并发送指标(Metrics)、日志(Logs)和链路追踪(Traces)数据至 GreptimeDB,详细讲解了 Alloy 的核心组件,包括 Prometheus Remote Write、OTLP 导出器、Loki 写入器等,并提供具体配置示例。适用于基于 OpenTelemetry 和 Prometheus 构建的可观测性场景。

在本篇文章中,我们将介绍如何使用 Grafana Alloy 作为 GreptimeDB 的数据源。Grafana Alloy 是由 Grafana Labs 推出的开源工具,前身是 Grafana Agent,是一个增强版的 OpenTelemetry Collector,具备高度的可配置性和广泛的协议支持,适用于各类可观测性数据采集场景。

Grafana Alloy:一体化的现代可观测数据采集器

Alloy 是一个通用型的遥测数据采集器,继承了来自 OpenTelemetry Collector 的大部分功能,支持从各种数据源接收 OTLP 协议的数据,并将其发送到后端系统。

除此之外,Alloy 还内置了 Prometheus Agent,这使得它可以直接从 /metrics 接口抓取指标数据,并支持重标签(relabeling)等处理操作,之后再通过 Remote Write 协议发送到支持 Prometheus 或 OpenTelemetry 的后端系统,比如 GreptimeDB。

常用的 Alloy 组件包括

  • Prometheus scrape(抓取)
  • Prometheus relabel(标签重写)
  • Prometheus remote write(远程写入)
  • OTEL Collector Prometheus Receiver(Prometheus 接收器)
  • OTEL Collector Loki Receiver(Loki 接收器)
  • OTEL Collector Processors(处理器)
  • OTEL Collector Exporter OTLP/HTTP(OTLP 导出器)
  • Loki writer(Loki 写入器)
  • Local file source(本地文件源)

更多组件请参考官方文档

Alloy 连接到 GreptimeDB:三种数据类型的接入实践

得益于 GreptimeDB 对可观测性生态的广泛兼容,Grafana Alloy 几乎可以使用所有主流导出器(exporter)将数据写入 GreptimeDB,包括:

  • Prometheus Remote Write
  • OpenTelemetry OTLP/HTTP
  • Loki 协议

不同类型的数据推荐不同的接入方式,我们将在下文逐一介绍👇

指标数据(Metrics):优先使用 Prometheus Remote Write

对于指标数据的采集,我们推荐使用 Prometheus Remote Write(PRW) 接入 GreptimeDB,原因如下:

  • PRW 写入格式天然适配 PromQL 查询,查询语义一致;
  • 数据源通常是 Prometheus Scraper,省去了格式转换步骤。

配置示例:

prometheus.remote_write "metrics_service" {
  endpoint {
    url = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/prometheus/write?db=${GREPTIME_DB:=public}"

    basic_auth {
      username = "${GREPTIME_USERNAME}"
      password = "${GREPTIME_PASSWORD}"
    }
  }
}

请根据实际环境替换变量,如数据库地址、端口和用户名。

prometheus.scrapeprometheus.relabel 组件中加入如下 forward_to 指令,即可完成数据流转:

forward_to = [
  prometheus.remote_write.metrics_service.receiver,
]

日志数据(Logs):支持 Loki 与 OTLP/HTTP 双协议

GreptimeDB 同时支持 Loki 协议OpenTelemetry OTLP/HTTP 协议 的日志写入。推荐根据用户的数据源选择对应协议,以减少不必要的格式转换。

无论是使用 Loki 还是 OpenTelemetry Collector,都可以在中间层进行日志处理和转换。同时,GreptimeDB 也支持在数据库内部进行日志处理,用户可以根据实际资源分配和数据流拓扑选择处理位置。

OTLP/HTTP 写入配置示例:

otelcol.auth.basic "credentials" {
  username = "${GREPTIME_USERNAME}"
  password = "${GREPTIME_PASSWORD}"
}

otelcol.exporter.otlphttp "greptimedb_logs" {
  client {
    endpoint = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/otlp/"
    headers  = {
      "X-Greptime-DB-Name" = "${GREPTIME_DB:=public}",
      "x-greptime-log-table-name" = "alloy_meta_logs",
      "x-greptime-log-extract-keys" = "hostname",
    }
    auth     = otelcol.auth.basic.credentials.handler
  }
}

Loki 写入配置示例:

loki.write "greptime_loki" {
    endpoint {
        url = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/loki/api/v1/push"
        headers  = {
          "X-Greptime-DB-Name" = "${GREPTIME_DB:=public}",
          "X-Greptime-Log-Table-Name" = "${GREPTIME_LOG_TABLE_NAME:=loki_demo_logs}",
        }
    }
    external_labels = {
        "job" = "greptime",
        "from" = "alloy",
    }
}

上述两个组件可通过 outputwrite_to 参数绑定至上游日志来源或处理器。

链路追踪(Traces):使用 OpenTelemetry Collector 标准组件

链路追踪数据的采集和传输推荐使用 OpenTelemetry Collector 的标准组件。配置方式较为直接,只需将 Alloy 中的 receiver 与 exporter 配置为 OTLP 协议即可。

这也是目前主流可观测性系统中事实标准的链路数据处理方式。

总结

本文介绍了如何使用 Grafana Alloy 将三类可观测性数据(指标、日志、链路追踪)统一采集至 GreptimeDB。Alloy 提供丰富的数据采集能力,GreptimeDB 则支持高性能写入与灵活查询,是构建统一可观测平台的强大组合。

如果你想动手实践,可以访问我们的开源演示仓库:Greptime Demo Scene - Grafana Alloy。 在这个 demo 中,我们展示了如何将 Grafana Alloy 自身的日志和指标数据通过 OTLP、Prometheus 和 Loki 协议写入 GreptimeDB,便于用户快速上手体验这一组合方案。

如需进一步了解或对接更多使用场景,欢迎加入我们的 GitHub 社区或关注官方公众号获取最新动态。

加入我们的社区

获取 Greptime 最新更新,并与其他用户讨论。