在本篇文章中,我们将介绍如何使用 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.scrape
或 prometheus.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",
}
}
上述两个组件可通过 output
或 write_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 社区或关注官方公众号获取最新动态。