docker-compose是首选,因它将loki、promtail、grafana进程隔离、网络互通、卷挂载全固化于yaml,避免二进制安装常见的权限、路径、配置加载顺序问题。

直接用 docker-compose 启动最省事,别碰二进制安装——90% 的失败都卡在权限、路径、配置加载顺序上。
为什么 docker-compose 是首选
它把 Loki、Promtail、Grafana 三者进程隔离、网络互通、卷挂载全写死在 YAML 里,改端口、换日志路径、加标签只动几行。而二进制方式要手动 chmod + chown + systemd 单元文件 + 配置文件硬编码路径,loki-linux-amd64 默认不读 /etc/loki/config.yaml,得显式传 --config.file 参数,稍一漏就静默退出。
常见错误现象:docker logs loki 显示 failed to load config 或 permission denied;systemctl status loki 显示 active (exited) 但没日志;promtail 容器里 curl http://localhost:9080/metrics 返回空或 404。
- loki 容器内路径必须可写:比如
storage_config.filesystem.directory: /tmp/loki/chunks,对应volumes必须挂载宿主机真实目录(如./loki-data:/tmp/loki) - promtail 日志路径映射必须存在且有读权限:
- /var/log/myapp:/var/log/myapp,若宿主机该路径不存在或属主不是root:adm,容器会跳过采集且不报错 - grafana 的
GF_SECURITY_ADMIN_PASSWORD必须显式设置,否则 v10+ 版本首次登录卡死,UI 里也无法重设
loki-local-config.yaml 三个必填项
很多人配完启动不了,问题常出在这三处没填或填错:
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
-
server.http_listen_port:默认 3100,若宿主机被占用,必须同步改docker-compose.yml的ports映射(如"3101:3100"),否则 Grafana 连不上 -
storage_config.filesystem.directory:必须是容器内绝对路径,如/tmp/loki/chunks;若指向/opt/loki/chunks却没挂载 volume,Loki 启动直接报permission denied -
limits_config.ingestion_rate_mb和ingestion_burst_size_mb:默认 4MB / 6MB,Nginx 或 Java 应用几秒就触发限速,promtail日志里反复出现rate limited,建议调成 30 和 15
promtail-config.yaml 的 labels 和 pipeline_stages 容易漏
Promtail 不是“装上就收日志”,它靠 scrape_configs.static_configs.labels 打流标识,靠 pipeline_stages 解析内容。漏掉任一环节,Grafana 里就查不到或查不准。
-
labels至少得有job和host,例如{job="nginx", host="web01"};若只写job: "nginx",Grafana 查询{job="nginx"}就匹配不到 -
__path__值必须用双引号:如"__path__: /var/log/nginx/*.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→ Loki 收到了但没匹配到;显示Error: context deadline exceeded→ 网络不通或认证失败 - 进 promtail 容器执行
curl -s http://localhost:9080/metrics | grep 'promtail_targets_up{.*job="your-job-name".*}',返回 1 表示目标已激活,0 表示没加载成功 - Loki 数据源 URL 必须填容器内可解析的地址,比如
http://loki:3100(docker-compose 同 network 下),不是http://localhost:3100或宿主机 IP
最容易被忽略的是:promtail 的 clients.url 必须和 Loki 容器名、端口、路径完全一致;http://host.docker.internal:3100/loki/api/v1/push 在 Linux 上不生效,得用服务名 http://loki:3100/loki/api/v1/push。










