介绍
欢迎来到这个关于 Loki 配置的实操实验(Lab)。Loki 是一个受 Prometheus 启发的、水平可扩展、高可用、多租户的日志聚合系统。它被设计为非常具有成本效益且易于操作。
在这个实验中,我们将专注于收集和查看日志的完整、基础工作流程。我们将使用三个关键组件:
- Loki: 负责存储和处理日志的主服务器。
- Promtail: 一个代理(agent),用于发现本地日志文件并将它们发送(ship)到 Loki 实例。
- Grafana: 一个可视化平台,我们将连接到 Loki 在其中探索和查询我们的日志。
这个实验环境已经为你启动了 Loki 和 Grafana 容器。你的任务是配置并运行 Promtail,将系统日志发送到 Loki,然后在 Grafana 中将其可视化。
拉取 Promtail Docker 镜像以进行日志收集
在这一步,你将下载 Promtail 的官方 Docker 镜像。Promtail 是负责发现日志文件并将其内容发送到 Loki 的代理。我们将以 Docker 容器的形式运行它,以保持我们的设置干净和隔离。
在你的终端中执行以下命令,从 Docker Hub 拉取 Promtail 镜像。
docker pull grafana/promtail
你将看到显示每个镜像层下载进度的输出。完成后,该镜像将可以在你的本地机器上使用。
Using default tag: latest
latest: Pulling from grafana/promtail
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/promtail
docker.io/grafana/promtail
既然我们已经有了镜像,我们可以在下一步继续为它创建一个配置文件。
创建 promtail.yml 以抓取系统日志
在这一步,你将为 Promtail 创建一个配置文件。这个 YAML 文件告诉 Promtail Loki 服务器的位置以及它应该监控哪些日志文件。你所有的操作都应该在 ~/project 目录下完成。
首先,使用 nano 编辑器创建一个名为 promtail.yml 的新文件。
nano promtail.yml
现在,将以下配置复制并粘贴到 nano 编辑器中。
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: varlogs
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
我们来解析一下这个配置:
server: 配置 Promtail 自己的 Web 服务器,在本实验中未使用。positions: 指定一个文件,Promtail 在其中记录每个日志文件的最后读取位置,这样它在重启时就不会重新发送旧日志。clients: 定义 Loki 实例的地址。我们使用http://loki:3100是因为 Promtail 和 Loki 都会运行在同一个 Docker 网络上,而loki是容器的名称。scrape_configs: 这是核心部分。我们定义了一个名为varlogs的job,它抓取/var/log/目录下所有以.log结尾的文件。
粘贴内容后,通过按 Ctrl+X,然后按 Y,最后按 Enter 来保存文件并退出 nano。
运行 Promtail 容器并指向 Loki
在这一步,你将使用刚刚创建的配置文件启动 Promtail 容器。该命令会将你的配置文件和主机的日志目录都挂载到容器中。
执行以下 docker run 命令来启动 Promtail:
docker run -d --name promtail --network monitoring-net -v $(pwd)/promtail.yml:/etc/promtail/config.yml -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml
以下是该命令中各个参数(flags)的解释:
-d: 在分离模式(detached mode,即后台)下运行容器。--name promtail: 为容器指定一个名称,以便于引用。--network monitoring-net: 将容器连接到与 Loki 和 Grafana 相同的网络。-v $(pwd)/promtail.yml:/etc/promtail/config.yml: 将你本地的promtail.yml挂载到容器内预期的位置(/etc/promtail/config.yml)。-v /var/log:/var/log: 将主机的/var/log目录挂载到容器中,以便 Promtail 可以读取日志文件。-config.file=/etc/promtail/config.yml: 告诉容器内 Promtail 进程使用哪个配置文件。
运行该命令后,Docker 将输出新容器的唯一 ID。你可以使用 docker ps 命令来验证容器是否正在运行。
docker ps
你应该在运行中的容器列表中看到 promtail、loki 和 grafana。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... grafana/promtail "/usr/bin/promtail -c…" A few seconds ago Up a few seconds 0.0.0.0:9080->9080/tcp promtail
... grafana/grafana "/run.sh" About a minute ago Up About a minute 0.0.0.0:8080->3000/tcp grafana
... grafana/loki "/usr/bin/loki -conf…" About a minute ago Up About a minute 0.0.0.0:3100->3100/tcp, 9095/tcp loki
在 Grafana 中添加 Loki 作为数据源
在这一步,你将配置 Grafana 以使用 Loki 作为数据源。这将允许你查询和可视化 Promtail 发送到 Loki 的日志。
请仔细遵循以下说明:
由于 LabEx VM 的反向代理设置,请切换到桌面界面(Desktop Interface),点击左上角的 Firefox 浏览器,然后在地址栏输入
http://localhost:8080。你应该会看到 Grafana 登录页面。登录 Grafana。使用用户名
admin和密码admin。系统可能会要求你更改密码;在本实验中你可以跳过此步骤。在左侧菜单中,点击 Connections 图标(看起来像插头或连接器)。
在 Connections 页面,点击 Data sources。
在 Data sources 页面,点击 Add new data source 按钮。
在可用数据源类型列表中,选择 Loki。
在搜索框中,输入
Loki并点击出现的 Loki 数据源选项。你将被带到 Loki 数据源配置页面。在 HTTP 部分下的 URL 字段中,输入以下地址:
http://loki:3100我们使用
loki作为主机名,因为 Grafana 和 Loki 容器在同一个 Docker 网络(monitoring-net)上,并且 Docker 会在同一网络内的容器之间提供 DNS 解析。滚动到底部,点击 Save & test 按钮。

如果所有配置正确,你将看到一个绿色的横幅,显示消息 "Data source is working"。你现在已成功将 Grafana 连接到你的 Loki 实例。
在 Grafana Explore 视图中查询基础日志
在最后一步中,你将使用 Grafana 的 "Explore" 视图来运行一个简单的查询,查看 Promtail 从你的环境中收集并发送到 Loki 的日志。
在 Grafana 用户界面(UI)中,导航到左侧边栏,点击 指南针图标(Explore)。
在 Explore 页面的左上方,你会看到一个用于选择数据源的下拉菜单。如果尚未选择,请选择 Loki。
你会看到一个 "Log browser" 输入字段。这是你编写 LogQL 查询的地方。
点击 "Code" 按钮切换到代码编辑器。
在输入字段中输入以下查询:
{job="varlogs"}这个 LogQL 查询会选择所有具有标签
job且值为varlogs的日志流。我们在promtail.yml文件中定义了这个标签。按下 Shift+Enter 或点击屏幕右侧的蓝色 Run query 按钮。

运行查询后,你应该会在查询编辑器下方的 主面板中看到日志行出现。你将看到来自 /var/log 中各种文件的日志。这证实了 Promtail 正在成功抓取(scrape)日志并将其发送到 Loki,并且 Grafana 能够查询它们。
总结
恭喜你!你已成功配置了一个使用 Loki、Promtail 和 Grafana 的基础日志处理流程(pipeline)。
在本实验中,你学会了如何:
- 拉取(pull)并运行 Docker 容器,以部署像 Promtail 这样的日志处理工具。
- 创建一个 Promtail 配置文件,用于指定 Loki 服务器并定义日志抓取(scraping)任务(jobs)。
- 使用 Docker 网络连接服务(Promtail、Loki 和 Grafana)。
- 在 Grafana 用户界面中添加 Loki 作为数据源。
- 在 Grafana 的 Explore 视图中执行基础 LogQL 查询,以查找和检查你的日志。
这个设置是构建一个强大、可扩展且经济高效的日志聚合系统的基础。从这里开始,你可以探索更高级的 LogQL 查询、日志解析,以及基于日志内容在 Grafana 中设置告警(alerts)。



