使用 Grafana Alloy 将日志发送到 Loki
本教程将向您展示如何配置 Alloy 以收集您本地机器上的日志,过滤非必要的日志行,将它们发送到 Loki,并使用 Grafana 探索结果。
开始之前
完成本教程需要
- 您必须对 Alloy 和 telemetry 收集有基本了解。
- 您应该熟悉 Prometheus、PromQL、Loki、LogQL 以及基本的 Grafana 导航。
提示
或者,您可以在交互式学习环境中尝试此示例:将日志发送到 Loki。
这是一个完全配置好的环境,所有依赖项都已安装。
安装 Alloy 并启动服务
本教程需要安装了 Docker 的 Linux 或 macOS 环境。
Linux
在 Linux 上安装并运行 Alloy。
macOS
在 macOS 上安装并运行 Alloy。
您可以在以下地址访问 Alloy UI:https://:12345。
设置本地 Grafana 实例
在本教程中,您将配置 Alloy 以收集本地机器的日志并将其发送到 Loki。您可以使用以下 Docker Compose 文件来设置本地 Grafana 实例。该 Docker Compose 文件包括配置为数据源的 Loki 和 Prometheus。
创建一个目录并将 Docker Compose 文件保存为
docker-compose.yml
。mkdir alloy-tutorial cd alloy-tutorial touch docker-compose.yml
将以下 Docker Compose 文件复制到
docker-compose.yml
中。version: '3' services: loki: image: grafana/loki:3.0.0 ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml prometheus: image: prom/prometheus:v2.47.0 command: - --web.enable-remote-write-receiver - --config.file=/etc/prometheus/prometheus.yml ports: - "9090:9090" grafana: environment: - GF_PATHS_PROVISIONING=/etc/grafana/provisioning - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin entrypoint: - sh - -euc - | mkdir -p /etc/grafana/provisioning/datasources cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml apiVersion: 1 datasources: - name: Loki type: loki access: proxy orgId: 1 url: http://loki:3100 basicAuth: false isDefault: false version: 1 editable: false - name: Prometheus type: prometheus orgId: 1 url: http://prometheus:9090 basicAuth: false isDefault: true version: 1 editable: false EOF /run.sh image: grafana/grafana:11.0.0 ports: - "3000:3000"
要启动本地 Grafana 实例,请运行以下命令。
docker compose up -d
注意
如果在启动 Docker 容器时遇到以下错误:
docker: 'compose' is not a docker command
,请使用命令docker-compose up
启动 Docker 容器。在浏览器中打开https://:3000 以访问 Grafana UI。
配置 Alloy
设置好本地 Grafana 实例后,下一步是配置 Alloy。您可以在 config.alloy
文件中使用组件来告诉 Alloy 您想要抓取哪些日志、如何处理这些数据以及将数据发送到何处。
示例在单个主机上运行,因此您可以在笔记本电脑或虚拟机上运行它们。您可以使用 config.alloy
文件尝试这些示例并进行实验。
创建一个 config.alloy
文件
在当前工作目录中创建一个 config.alloy
文件。
touch config.alloy
第一个组件:日志文件
将以下组件配置复制并粘贴到文件顶部。
local.file_match "local_files" {
path_targets = [{"__path__" = "/var/log/*.log"}]
sync_period = "5s"
}
此配置创建了一个 local.file_match 名为 local_files
的组件,该组件执行以下操作
- 它告诉 Alloy 源自哪些文件。
- 它每隔 5 秒检查一次新文件。
第二个组件:抓取
将以下组件配置复制并粘贴到 config.alloy
文件中上一个组件的下方
loki.source.file "log_scrape" {
targets = local.file_match.local_files.targets
forward_to = [loki.process.filter_logs.receiver]
tail_from_end = true
}
此配置创建了一个 loki.source.file
名为 log_scrape
的组件,该组件执行以下操作
- 它连接到
local_files
组件作为其源或目标。 - 它将其抓取的日志转发到名为
filter_logs
的另一个组件的接收器。 - 它提供额外的属性和选项,可以从末尾 tail 日志文件,这样您就不会摄取整个日志文件历史记录。
第三个组件:过滤非必要的日志
在将非必要日志发送到数据源之前对其进行过滤可以帮助您管理日志量以降低成本。
以下示例演示了如何在将日志发送到 Loki 之前过滤或丢弃它们。
将以下组件配置复制并粘贴到 config.alloy
文件中上一个组件的下方
loki.process "filter_logs" {
stage.drop {
source = ""
expression = ".*Connection closed by authenticating user root"
drop_counter_reason = "noisy"
}
forward_to = [loki.write.grafana_loki.receiver]
}
loki.process
组件允许您转换、过滤、解析和丰富日志数据。在此组件中,您可以定义一个或多个处理阶段,以指定在存储或转发日志条目之前如何处理它们。
此配置创建了一个 loki.process
名为 filter_logs
的组件,该组件执行以下操作
- 它接收来自默认
log_scrape
组件抓取的日志条目。 - 它使用
stage.drop
块来定义从抓取日志中丢弃的内容。 - 它使用
expression
参数来识别要丢弃的特定日志条目。 - 它使用可选的字符串标签
drop_counter_reason
来显示丢弃日志条目的原因。 - 它将处理后的日志转发到名为
grafana_loki
的另一个组件的接收器。
的 loki.process
文档提供了有关处理日志的更全面信息。
第四个组件:将日志写入 Loki
将此组件配置复制并粘贴到 config.alloy
文件中上一个组件的下方。
loki.write "grafana_loki" {
endpoint {
url = "https://:3100/loki/api/v1/push"
// basic_auth {
// username = "admin"
// password = "admin"
// }
}
}
这个最终组件创建了一个 loki.write
名为 grafana_loki
的组件,它指向 https://:3100/loki/api/v1/push
。
这就完成了简单的配置流水线。
提示
basic_auth
块被注释掉了,因为本地的docker compose
技术栈不需要它。示例中包含它,是为了展示如何在其他环境中配置认证。有关更多认证选项,请参阅loki.write
组件参考。
使用此配置,Alloy 直接连接到在 Docker 容器中运行的 Loki 实例。
重新加载配置
将本地
config.alloy
文件复制到默认的 Alloy 配置文件位置。sudo cp config.alloy $(brew --prefix)/etc/alloy/config.alloy
sudo cp config.alloy /etc/alloy/config.alloy
调用
/-/reload
端点,告诉 Alloy 重新加载配置文件,而无需重启系统服务。curl -X POST https://:12345/-/reload
提示
此步骤使用
localhost
端口12345
上的 Alloy UI。如果您选择在 Docker 容器中运行 Alloy,请确保使用--server.http.listen-addr=0.0.0.0:12345
参数。如果您不使用此参数,则 调试 UI 将无法在 Docker 容器外部访问。可选:您可以重启 Alloy 系统服务并加载配置文件。
brew services restart alloy
sudo systemctl reload alloy
在 Alloy UI 中检查您的配置
在浏览器中打开https://:12345 并点击顶部的Graph(图表)选项卡。图表应类似于以下内容

Alloy UI 向您展示了使用 Alloy 组件配置构建的流水线的可视化表示。
您可以看到组件状态良好,并且已准备好在 Grafana 中探索日志。
登录 Grafana 并探索 Loki 日志
在浏览器中打开https://:3000/explore 访问 Grafana 中的Explore(探索)功能。
选择 Loki 作为数据源,然后点击Label Browser(标签浏览器)按钮,选择 Alloy 已发送到 Loki 的文件。
在在这里您可以看到日志按预期流向 Loki,端到端配置成功。

总结
您已安装并配置了 Alloy,并将本地主机的日志发送到本地 Grafana 技术栈。
在下一教程 中,您将了解更多关于配置概念和指标的信息。