Linux下怎么部署Grafana Loki
Docker Compose是目前最省事也最可控的部署方式,能把进程隔离、网络互通和卷挂载都固化在一个YAML文件里。相比之下,二进制安装的过程相当繁琐,百分之九十的失败都卡在权限、路径、配置加载顺序这些细节上。 你可能会问:既然二进制安装这么麻烦,为什么还要提?因为很多初次部署的开发者就是被它带进
Docker Compose是目前最省事也最可控的部署方式,能把进程隔离、网络互通和卷挂载都固化在一个YAML文件里。相比之下,二进制安装的过程相当繁琐,百分之九十的失败都卡在权限、路径、配置加载顺序这些细节上。
你可能会问:既然二进制安装这么麻烦,为什么还要提?因为很多初次部署的开发者就是被它带进坑里的。手动处理 loki-linux-amd64 和 promtail-linux-amd64 的执行权限,写错 systemd 单元文件就静默退出,/etc/loki/config.yaml 不会被自动加载,必须显式传 --config.file,日志目录挂载权限不一致就静默丢日志。而 Docker Compose 把这些全固化在 YAML 里,改端口、换路径、加标签只动几行配置。
docker-compose.yml 的三处必改项
官方模板拿来就能用,但下面这三个地方不调好,肯定会出问题:
- Loki 的 volumes 映射:必须指向宿主机真实存在的路径,比如
./loki-config/config.yaml:/etc/loki/local-config.yaml。路径不存在或权限不对,容器启动后立刻退出,docker logs loki只显示failed to load config。 - Promtail 的日志目录映射:要真实存在且容器可以读取。例如
- /var/log:/var/log,如果宿主机/var/log属主不是root:adm,而容器默认以非 root 用户运行,就会跳过采集且不报错。 - Grafana 的 GF_SECURITY_ADMIN_PASSWORD:必须显式设置,否则 v10+ 版本首次登录卡死,UI 里也没办法重设。
loki-local-config.yaml 的三个硬性配置点
Loki 启动失败,八成的锅都在这三个地方没对齐:
- server.http_listen_port:默认
3100,如果宿主机被占用(比如另一个 Loki 或 Nginx),必须同步改docker-compose.yml的ports映射,比如"3101:3100"。只改配置不改映射,Grafana 连不上。 - storage_config.filesystem.directory:必须是容器内绝对路径,如
/tmp/loki/chunks。如果指向/opt/loki/chunks却没做volumes挂载,Loki 启动时直接报permission denied。 - limits_config.ingestion_rate_mb 和 ingestion_burst_size_mb:默认
4和6,但 Nginx 或 Ja va 应用几秒就能触发限速,promtail日志里反复出现rate limited。建议按实际流量设为30和15。
promtail-config.yaml 的标签和路径最容易漏
Promtail 不是装上就能收日志,它靠 static_configs.labels 打流标识,靠 pipeline_stages 解析内容。漏掉任何一个环节,Grafana 就查不到数据:
- labels:至少包含
job和host,例如{job="system", host="${HOSTNAME}"}。空labels: {}或全注释掉,Loki 会直接丢弃该流。 - __path__:必须用双引号包裹,尤其含变量或 glob 时:
"__path__: "/var/log/**/*.log"。单引号或不加引号会导致匹配失效。 - clients.url:别写
localhost——同机部署用http://loki:3100/loki/api/v1/push(Docker 网络内服务名),跨主机填目标 IP。不能依赖 DNS 或容器别名。
复杂的地方在于 Promtail 自身日志输出不走 journalctl,查问题得进容器跑 curl -s http://localhost:9080/targets | grep promtail_targets_active,返回值是 0 就说明根本没发现日志文件——这时候再回头检查路径、权限、__path__ glob 写法。


































