菜单
开源 RSS

Docker 驱动客户端

Grafana Loki 官方支持一个 Docker 插件,用于读取 Docker 容器的日志并将其发送到 Loki。该插件可配置为将日志发送到私有 Loki 实例或 Grafana Cloud

注意

Windows 不支持 Docker 插件;请参阅Docker Engine 托管插件系统文档了解更多信息。

关于配置 Loki Docker 驱动的文档可以在 如果您在使用 Docker 插件时有任何问题或疑问,请在Loki 仓库中提交问题。

安装 Docker 驱动客户端

必须在每个运行需要收集日志的容器的 Docker 主机上安装 Docker 插件。

运行以下命令安装插件,根据需要更新发布版本或更改架构(目前支持 arm64amd64):

bash
docker plugin install grafana/loki-docker-driver:3.3.2-arm64 --alias loki --grant-all-permissions

注意

对于 ARM64 主机,在镜像标签中添加 -arm64

要检查已安装的插件,请使用 docker plugin ls 命令。已成功启动的插件将被列为已启用状态

bash
docker plugin ls

您应该看到类似于以下的输出

bash
ID                  NAME         DESCRIPTION           ENABLED
ac720b8fcfdb        loki         Loki Logging Driver   true

成功安装插件后,您可以配置它。

升级 Docker 驱动客户端

升级过程包括禁用现有插件,升级(根据需要更改版本和架构),然后重新启用并重启 Docker

bash
docker plugin disable loki --force
docker plugin upgrade loki grafana/loki-docker-driver:3.3.2-arm64 --grant-all-permissions
docker plugin enable loki
systemctl restart docker

注意

将版本号更新到相应的版本。

卸载 Docker 驱动客户端

要干净地卸载插件,请禁用并移除它

bash
docker plugin disable loki --force
docker plugin rm loki

已知问题:Docker Daemon 死锁

该驱动程序将所有日志保存在内存中,如果 Loki 无法访问且 max_retries 的数量超出,它将丢弃日志条目。为了避免丢弃日志条目,将 max_retries 设置为零允许无限重试;驱动程序将永远尝试,直到 Loki 再次可访问。永远尝试可能会产生不良后果,因为 Docker daemon 将等待 Loki 驱动程序处理容器的所有日志,直到容器被移除。因此,如果容器卡住,Docker daemon 可能会永远等待。

通过设置 loki-retries=2loki-max-backoff=800msloki-timeout=1skeep-file=true 可以缩短等待时间。这样,daemon 将只被锁定很短的时间,并且当 Loki 客户端无法重新连接时,日志将被本地持久化。

此外,您还可以通过在您的 docker-compose 文件中设置 services.logger.logging.options.mode=non-blocking 来使用非阻塞模式。非阻塞意味着如果 Loki 暂时不可用或无法处理日志消息,将日志写入 Loki 的过程不会阻塞应用程序或服务的主流程。在非阻塞模式下,日志消息将被缓冲并异步发送到 Loki,这使得主线程可以继续工作而不会延迟。如果 Loki 不可用,日志消息将存储在缓冲区中,并在 Loki 再次可用时发送。然而,此设置有助于防止由于日志记录问题而阻塞应用程序或服务的主流程,但如果缓冲区溢出或 Loki 长时间不可用,也可能导致日志消息丢失。

为避免此问题,请使用 Promtail 的Docker 目标Docker 服务发现