Docker Compose 一键安装PLG日志系统方案详解
目录
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. 准备工作
-
安装 Docker 和 Docker Compose:
-
确保你的机器上已安装 Docker 和 Docker Compose。
-
安装指南: Get Docker | Docker Docs和 Install | Docker Docs
-
-
创建项目目录:
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: lokiports:- "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-networkrestart: unless-stopped# --- Promtail (日志收集器) ---promtail:image: grafana/promtail:2.8.8 # 使用与 Loki 相同的版本container_name: promtailcommand: -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-networkdepends_on:- loki # 确保 Loki 先启动restart: unless-stopped# --- Grafana (可视化) ---grafana:image: grafana/grafana:10.1.5 # 使用稳定版本container_name: grafanaports:- "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-networkdepends_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: 3100grpc_listen_port: 9096common:path_prefix: /loki # 数据存储前缀storage:filesystem:chunks_directory: /loki/chunksrules_directory: /loki/rulesreplication_factor: 1 # 单节点ring:instance_addr: 127.0.0.1kvstore:store: inmemory # 单节点用内存存储,生产环境用 etcd/consulschema_config:configs:- from: 2020-10-24store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: index_period: 24hruler:alertmanager_url: http://localhost:9093/alertmanager
4.2 创建 Promtail 配置文件
# promtail-config.yml
server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yaml # 记录日志读取位置clients:- url: http://loki:3100/loki/api/v1/push # 指向 loki 服务 (Docker 网络)scrape_configs:# 收集 Docker 容器日志- job_name: dockerstatic_configs:- targets:- localhostlabels:job: docker__path__: /var/lib/docker/containers/*/*log # Docker 容器日志路径# 收集系统日志 (例如 /var/log/*.log)- job_name: systemstatic_configs:- targets:- localhostlabels:job: system__path__: /var/log/*.log # 系统日志路径# 收集本 PLG 系统自身的日志 (可选)- job_name: plgstatic_configs:- targets:- localhostlabels: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 数据源
登录 Grafana。
点击左侧齿轮图标 (Configuration) ->
Data sources
->Add data source
。选择
Loki
。配置:
Name:
Loki
URL:
http://loki:3100\
(在 Grafana 容器内部,loki
是服务名)其他保持默认。
点击
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" 的容器的日志 (如果标签存在)。