Loki 安装

DockerBeginner
立即练习

介绍

Grafana Loki 是一个水平可扩展、高可用、多租户的日志聚合系统,其灵感来源于 Prometheus。它被设计为极具成本效益且易于操作。与其它日志系统不同,Loki 不索引日志的内容,而是索引每个日志流的一组标签(labels)。

在这个 Lab 中,你将使用 Grafana Loki 的官方 Docker 镜像执行一个基础安装。你将学习如何创建一个最小化的配置文件,并将 Loki 服务作为一个容器启动。这是使用 Loki 构建完整日志堆栈(logging stack)的第一步基础。

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

拉取 Loki Docker 镜像

在这一步,你将从 Docker Hub 下载官方的 Grafana Loki Docker 镜像。docker pull 命令会从仓库(registry)获取一个镜像或一个仓库。你的 Lab 环境已经安装并配置了 Docker。

在终端中执行以下命令来拉取最新的 Loki 镜像:

docker pull grafana/loki

你将看到指示下载进度的输出。Docker 默认会拉取带有 latest 标签的镜像。

预期输出(版本号可能有所不同):

latest: Pulling from grafana/loki
a48641c1b8a9: Pull complete
...
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/loki
docker.io/grafana/loki

创建基础 loki-config.yaml 文件

在这一步,你将为 Loki 创建一个最小化的配置文件。这个文件 loki-config.yaml 告诉 Loki 如何运行、在哪里存储数据以及使用哪种 schema(模式)。对于本次 Lab,我们将配置 Loki 使用本地文件系统进行存储。

我们将使用 nano 文本编辑器来创建文件。运行以下命令打开一个名为 loki-config.yaml 的新文件:

nano loki-config.yaml

现在,将以下 YAML 内容复制并粘贴到 nano 编辑器中:

auth_enabled: false

server:
  http_listen_port: 3100

common:
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /tmp/loki/index
    cache_location: /tmp/loki/cache
  filesystem:
    directory: /tmp/loki/chunks

ruler:
  alertmanager_url: http://localhost:9093

limits_config:
  allow_structured_metadata: false

此配置将 Loki 所需的所有内容都保留在容器内的 /tmp/loki 目录下,这可以避免权限问题,并使设置易于理解。它禁用了身份验证(authentication),为单节点使用启用了内存中的环(in-memory ring),并将块(blocks)和索引(indexes)存储在本地文件系统上。

文件中每个部分的作用如下:

  • auth_enabled: false: 关闭身份验证,这样你就可以在没有额外凭证的情况下与 Loki 通信。这使得本地测试更简单;在生产环境中,你会启用身份验证。
  • server.http_listen_port: 3100: 告诉 Loki 在端口 3100 上监听 HTTP 请求。当你 curl localhost:3100 时,你访问的就是这个端口。
  • common.path_prefix: 设置 Loki 在容器内部存储临时数据的基础文件夹。此文件中其他所有路径都基于 /tmp/loki 构建,因此所有内容都保留在一个地方。
  • common.storage.filesystem: 指向 Loki 存储日志数据块(chunks)和规则文件(rule files)的两个文件夹。由于我们没有挂载任何特殊内容到容器中,使用 /tmp/loki 可以避免权限方面的麻烦。
  • common.ring.kvstore.store: inmemory: 将成员信息保存在内存中。对于单节点 Lab 来说这很完美;一个真正的集群会使用像 Consul 或 etcd 这样的共享存储。
  • schema_config: 定义 Loki 应如何布局日志数据的索引。我们设置了一个起始日期,选择了 boltdb-shipper 存储,并将索引保留在文件系统上。prefixperiod 控制文件的命名方式以及新索引文件的创建频率(每 24 小时)。
  • storage_config: 为 boltdb-shipper 索引(active_index_directorycache_location)以及原始块存储提供了确切的文件夹。所有路径再次位于 /tmp/loki 下,以保持整洁。
  • ruler.alertmanager_url: 准备 Loki 的 ruler 组件,以便将警报发送到 http://localhost:9093 的 Alertmanager。如果 Alertmanager 没有运行,Loki 不会崩溃;当它尝试发送警报时,只会记录一个警告。
  • limits_config.allow_structured_metadata: false: 禁用了一个高级功能,以便 Loki 坚持使用初学者期望的更简单、纯文本的日志元数据。

按下 Ctrl+X 退出,然后按 Y 确认保存,最后按 Enterloki-config.yaml 的名称保存文件。

使用配置文件在 3100 端口运行 Loki 容器

现在你已经有了 Loki 镜像和一个配置文件,你将把 Loki 作为一个 Docker 容器来运行。你将使用 docker run 命令来启动容器、挂载你的配置文件并暴露必要的端口。

执行以下命令:

docker run -d --name loki -v $(pwd)/loki-config.yaml:/etc/loki/config.yml -p 3100:3100 grafana/loki -config.file=/etc/loki/config.yml

我们来分解一下这个命令:

  • -d: 在分离模式(detached mode,即后台)下运行容器。
  • --name loki: 为容器指定名称 loki,以便于引用。
  • -v $(pwd)/loki-config.yaml:/etc/loki/config.yml: 将你本地的 loki-config.yaml 文件挂载到容器内的 /etc/loki/config.yml 位置。Loki 将从该文件中读取其配置。
  • -p 3100:3100: 将宿主机(host machine)的端口 3100 映射到容器内的端口 3100,允许你访问 Loki API。
  • grafana/loki: 用于容器的镜像名称。
  • -config.file=/etc/loki/config.yml: 传递给 Loki 进程的命令行参数,告诉它在哪里可以找到配置文件。

运行该命令后,Docker 将打印新创建的容器的唯一 ID。

e8a9f2b1c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0

验证 localhost:3100/ready 上的 Loki 就绪端点

在这一步,你将执行一个健康检查(health check),以确认 Loki 服务器已启动并正常运行。Loki 暴露了一个 /ready HTTP 端点可用于此目的。成功的响应表明服务器已准备好接收请求。

使用 curl 命令向此端点发送请求。由于在上一步中我们将端口 3100 进行了映射,你可以通过 localhost:3100 访问它。

curl http://localhost:3100/ready

如果 Loki 启动成功,它将以文本 ready 和 HTTP 200 OK 状态码进行响应。

预期输出:

ready

检查 Loki 日志以确认启动

验证 Loki 成功启动的另一种方法是检查其容器日志(logs)。这对于调试配置问题或其他启动故障非常有用。docker logs 命令用于获取容器的日志。

使用以下命令查看你的 loki 容器的日志:

docker logs loki

你应该会看到详细说明启动过程的输出。查找确认服务器正在监听连接的日志行。这表明服务已在没有关键错误的情况下初始化。

预期输出片段(日志详情可能有所不同):

level=info ts=... caller=server.go:299 http=[::]:3100 grpc=[::]:9096 msg="server listening on addresses"
level=info ts=... caller=loki.go:372 msg="Loki started"

总结

恭喜你!你已成功完成本次实验(Lab)。

在本次实验中,你学习了启动 Grafana Loki 实例的基本步骤。你已经:

  • 从 Docker Hub 拉取了官方 Loki Docker 镜像。
  • 创建了一个基本的 loki-config.yaml 文件,用于定义服务器和存储设置。
  • 在 Docker 容器中启动了 Loki,挂载了配置文件并暴露了 API 端口。
  • 使用其 /ready 端点并通过检查容器日志,验证了 Loki 实例正在运行且健康。

这个基础设置是构建更复杂、更健壮的日志架构的基础。从这里开始,你可以继续配置一个日志收集代理(如 Promtail)将日志发送到 Loki,并使用 Grafana 来查询和可视化这些日志。