Skip to content

Windows Docker 部署 Loki + Promtail + Grafana 完整教程 ​

适用环境:Windows 10/11 + Docker Desktop 最终效果:通过 Docker Compose 一键部署完整的日志采集(Promtail)、存储查询(Loki)、可视化展示(Grafana)系统


📁 一、准备工作 ​

1.1 确认 Docker Desktop 正常运行 ​

  • 系统托盘看到 🐳 鲸鱼图标,且状态为绿色
  • 打开 PowerShell,执行以下命令验证:
powershell
docker --version
docker-compose --version

正常输出类似:

text
Docker version 24.0.6, build ed223bc
Docker Compose version v2.20.2

1.2 分配足够资源 ​

  1. 打开 Docker Desktop
  2. 点击右上角 Settings(⚙️)
  3. 选择 Resources → Advanced
  4. 确保 Memory 至少 4.00 GiB
  5. 点击 Apply & Restart

1.3 创建工作目录 ​

powershell
# 进入你的数据目录(可自行修改路径)
cd D:\dockerData

# 创建 loki-stack 项目目录
mkdir loki-stack
cd loki-stack

📄 二、创建配置文件 ​

在 D:\dockerData\loki-stack\ 目录下,依次创建以下三个文件。

2.1 创建 docker-compose.yml ​

powershell
# 用记事本创建(或 VS Code)
notepad docker-compose.yml

将以下内容完整复制进去并保存:

yaml
services:
  loki:
    image: grafana/loki:latest
    container_name: loki
    ports:
      - "3100:3100"
    volumes:
      - loki-data:/loki
    command: -config.file=/etc/loki/local-config.yaml
    restart: unless-stopped

  promtail:
    image: grafana/promtail:latest
    container_name: promtail
    volumes:
      - /var/log:/var/log
      - ./promtail-config.yaml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml
    depends_on:
      - loki
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    environment:
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
    volumes:
      - ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml
    depends_on:
      - loki
    restart: unless-stopped

volumes:
  loki-data:

💡 说明:

  • loki-data 卷用于持久化存储日志数据,重启容器不会丢失
  • restart: unless-stopped 保证容器异常退出后自动重启
  • GF_AUTH_ANONYMOUS_ENABLED=true 允许免密登录,方便测试

2.2 创建 promtail-config.yaml ​

powershell
notepad promtail-config.yaml

复制以下内容并保存:

yaml
client:
  url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          host: windows-docker
        __path__: /var/log/*log

💡 说明:

  • http://loki:3100 是 Docker Compose 内部网络中的服务名地址
  • job: varlogs 是日志流的标签,后续查询时用 {job="varlogs"} 即可过滤
  • __path__ 指向容器内的 /var/log 目录

2.3 创建 grafana-datasources.yaml ​

powershell
notepad grafana-datasources.yaml

复制以下内容并保存:

yaml
apiVersion: 1

datasources:
  - name: Loki
    type: loki
    access: proxy
    url: http://loki:3100
    isDefault: true
    version: 1
    editable: true

💡 说明:这个配置文件会让 Grafana 启动时自动添加 Loki 数据源,省去手动配置的步骤。


2.4 检查文件是否齐全 ​

powershell
dir *.yaml

应该看到三个文件:

text
docker-compose.yml
grafana-datasources.yaml
promtail-config.yaml

🚀 三、启动服务 ​

3.1 启动所有容器 ​

在 D:\dockerData\loki-stack\ 目录下执行:

powershell
docker-compose up -d

-d 表示后台运行(detach 模式)

3.2 查看启动状态 ​

powershell
docker-compose ps

预期输出:

text
NAME                IMAGE                   STATUS
grafana             grafana/grafana:latest  Up About a minute
loki                grafana/loki:latest     Up About a minute
promtail            grafana/promtail:latest Up About a minute

3.3 验证各服务是否正常 ​

服务检查地址预期结果
Lokihttp://localhost:3100/ready返回 ready
Grafanahttp://localhost:3000显示登录页面

🔍 四、查看日志 ​

4.1 通过 Grafana Web 界面 ​

  1. 浏览器访问:http://localhost:3000

  2. 登录:

    • 用户名:admin
    • 密码:admin
    • 首次登录可点击 Skip 跳过修改密码
  3. 左侧菜单点击 Explore(🧭 探索)

  4. 左上角确认数据源已自动选择为 Loki

  5. 查询框输入:

    text
    {job="varlogs"}
  6. 点击右上角 Run query 或按 Shift + Enter

  7. 在时间范围选择器中选择 Last 1 hour 或 Last 6 hours

4.2 通过命令行查看容器日志 ​

powershell
# 查看 Loki 日志
docker logs loki

# 查看 Promtail 日志
docker logs promtail

# 查看 Grafana 日志
docker logs grafana

4.3 通过 Loki API 查询(可选) ​

powershell
curl -G 'http://localhost:3100/loki/api/v1/query_range' `
  --data-urlencode 'query={job="varlogs"}' `
  --data-urlencode 'limit=10'

🛠️ 五、常用管理命令 ​

操作命令
启动所有服务docker-compose up -d
停止所有服务docker-compose down
重启所有服务docker-compose restart
重启单个服务docker-compose restart grafana
查看服务状态docker-compose ps
查看实时日志docker-compose logs -f
停止并删除数据卷docker-compose down -v

🐛 六、常见问题排查 ​

Q1:Grafana 无法访问 http://localhost:3000 ​

检查方法:

powershell
docker logs grafana

常见原因与解决:

  • 端口被占用:修改 docker-compose.yml 中端口映射 "3001:3000",然后访问 http://localhost:3001
  • 配置文件缺失:确认 grafana-datasources.yaml 文件存在且不是文件夹

Q2:Loki 数据源连接失败(红色报错) ​

检查方法:

powershell
# 测试 Loki 是否正常
curl http://localhost:3100/ready

常见原因:

  • Loki 容器未启动:docker restart loki
  • 网络问题:重新部署 docker-compose down && docker-compose up -d

Q3:查询不到任何日志 ​

检查方法:

powershell
# 查看 Promtail 是否在采集日志
docker logs promtail --tail 20

可能原因:

  • /var/log 目录下没有日志文件(容器内系统日志较少)
  • 时间范围选择不对,尝试选择 Last 6 hours 或 Last 24 hours
  • 查询语句错误,先用 {} 查询所有日志测试

Q4:容器启动后马上退出 ​

powershell
# 查看退出原因
docker logs <容器名>

常见于配置文件格式错误或挂载路径问题,检查 yaml 文件的缩进和路径。


📚 七、文件清单总览 ​

text
D:\dockerData\loki-stack\
├── docker-compose.yml          # 主编排文件
├── promtail-config.yaml        # Promtail 采集配置
└── grafana-datasources.yaml    # Grafana 数据源自动配置

✅ 八、验证清单 ​

部署完成后,逐项确认:

  • □

    http://localhost:3100/ready 返回 ready

  • □

    http://localhost:3000 能打开 Grafana 登录页

  • □

    登录后 Explore 中能选到 Loki 数据源

  • □

    执行 {job="varlogs"} 能返回日志条目(哪怕只有几条)

全部打钩 ✅ 说明你的 Loki 日志系统已经部署成功了!


💬 九、下一步建议 ​

  • 学习 LogQL 查询语法,更灵活地检索日志
  • 配置采集 Windows 本地应用程序日志(Event Log)
  • 配置 Grafana Dashboard 做日志监控面板
  • 生产环境部署时,将 Loki 数据存储到 S3 或 MinIO

📝 文档版本:1.0 📅 更新日期:2026-09-09 🖥️ 测试环境:Windows 11 + Docker Desktop 4.24+

📖本文阅读--次|📊全站访问--次|👥访客--人