推荐使用 docker-compose 安装,因其将进程隔离、资源限制、卷挂载等全封装进 yaml,修改端口、路径、标签仅需调整几行;而二进制安装需手动处理权限、路径、配置加载顺序,对新手不友好。

直接上结论:用 docker-compose 是最省事、最可控的安装方式,二进制部署容易卡在权限、路径、配置加载顺序上,尤其对新手不友好。
为什么推荐 docker-compose 而不是二进制安装
二进制安装看似“轻量”,但实际要手动处理:loki-linux-amd64 和 promtail-linux-amd64 的执行权限、配置文件路径硬编码、日志目录挂载权限(比如 /var/log 在容器外不可写)、systemd 服务单元文件编写错误率高。而 docker-compose 把这三者进程隔离、资源限制(mem_limit)、卷挂载(volumes)全封装进 YAML,改端口、换存储路径、加标签都只动几行。
-
loki容器默认监听3100端口,若宿主机被占用,改ports: ["3101:3100"]即可,不用碰配置文件里的http_listen_port -
promtail必须把宿主机日志目录映射进容器,例如- /opt/myapp/logs:/var/log/myapp,否则它根本读不到文件 -
grafana的插件、数据源配置、仪表板会随容器销毁丢失,必须挂载volume或bind mount到宿主机,比如- ./grafana-storage:/var/lib/grafana
promtail-config.yaml 标签配置最容易出错
promtail 不是简单转发日志,它靠 static_configs 里的 labels 把日志流打上标识,这些标签要和你在 Grafana 里查日志时用的过滤条件完全一致,否则查不到任何内容。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 常见错误:写成
job: "nginx",但 Grafana 查询时输的是{job="Nginx"}—— 大小写、引号、空格全得对上 - 路径必须用双引号包裹,尤其含变量时:
__path__: "/var/log/myapp/*.log",单引号或不加引号会导致 glob 不生效 - 想按主机区分日志?别硬写 IP,用
host: ${HOSTNAME}并在command启动时加-config.expand-env=true - 如果日志文件权限是
root:adm,而promtail容器默认以非 root 用户运行,会报permission denied—— 此时要么改宿主机文件权限,要么在 service 中加user: "root"
Grafana 添加 Loki 数据源后查不到日志
90% 是因为 Loki 没收到日志,而不是 Grafana 配置错。先确认三件事:
- 在 Grafana 的
Explore页面输入{job="your-job-name"},点Run query,看右上角是否显示 “No logs found” 还是 “Error: context deadline exceeded” —— 前者说明 Loki 收到了但没匹配到,后者说明网络或认证失败 - 进
promtail容器执行curl -s http://localhost:9080/metrics | grep promtail_targets_active,输出值应大于 0;为 0 表示没发现任何日志文件 - 检查
loki容器日志:docker logs loki | tail -20,重点找ingester相关错误,比如failed to push chunks或rate limited(说明ingestion_rate_mb设太低) - Loki 默认不开启日志保留,
retention_period: 0s表示永不清除,但如果你配了240h又没开retention_deletes_enabled: true,过期日志也不会自动删,只是查不到
真正麻烦的从来不是装上,而是让 promtail 稳定读到日志、loki 不丢数据、grafana 查的时候不卡顿 —— 这三点全依赖配置里那些不起眼的字段,比如 chunk_idle_period、max_look_back_period、ingestion_burst_size_mb,调不好就反复重试。










