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

相关推荐
REDcker1 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
虹科网络安全1 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje2 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv72 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫2 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287922 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本2 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
cui_ruicheng2 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
yaoxin5211233 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
ACP广源盛139246256734 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑