目录

1. 核心组件

1.1 Promtail

1.2 Loki

1.3 Grafana

2. 准备工作

3. 创建 Docker Compose 文件

4. 创建配置文件

4.1 创建 Loki 配置文件

4.2 创建 Promtail 配置文件

5. 启动PLG

6. 验证部署

6.1 文件目录结构

6.2 检查容器状态

6.3 查看容器日志

6.4 验证服务访问

7. 在 Grafana 中配置 Loki 数据源

8. 日志检索


Docker Compose 一键安装 Promtail + Loki + Grafana (PLG) 日志系统的详细教程。这个日志搭建方案非常适合在单机、开发测试环境或小型部署中快速搭建日志系统。

1. 核心组件

1.1 Promtail

  • 作为日志采集代理,负责从应用节点收集原始日志(支持本地文件及systemd日志),并附加标签(如应用名、环境)后传输至Loki。
  • 相比传统方案(如Logstash),资源消耗更低,部署更轻量。

1.2 ​​​​​​​Loki

  • 日志存储与查询引擎,采用 “标签索引 + 原始日志存储” 架构:
    • 仅对日志的元数据标签(非日志内容)建立索引,大幅降低存储开销(比全文索引方案节省30%-50%存储)。
    • 查询时先通过标签筛选数据集,再对原始日志进行逐行扫描(即“硬扫描”),适合高吞吐日志场景。

1.3 Grafana

  • 统一可视化平台,支持日志查询与监控仪表盘集成,消除用户在日志系统(如Kibana)和监控工具间切换的成本。

2. 准备工作

  1. 安装 Docker 和 Docker Compose:

  2. 创建项目目录:

mkdir  -p   /mnt/plg_docker_compose/plg-logging 

3. 创建 Docker Compose 文件

 cat  docker-compose.yml

version: '3.8'

services:
  # --- Loki (日志存储) ---
  loki:
    image: grafana/loki:2.8.8 # 使用稳定版本
    container_name: loki
    ports:
      - "3100:3100" # Loki HTTP API 端口
    command: -config.file=/etc/loki/local-config.yaml # 指定配置文件
    volumes:
      - ./config/loki-config.yaml:/etc/loki/local-config.yaml # 挂载配置文件
      - ./data/loki:/loki # 持久化存储日志数据
    networks:
      - plg-network
    restart: unless-stopped

  # --- Promtail (日志收集器) ---
  promtail:
    image: grafana/promtail:2.8.8 # 使用与 Loki 相同的版本
    container_name: promtail
    command: -config.file=/etc/promtail/config.yml # 指定配置文件
    volumes:
      - ./config/promtail-config.yml:/etc/promtail/config.yml # 挂载配置文件
      - /var/log:/var/log:ro # 挂载宿主机日志目录 (只读)
      - /var/lib/docker/containers:/var/lib/docker/containers:ro # 挂载 Docker 容器日志
    networks:
      - plg-network
    depends_on:
      - loki # 确保 Loki 先启动
    restart: unless-stopped

  # --- Grafana (可视化) ---
  grafana:
    image: grafana/grafana:10.1.5 # 使用稳定版本
    container_name: grafana
    ports:
      - "3000:3000" # Grafana Web UI 端口
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=Pa880rD@123456 # 设置管理员密码
      - GF_USERS_ALLOW_SIGN_UP=false # 禁用用户注册 (可选)
    volumes:
      - ./data/grafana:/var/lib/grafana # 持久化 Grafana 数据 (用户、仪表盘等)
    networks:
      - plg-network
    depends_on:
      - loki # 确保 Loki 可用
    restart: unless-stopped

# --- 网络 ---
networks:
  plg-network:
    driver: bridge

# --- 数据卷 (可选,如果不想用 bind mount) ---
# volumes:
#   loki-data:
#   grafana-data:

4. 创建配置文件

4.1 创建 Loki 配置文件

mkdir -p config
vim config/loki-config.yaml

# loki-config.yaml
auth_enabled: false # 单机模式通常禁用认证

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  path_prefix: /loki # 数据存储前缀
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1 # 单节点
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: inmemory # 单节点用内存存储,生产环境用 etcd/consul

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093/alertmanager

4.2 创建 Promtail 配置文件

# promtail-config.yml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml # 记录日志读取位置

clients:
  - url: http://loki:3100/loki/api/v1/push # 指向 loki 服务 (Docker 网络)

scrape_configs:
  # 收集 Docker 容器日志
  - job_name: docker
    static_configs:
      - targets:
          - localhost
        labels:
          job: docker
          __path__: /var/lib/docker/containers/*/*log # Docker 容器日志路径

  # 收集系统日志 (例如 /var/log/*.log)
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: system
          __path__: /var/log/*.log # 系统日志路径

  # 收集本 PLG 系统自身的日志 (可选)
  - job_name: plg
    static_configs:
      - targets:
          - localhost
        labels:
          job: plg
          __path__: /var/log/plg/*.log # 自定义路径

5. 启动PLG

cd   /mnt/plg_docker_compose/plg-logging  
docker-compose up -d  

6. 验证部署

6.1 文件目录结构

plg-logging/
├── docker-compose.yml
├── config/
│   ├── loki-config.yaml
│   └── promtail-config.yml
└── data/
    ├── loki/
    └── grafana/

6.2 检查容器状态

cd   /mnt/plg_docker_compose/plg-logging 
docker-compose ps

正常情况,status应为“UP”。

6.3 查看容器日志

cd   /mnt/plg_docker_compose/plg-logging 
docker-compose logs -f            # 查看所有服务日志
docker-compose logs -f loki       # 只看 Loki 日志
docker-compose logs -f promtail   # 只看 Promtail 日志

6.4 验证服务访问

  • Grafana: 打开浏览器访问http://IP:3000

    • 用户名: admin

    • 密码: your-secure-password (在 docker-compose.yml 中设置)

  • Loki API: 访问 http://<你的服务器IP>:3100/ready 应该返回 ready

7. 在 Grafana 中配置 Loki 数据源

  1. 登录 Grafana。

  2. 点击左侧齿轮图标 (Configuration) -> Data sources -> Add data source

  3. 选择 Loki

  4. 配置:

    • Name: Loki

    • URL: http://loki:3100\ (在 Grafana 容器内部,loki 是服务名)

    • 其他保持默认。

  5. 点击 Save & test。如果显示 "Data source successfully connected.",则配置成功。

8. 日志检索

1. 进入 Explore:

  • 点击左侧放大镜图标 (Explore)。
  • 选择 Loki 数据源。

2. 查询日志

  • 在 Log browser 中,你可以通过 job 标签选择日志流,例如 job="docker"
  • 或者直接输入 LogQL 查询,例如:
    • {job="docker"} - 查看所有 Docker 容器日志。
    • {job="system"} - 查看系统日志。
    • {container="loki"} - 查看名为 "loki" 的容器的日志 (如果标签存在)。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐