前言
【技术底稿 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: 0s
promtail-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.3
2. 一键启动命令
bash
运行
# 进入部署目录
cd /home/xyy/myapp
# 启动服务
docker-compose up -d
# 查看运行状态
docker ps | grep loki
3. 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/containers
7.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:37岁老码农,用4台机器搭了套个人DevOps平台
【产品底稿01】37 岁 Java 老码农,用 Java 搭了个 AI 写作助手,把自己 14 年技术文章全喂给了 AI!