前言
【技术底稿 10】Ollama 部署冲上运维榜第二,【技术底稿 11】私有仓库也顺利发布。作为 DevOps 平台的核心环节,统一日志系统是运维的刚需:业务、监控、AI 服务多容器环境下,日志分散、排查问题效率极低。今天给大家带来Loki + Promtail + Grafana全流程内网部署方案,实现:
- 全容器日志统一采集、存储、可视化
- 对接 Grafana,一键查询所有服务日志
- 纯内网部署,无外网依赖
- 为后续多节点集群、告警大屏做铺垫
一、环境说明
- 服务器:HP 服务器(IP:192.168.18.100)
- 操作系统:Ubuntu 22.04
- 部署方式:Docker + Docker Compose
- 版本:Loki 2.9.3、Promtail 2.9.3(稳定生产级)
- 私有仓库地址:192.168.18.100:5000
- 部署目录:/home/xyy/myapp
- 适用场景:内网多容器环境、日志统一管理、Grafana 可视化
二、部署架构
Loki(3100 端口) ← Promtail(日志采集)
- 对接 Grafana(3000 端口),实现日志可视化
- 所有业务 / 监控 / AI 容器日志统一采集
三、Docker Compose 配置文件
文件名:docker-compose.yml(业务侧,已部署日志服务)
yaml
version: '3.5' services: loki: container_name: loki image: 192.168.18.100:5000/grafana/loki:2.9.3 command: -config.file=/etc/loki/local-config.yaml ports: - "3100:3100" volumes: - ./loki-config.yaml:/etc/loki/local-config.yaml - ./volumes/loki:/tmp/loki restart: always promtail: container_name: promtail image: 192.168.18.100:5000/grafana/promtail:2.9.3 command: -config.file=/etc/promtail/config.yml volumes: - ./promtail-config.yml:/etc/promtail/config.yml - /var/log:/var/log - /var/lib/docker/containers:/var/lib/docker/containers restart: always depends_on: - loki配套配置文件
loki-config.yaml
yaml
auth_enabled: false server: http_listen_port: 3100 ingester: lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory final_sleep: 0s chunk_idle_period: 5m chunk_retain_period: 30s schema_config: configs: - from: 2020-05-15 store: boltdb object_store: filesystem schema: v11 index: prefix: index_ period: 168h storage_config: boltdb: directory: /tmp/loki/index filesystem: directory: /tmp/loki/chunks limits_config: enforce_metric_name: false reject_old_samples: true reject_old_samples_max_age: 168h chunk_store_config: max_look_back_period: 0s table_manager: retention_deletes_enabled: false retention_period: 0spromtail-config.yml
yaml
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log - job_name: containers static_configs: - targets: - localhost labels: job: containers __path__: /var/lib/docker/containers/*/*log四、完整部署流程(可直接复制执行)
1. 镜像导入与私有仓库推送
bash
运行
# 1. 加载镜像 docker load -i loki.tar docker load -i promtail.tar # 2. 打标签 docker tag grafana/loki:2.9.3 192.168.18.100:5000/grafana/loki:2.9.3 docker tag grafana/promtail:2.9.3 192.168.18.100:5000/grafana/promtail:2.9.3 # 3. 推送至私有仓库 docker push 192.168.18.100:5000/grafana/loki:2.9.3 docker push 192.168.18.100:5000/grafana/promtail:2.9.32. 一键启动命令
bash
运行
# 进入部署目录 cd /home/xyy/myapp # 启动服务 docker-compose up -d # 查看运行状态 docker ps | grep loki3. Grafana 对接 Loki 配置
- 登录 Grafana:
http://192.168.18.100:3000 - 添加数据源 → 选择
Loki - 填写 URL:
http://loki:3100 - 点击「保存 & 测试」,连接成功
五、端口清单
表格
| 端口 | 用途 |
|---|---|
| 3100 | Loki 日志存储服务 |
| 9080 | Promtail 采集服务(内部端口,无需外网映射) |
六、DevOps 运维命令
bash
运行
# 查看Loki日志 docker logs -f loki # 查看Promtail日志 docker logs -f promtail # 重启服务 docker-compose restart loki promtail # Grafana日志查询 curl http://192.168.18.100:3100/loki/api/v1/label/job/values七、常见问题与解决方案
7.1 Promtail 无法采集容器日志
原因:未挂载 Docker 容器日志目录。解决:在 Promtail 的 volumes 中添加:
yaml
- /var/lib/docker/containers:/var/lib/docker/containers7.2 Grafana 无法连接 Loki
解决:
- 确保 Loki 与 Grafana 在同一网络,使用容器名
loki:3100连接 - 取消 SSL,使用 HTTP 访问
7.3 Docker 网络 DNS 解析失败
解决:在daemon.json中配置 DNS,或使用容器名互通。
八、项目价值(DevOps 亮点)
- 全容器日志统一采集,彻底告别
docker logs逐个排查 - 对接 Grafana,监控 + 日志一体化,运维效率翻倍
- 纯内网部署,无外网依赖,适合生产环境
- 基础设施即代码,一键部署、可迁移、可扩容
- 为后续多节点集群、告警大屏、AI 服务日志管理做铺垫
- 完美承接个人 DevOps 平台与 AI 项目「商助慧」
九、总结
统一日志系统是企业级 DevOps 平台的核心运维能力,尤其是在多容器、多服务的复杂环境中,其价值不言而喻。本文基于真实生产环境,提供了一套可直接复制执行的 Loki+Promtail 部署方案,帮助开发者快速搭建日志统一管理体系,提升运维效率,降低排查成本。
后续将持续更新「技术底稿」系列,包括 Milvus 向量库、多节点集群等 DevOps 全流程实战,欢迎持续关注!
📚 系列导航:
【人生底稿 01】|农村少年(1995–2005)
【技术底稿】01:37岁老码农,用4台机器搭了套个人DevOps平台
【产品底稿01】37 岁 Java 老码农,用 Java 搭了个 AI 写作助手,把自己 14 年技术文章全喂给了 AI!