Loki 配置

DockerBeginner
立即练习

介绍

欢迎来到这个关于 Loki 配置的实操实验(Lab)。Loki 是一个受 Prometheus 启发的、水平可扩展、高可用、多租户的日志聚合系统。它被设计为非常具有成本效益且易于操作。

在这个实验中,我们将专注于收集和查看日志的完整、基础工作流程。我们将使用三个关键组件:

  • Loki: 负责存储和处理日志的主服务器。
  • Promtail: 一个代理(agent),用于发现本地日志文件并将它们发送(ship)到 Loki 实例。
  • Grafana: 一个可视化平台,我们将连接到 Loki 在其中探索和查询我们的日志。

这个实验环境已经为你启动了 Loki 和 Grafana 容器。你的任务是配置并运行 Promtail,将系统日志发送到 Loki,然后在 Grafana 中将其可视化。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 87%。获得了学习者 100% 的好评率。

拉取 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: 这是核心部分。我们定义了一个名为 varlogsjob,它抓取 /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

你应该在运行中的容器列表中看到 promtaillokigrafana

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 的日志。

请仔细遵循以下说明:

  1. 由于 LabEx VM 的反向代理设置,请切换到桌面界面(Desktop Interface),点击左上角的 Firefox 浏览器,然后在地址栏输入 http://localhost:8080。你应该会看到 Grafana 登录页面。

  2. 登录 Grafana。使用用户名 admin 和密码 admin。系统可能会要求你更改密码;在本实验中你可以跳过此步骤。

  3. 在左侧菜单中,点击 Connections 图标(看起来像插头或连接器)。

  4. 在 Connections 页面,点击 Data sources

  5. 在 Data sources 页面,点击 Add new data source 按钮。

  6. 在可用数据源类型列表中,选择 Loki

  7. 在搜索框中,输入 Loki 并点击出现的 Loki 数据源选项。

  8. 你将被带到 Loki 数据源配置页面。在 HTTP 部分下的 URL 字段中,输入以下地址:

    http://loki:3100

    我们使用 loki 作为主机名,因为 Grafana 和 Loki 容器在同一个 Docker 网络(monitoring-net)上,并且 Docker 会在同一网络内的容器之间提供 DNS 解析。

  9. 滚动到底部,点击 Save & test 按钮。

Add Loki as Data Source in Grafana

如果所有配置正确,你将看到一个绿色的横幅,显示消息 "Data source is working"。你现在已成功将 Grafana 连接到你的 Loki 实例。

在 Grafana Explore 视图中查询基础日志

在最后一步中,你将使用 Grafana 的 "Explore" 视图来运行一个简单的查询,查看 Promtail 从你的环境中收集并发送到 Loki 的日志。

  1. 在 Grafana 用户界面(UI)中,导航到左侧边栏,点击 指南针图标(Explore)。

  2. 在 Explore 页面的左上方,你会看到一个用于选择数据源的下拉菜单。如果尚未选择,请选择 Loki

  3. 你会看到一个 "Log browser" 输入字段。这是你编写 LogQL 查询的地方。

  4. 点击 "Code" 按钮切换到代码编辑器。

  5. 在输入字段中输入以下查询:

    {job="varlogs"}

    这个 LogQL 查询会选择所有具有标签 job 且值为 varlogs 的日志流。我们在 promtail.yml 文件中定义了这个标签。

  6. 按下 Shift+Enter 或点击屏幕右侧的蓝色 Run query 按钮。

Query Basic Logs in Grafana Explore View

运行查询后,你应该会在查询编辑器下方的 主面板中看到日志行出现。你将看到来自 /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)。