【技术底稿 12】内网统一日志系统 Loki + Promtail 全流程部署(对接 Grafana,监控日志一体化)

前言

【技术底稿 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 配置

  1. 登录 Grafana:http://192.168.18.100:3000
  2. 添加数据源 → 选择 Loki
  3. 填写 URL:http://loki:3100
  4. 点击「保存 & 测试」,连接成功

五、端口清单

表格

端口 用途
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】|农村少年(1995--2005)

【技术底稿】01:37岁老码农,用4台机器搭了套个人DevOps平台

【产品底稿01】37 岁 Java 老码农,用 Java 搭了个 AI 写作助手,把自己 14 年技术文章全喂给了 AI!

相关推荐
Skilce2 小时前
K8S部署
linux·运维·服务器·容器·kubernetes
银河系的一束光2 小时前
使用 IntelliJ IDEA 开发 Java 程序时 , 会遇到以下中文乱码问题 :
java·ide·intellij-idea
Via_Neo2 小时前
判断字符串前缀(26年蓝桥杯JAVA B组)
java·职场和发展·蓝桥杯
重生的黑客2 小时前
Linux :vim 深入与 gcc 编译详解
linux·运维·vim
XiYang-DING2 小时前
【Java】从源码深入理解HashMap和TreeMap
java·开发语言
若水不如远方2 小时前
一文讲透单点登录原理(SSO):从同域共享到跨域票据
java·后端
不懂的浪漫2 小时前
mqtt-plus 架构解析(七):动态订阅与重连恢复,为什么能走同一条协调路径
java·物联网·mqtt·架构
无巧不成书02182 小时前
Unicode编码机制全解析:从核心原理到Java 实战
java·开发语言·java字符编码·unicode 15.1码点
南境十里·墨染春水2 小时前
linux学习进展 进程
linux·运维·学习