跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash大前端

Docker Compose 多服务部署:日志集中管理实战方案(基础与进阶)

Docker Compose 多服务架构下日志分散是常见痛点。分享两种落地方案:基础版通过宿主机目录挂载实现零成本集中存储,适合测试或小型环境;进阶版集成 EFK 栈(Elasticsearch+Fluentd+Kibana),提供可视化检索与告警,适配生产规模化场景。内容涵盖配置示例、避坑技巧及选型建议,帮助运维与开发者快速构建统一日志体系,提升排查效率。

imJackJia发布于 2026/4/9更新于 2026/7/2028 浏览
Docker Compose 多服务部署:日志集中管理实战方案(基础与进阶)

在 Docker Compose 部署多服务架构(如多 .NET8 后端 + 多 Vue 前端)时,一个高频且棘手的问题就是「日志分散」——后端、前端、数据库、Redis 等服务的日志各自存储在对应容器内部,排查问题时需要逐个进入容器查看,不仅效率低下,还容易遗漏关键日志,尤其在服务扩容后,多实例日志的管理会变得更加混乱。

![https://qiniu.meowparty.cn/coder.2023/2026-04-09/fa165df279e139a73eff7274c1009fda.png]

本文结合实际部署场景(3 个.NET8 后端+3 个 Vue 前端 + 多数据库适配),分享两种易落地、可灵活选型的日志集中管理方案:基础版(宿主机目录挂载,零额外工具)和进阶版(EFK 栈集成,可视化管理),全程附带完整配置示例和避坑技巧,适合运维人员、后端开发者参考,新手也能快速上手实现日志统一收集、存储和查看。

适用场景:Docker Compose 多服务部署(不限后端/前端语言)、测试环境快速落地、生产环境规模化部署,可直接复用配置,无需重构现有服务架构。

一、前置准备(必做,确保日志可正常输出)

无论采用哪种方案,首先需确保各服务日志能正常输出到容器内指定目录,这是日志集中的基础。以下是核心服务的日志输出配置(贴合多后端 + 多前端场景):

  • .NET 后端 API:默认将日志输出到容器内 /app/Logs 目录(可通过 appsettings.json 配置日志级别和命名规则,推荐按日期命名,便于归档);
  • Vue 前端(Nginx 代理):Nginx 默认日志目录为容器内 /var/log/nginx,包含访问日志(access.log)和错误日志(error.log);
  • 数据库(MySQL/PostgreSQL/SQL Server):各自有默认日志输出目录(如 MySQL 的 /var/log/mysql),可通过配置文件指定日志输出格式;
  • Redis:需通过配置文件指定日志输出路径,避免日志输出到控制台,无法正常收集。

关键提示:确保各服务容器内日志目录具备写入权限,避免日志输出失败(后续配置会附带权限优化步骤)。

二、基础版:宿主机目录挂载(零额外工具,适合测试/小型部署)

基础版的核心思路是「容器日志目录 → 宿主机统一目录」的映射,通过 Docker Compose 的 volumes 配置,将所有服务的日志挂载到宿主机的一个统一目录下,实现日志集中存储,无需安装任何额外工具,配置简单、见效快,适合服务数量少、日志量不大的测试环境或小型生产环境。

1. 统一日志目录规划(贴合原有服务目录结构)

建议在 Docker Compose 项目根目录下创建统一的日志目录 logs,按服务类型细分,确保日志分类清晰,即使服务扩容(多实例),也能自动区分日志来源,目录结构如下(可直接复用):

# 项目根目录:./logs/
├── backend1/ # 后端 1 所有实例日志(扩容后自动生成实例后缀)
├── backend2/ # 后端 2 日志(独立目录,避免混淆)
├── backend3/ # 后端 3 日志(新增,适配多后端场景)
├── nginx/    # Nginx 日志(所有前端代理的访问/错误日志)
├── database/ # 数据库日志(按数据库类型细分)
│   ├── mysql/     # MySQL 日志
│   ├── postgresql/# PostgreSQL 日志
│   └── sqlserver/ # SQL Server 日志
├── redis/      # Redis 日志
└── common/     # Docker Compose 自身运行日志(可选)

目录创建命令(在项目根目录执行):

mkdir -p ./logs/{backend1,backend2,backend3,nginx,redis,common}
 -p ./logs/database/{mysql,postgresql,sqlserver}

 -R 755 ./logs
 -R root:root ./logs
mkdir
# 赋予目录写入权限,避免容器日志写入失败
chmod
chown
2. 完整配置示例(修改 docker-compose.yml)

在原有 docker-compose.yml 中,给每个服务添加日志目录挂载配置,核心是「容器内日志路径 → 宿主机对应日志目录」的映射,以下是关键服务的完整配置(可直接复制替换原有配置,其他无关配置不变):

(1).NET 后端 API 日志挂载(3 个后端通用,仅修改目录名)
# 后端 1(backend1)配置示例
backend1:
  image: mcr.microsoft.com/dotnet/aspnet:8.0
  container_name: multi-backend1
  restart: always
  ports:
    - "58588:58588"
  volumes:
    - ./backend1/publish:/app # 原有:业务代码挂载
    - /wwwroot/Resources1:/wwwroot/Resources # 原有:文件存储挂载
    - ./logs/backend1:/app/Logs # 新增:日志目录挂载(核心)
  environment:
    TZ: Asia/Shanghai
    ASPNETCORE_URLS: "http://*:58588"
    ASPNETCORE_ENVIRONMENT: Production # 可选:配置日志级别(避免 Debug 日志占满磁盘,生产环境推荐 Information)
    Logging__LogLevel__Default: "Information"
    Logging__LogLevel__Microsoft: "Warning"
  depends_on:
    - mysql # 或 postgresql,根据实际数据库调整
  networks:
    - multi-service-network

# 后端 2(backend2)配置示例(仅修改日志挂载目录)
backend2:
  image: mcr.microsoft.com/dotnet/aspnet:8.0
  container_name: multi-backend2
  restart: always
  ports:
    - "58589:58589"
  volumes:
    - ./backend2/publish:/app
    - /wwwroot/Resources2:/wwwroot/Resources
    - ./logs/backend2:/app/Logs # 仅修改此处目录为 backend2
  # 其他环境变量、依赖配置与 backend1 一致

# 后端 3(backend3)配置示例(同理)
backend3:
  image: mcr.microsoft.com/dotnet/aspnet:8.0
  container_name: multi-backend3
  restart: always
  ports:
    - "58590:58590"
  volumes:
    - ./backend3/publish:/app
    - /wwwroot/Resources3:/wwwroot/Resources
    - ./logs/backend3:/app/Logs # 仅修改此处目录为 backend3
  # 其他配置与 backend1 一致
(2)Nginx 前端代理日志挂载(适配多前端)
nginx:
  image: nginx:alpine
  container_name: multi-nginx
  restart: always
  ports:
    - "6866:6866" # 前端 1 端口
    - "6867:6867" # 前端 2 端口
    - "6868:6868" # 前端 3 端口
  volumes:
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf # 原有:Nginx 配置挂载
    - ./frontend1/dist:/usr/share/nginx/html/web1 # 原有:前端 1 文件挂载
    - ./frontend2/dist:/usr/share/nginx/html/web2 # 原有:前端 2 文件挂载
    - ./frontend3/dist:/usr/share/nginx/html/web3 # 原有:前端 3 文件挂载
    - ./logs/nginx:/var/log/nginx # 新增:Nginx 日志挂载(核心)
  depends_on:
    - backend1
    - backend2
    - backend3
  networks:
    - multi-service-network
(3)数据库与 Redis 日志挂载(以 MySQL 为例,其他数据库同理)
# MySQL 日志挂载示例
mysql:
  image: mysql:8.0
  container_name: multi-mysql
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: Root@123456
    MYSQL_USER: appuser
    MYSQL_PASSWORD: App@123456
    MYSQL_DATABASE: app_db1
    TZ: Asia/Shanghai
  ports:
    - "3306:3306"
  volumes:
    - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf # 原有:配置挂载
    - ./mysql/init-mysql.sql:/docker-entrypoint-initdb.d/init-mysql.sql # 原有:初始化 SQL 挂载
    - mysql-data:/var/lib/mysql # 原有:数据持久化挂载
    - ./logs/database/mysql:/var/log/mysql # 新增:MySQL 日志挂载(核心)
  networks:
    - multi-service-network

# Redis 日志挂载示例(需额外配置日志路径)
redis:
  image: redis:7-alpine
  container_name: multi-redis
  restart: always
  ports:
    - "6379:6379"
  volumes:
    - redis-data:/data # 原有:数据持久化挂载
    - ./redis/redis.conf:/etc/redis/redis.conf # 新增:Redis 配置挂载(指定日志路径)
    - ./logs/redis:/var/log/redis # 新增:Redis 日志挂载(核心)
  # 启动命令指定日志文件路径,确保日志输出到挂载目录
  command: redis-server /etc/redis/redis.conf --requirepass "Redis@123456" --logfile /var/log/redis/redis.log
  networks:
    - multi-service-network

补充:Redis 配置文件(redis.conf)中需添加 logfile /var/log/redis/redis.log,确保日志输出到指定路径,而非控制台。

3. 日志查看与管理(实用命令,直接复用)

配置完成后,重启所有服务,日志会自动输出到宿主机的对应目录,以下是常用的日志查看和管理命令,高效排查问题:

# 1. 进入日志根目录(统一管理所有日志)
cd ./logs

# 2. 查看后端 1 实时日志(.NET 日志按日期命名,如 20260208.log)
tail -f ./backend1/20260208.log

# 3. 查看前端 1 的访问日志(筛选 web1 相关请求,定位前端请求异常)
grep "web1" ./nginx/access.log

# 4. 查看 MySQL 错误日志(排查数据库连接、查询异常)
grep "ERROR" ./database/mysql/error.log

# 5. 搜索所有后端日志中的关键词(如'接口报错',快速定位问题)
grep -r "接口报错" ./backend1 ./backend2 ./backend3

# 6. 批量压缩旧日志(避免磁盘占满,保留 7 天日志)
tar -zcvf ./backend1_202601.tar.gz ./backend1/202601*.log && rm -rf ./backend1/202601*.log

# 7. 查看服务扩容后多实例的日志(后端 1 扩容为 3 个实例,日志自动区分)
ls ./backend1/
# 输出:20260208.log 20260208_1.log 20260208_2.log
4. 基础版优势与局限
  • 优势:零额外工具、配置简单、无性能损耗、快速落地,适合测试环境和小型部署,排查简单问题足够用;
  • 局限:无可视化界面,日志筛选、检索效率低,日志量大时难以快速定位问题,不适合生产环境规模化部署(多服务、多实例)。

三、进阶版:EFK 栈集成(可视化管理,适合生产环境/规模化部署)

当服务规模扩大(多后端、多前端、多实例)、日志量激增时,基础版的日志管理方式会显得力不从心。此时推荐采用 EFK 栈(Elasticsearch+Fluentd+Kibana)集成方案,实现日志的自动收集、过滤、存储、可视化查询和告警,无需手动进入目录查看日志,大幅提升问题排查效率,适合生产环境规模化部署。

EFK 栈核心分工:Fluentd(日志收集器,轻量、省资源,比 Logstash 更适合 Docker 环境)→ Elasticsearch(日志存储与检索,高效存储大量日志)→ Kibana(日志可视化界面,支持筛选、检索、仪表盘监控)。

1. 部署架构(复用原有 Docker 网络,无需重构现有服务)

EFK 栈与原有多服务架构的集成逻辑,所有服务日志通过 Fluentd 统一收集,再输出到 Elasticsearch 存储,最终通过 Kibana 可视化展示,架构如下:

![https://qiniu.meowparty.cn/coder.2023/2026-04-09/628afcbc93428a54e67d4a1356fcec14.png]

关键优势:复用原有 Docker 网络(multi-service-network),EFK 服务与原有业务服务互通,无需修改业务服务的核心配置,仅需添加日志驱动指向 Fluentd 即可。

2. 完整配置步骤(分步实施,可直接复用)
步骤 1:编写 EFK 栈编排文件(efk.yml)

在项目根目录下创建 efk.yml 文件,用于编排 Elasticsearch、Fluentd、Kibana 三个服务,配置如下(注释详细,可直接复制使用):

version: '3.8'
services:
  # 1. Elasticsearch:日志存储与检索(单节点部署,适合中小型生产)
  elasticsearch:
    image: elasticsearch:8.11.0 # 稳定版,适配 Fluentd 和 Kibana
    container_name: multi-elasticsearch
    restart: always
    ports:
      - "9200:9200" # 核心端口,Fluentd 写入、Kibana 读取
      - "9300:9300" # 集群通信端口(单节点可忽略)
    environment:
      - ES_JAVA_OPTS=-Xms512m -Xmx512m # 限制内存(8G 服务器建议 512M-1G,避免抢占业务资源)
      - discovery.type=single-node # 单节点部署(无需集群,简化配置)
      - xpack.security.enabled=false # 测试环境关闭安全验证(生产环境需开启并配置密码)
    volumes:
      - es-data:/usr/share/elasticsearch/data # 数据持久化,避免容器删除日志丢失
      - ./logs/elasticsearch:/var/log/elasticsearch # Elasticsearch 自身日志挂载
    networks:
      - multi-service-network # 复用原有业务网络,确保能接收 Fluentd 日志

  # 2. Fluentd:轻量日志收集器(核心,收集所有服务日志)
  fluentd:
    image: fluent/fluentd:v1.16-1 # 稳定版,轻量、低性能损耗
    container_name: multi-fluentd
    restart: always
    ports:
      - "24224:24224" # 接收容器日志的 TCP 端口
      - "24224:24224/udp" # 接收容器日志的 UDP 端口
    volumes:
      - ./fluentd/conf:/fluentd/etc # 日志收集、过滤规则配置(核心)
      - ./logs/fluentd:/var/log/fluentd # Fluentd 自身日志挂载
    depends_on:
      - elasticsearch # 确保 Elasticsearch 启动后,再启动 Fluentd
    networks:
      - multi-service-network

  # 3. Kibana:日志可视化界面(直观查看、筛选、监控日志)
  kibana:
    image: kibana:8.11.0 # 与 Elasticsearch 版本一致,避免兼容问题
    container_name: multi-kibana
    restart: always
    ports:
      - "5601:5601" # Kibana 访问端口(浏览器访问)
    environment:
      - ELASTICSEARCH_HOSTS=http://multi-elasticsearch:9200 # 指向 Elasticsearch 容器
    depends_on:
      - elasticsearch # 确保 Elasticsearch 启动后,再启动 Kibana
    networks:
      - multi-service-network

# 数据卷:持久化 Elasticsearch 数据(日志存储)
volumes:
  es-data:

# 网络:复用原有业务网络,无需重新创建
networks:
  multi-service-network:
    external: true
# 关键:使用已存在的网络(原有业务服务所在网络)
步骤 2:配置 Fluentd 日志收集规则(核心,过滤无用日志)

创建 Fluentd 配置目录和配置文件,定义日志收集、过滤、输出规则,避免收集无用日志(如健康检查日志、空日志),配置如下:

# 1. 创建 Fluentd 配置目录
mkdir -p ./fluentd/conf
# 2. 创建配置文件 fluent.conf(核心规则)
vim ./fluentd/conf/fluent.conf

配置文件内容(注释详细,可直接复制,适配多服务场景):

# 来源:监听 Docker 容器日志(接收所有容器发送的日志)
# 过滤:排除无用日志(健康检查日志、空日志、调试日志,减少存储压力)
<filter **>
  @type grep
  <exclude>
    key log pattern /^健康检查|^\s*$/ # 排除健康检查日志和空行日志
  </exclude>
  <exclude>
    key log pattern /DEBUG/ # 排除 Debug 级别日志(生产环境可开启,测试环境可注释)
  </exclude>
</filter>

# 输出:将过滤后的日志输出到 Elasticsearch,按日期分索引(便于归档和删除)
<match **>
  @type elasticsearch
  host multi-elasticsearch # Elasticsearch 容器名(无需写 IP,网络互通)
  port 9200 # Elasticsearch 核心端口
  index_name multi-service-logs-%Y%m%d # 索引名格式(按日期分索引,如 multi-service-logs-20260208)
  <buffer>
    @type file
    path /var/log/fluentd/buffer # 日志缓冲目录,避免日志丢失
    flush_interval 5s # 5 秒刷新一次日志到 Elasticsearch,减少延迟
    chunk_limit_size 10MB # 单个缓冲文件大小限制,避免占用过多磁盘
  </buffer>
</match>
步骤 3:修改原有业务服务的日志驱动(指向 Fluentd)

在原有 docker-compose.yml 的每个业务服务(backend1/2/3、nginx、mysql、redis)中,添加日志驱动配置,让服务日志自动发送到 Fluentd,无需手动挂载日志目录(基础版的挂载可保留,作为备份):

# 以 backend1 为例,添加 logging 配置(其他服务同理)
backend1:
  image: mcr.microsoft.com/dotnet/aspnet:8.0
  container_name: multi-backend1
  restart: always
  ports:
    - "58588:58588"
  # 新增:日志驱动配置(核心,指向 Fluentd)
  logging:
    driver: fluentd
    options:
      fluentd-address: localhost:24224 # Fluentd 访问地址(容器内可直接访问 localhost)
      tag: backend1 # 日志标签,标记日志来源(便于 Kibana 筛选)
  volumes:
    - ./backend1/publish:/app
    - /wwwroot/Resources1:/wwwroot/Resources # 可选:保留基础版的日志挂载,作为日志备份
    - ./logs/backend1:/app/Logs
  # 其他环境变量、依赖配置不变

# Nginx 服务添加日志驱动(示例)
nginx:
  image: nginx:alpine
  container_name: multi-nginx
  restart: always
  ports:
    - "6866:6866"
  logging:
    driver: fluentd
    options:
      fluentd-address: localhost:24224
      tag: nginx # 标签设为 nginx,便于筛选前端代理日志
  # 其他配置不变

# MySQL/Redis 服务同理,仅修改 tag 为 mysql、redis 即可
3. 启动 EFK 栈与验证(全程可复现)

所有配置完成后,启动 EFK 栈和原有业务服务,验证日志是否能正常收集和可视化展示:

# 1. 启动 EFK 栈和原有业务服务(同时启动,确保网络互通)
docker-compose -f docker-compose.yml -f efk.yml up -d

# 2. 查看所有服务运行状态(确保 EFK 服务和业务服务均正常启动)
docker-compose -f docker-compose.yml -f efk.yml ps

# 3. 验证 Fluentd 是否正常接收日志(查看 Fluentd 日志)
docker logs -f multi-fluentd
# 出现"successfully connected to Elasticsearch"即为正常

# 4. 访问 Kibana 可视化界面(浏览器访问)
# http://服务器 IP:5601
# 如:http://192.168.1.100:5601

Kibana 首次使用配置步骤(简单 3 步):

  1. 创建索引模式:进入 Kibana → Stack Management → Index Patterns → Create index pattern,输入 multi-service-logs-*(匹配所有日期的日志索引),点击 Next Step;
  2. 选择时间字段:在 Time field 下拉框中,选择 @timestamp(日志时间戳),点击 Create index pattern;
  3. 查看日志:进入 Discover 页面,即可看到所有服务的日志,可通过顶部的筛选框(如 tag:backend1)筛选指定服务的日志,支持关键词搜索、时间范围筛选,排查问题高效便捷。

可选优化:在 Kibana 中创建 Dashboard(仪表盘),添加常用服务的日志指标(如错误日志数量、请求量),实现日志实时监控,异常时可快速发现。

4. 进阶版优势与注意事项
  • 优势:可视化查询、高效筛选检索、日志归档便捷,支持服务扩容后的多实例日志管理,适合生产环境规模化部署,大幅提升问题排查效率;
  • 注意事项:需要占用一定的服务器资源(主要是 Elasticsearch 的内存),单节点部署适合中小型生产,大规模部署可考虑 Elasticsearch 集群。

四、通用避坑技巧(必看,避免日志收集失败)

无论采用哪种方案,以下避坑技巧能有效避免日志收集失败、磁盘占满等问题,确保日志集中管理稳定运行:

  1. 日志轮转(防止磁盘占满): logrotate 配置示例(基础版)

    /root/multi-service-docker/logs/*/*.log {
      daily          # 每天轮转一次
      rotate 7       # 保留 7 天日志
      compress       # 压缩旧日志(节省磁盘空间)
      missingok      # 忽略不存在的日志文件,不报错
      notifempty     # 忽略空日志文件,不轮转
      create 0644 root root # 新建日志文件的权限(避免权限不足)
    }
    
    • 基础版:使用 Linux 的 logrotate 工具配置自动轮转,新建配置文件 /etc/logrotate.d/multi-service,添加轮转规则(如上),实现每天轮转、保留 7 天日志、自动压缩;
    • 进阶版:在 Elasticsearch 中配置「索引生命周期管理(ILM)」,自动删除 30 天前的日志,避免日志量过大导致磁盘占满。
  2. 权限问题(避免日志写入失败):

    • 宿主机日志目录需赋予 755 权限(chmod -R 755 ./logs),确保容器能正常写入日志;
    • Fluentd 容器的缓冲目录(./logs/fluentd/buffer)需赋予写入权限,避免日志缓冲失败。
  3. 日志级别控制(减少无用日志):生产环境中,将后端、Nginx 等服务的日志级别设为 Information 或 Warning,关闭 Debug 级别,减少日志量,降低存储压力和收集延迟。

  4. 网络互通(避免日志无法发送):确保所有服务(业务服务、EFK 服务)都加入同一 Docker 网络(multi-service-network),避免 Fluentd 无法接收日志。

  5. 版本兼容(避免部署失败):EFK 栈的三个服务(Elasticsearch、Fluentd、Kibana)版本需匹配,本文推荐的 8.11.0 版本组合经亲测兼容,无需额外调整。

五、方案选型建议(按需选择,无需过度设计)

结合实际部署场景,两种方案的选型建议如下,避免过度设计,兼顾效率和成本:

  • 测试环境/小型部署(服务数量≤5,日志量小):优先选择基础版(宿主机目录挂载),零额外工具、快速落地,满足简单的日志查看和问题排查需求;
  • 生产环境/规模化部署(服务数量≥5,多实例,日志量大):优先选择进阶版(EFK 栈集成),可视化管理、高效排查,适合长期维护;
  • 过渡方案:可同时启用两种方案,基础版作为日志备份,进阶版用于日常排查,确保日志不丢失。

六、总结

Docker Compose 多后端 + 多前端部署的日志集中管理,核心是「统一收集、分类存储、便捷查看」,两种方案各有侧重,可根据自身场景灵活选型:基础版胜在简单、零依赖,适合快速落地;进阶版胜在可视化、高效,适合生产环境规模化部署。

本文所有配置示例均基于实际部署场景(3 个.NET8 后端+3 个 Vue 前端 + 多数据库)亲测可用,可直接复制复用,无需大幅修改现有架构。重点关注日志轮转、权限配置和版本兼容三个核心点,就能避免绝大多数日志收集失败的问题。

目录

  1. 一、前置准备(必做,确保日志可正常输出)
  2. 二、基础版:宿主机目录挂载(零额外工具,适合测试/小型部署)
  3. 1. 统一日志目录规划(贴合原有服务目录结构)
  4. 项目根目录:./logs/
  5. 赋予目录写入权限,避免容器日志写入失败
  6. 2. 完整配置示例(修改 docker-compose.yml)
  7. (1).NET 后端 API 日志挂载(3 个后端通用,仅修改目录名)
  8. 后端 1(backend1)配置示例
  9. 后端 2(backend2)配置示例(仅修改日志挂载目录)
  10. 其他环境变量、依赖配置与 backend1 一致
  11. 后端 3(backend3)配置示例(同理)
  12. 其他配置与 backend1 一致
  13. (2)Nginx 前端代理日志挂载(适配多前端)
  14. (3)数据库与 Redis 日志挂载(以 MySQL 为例,其他数据库同理)
  15. MySQL 日志挂载示例
  16. Redis 日志挂载示例(需额外配置日志路径)
  17. 启动命令指定日志文件路径,确保日志输出到挂载目录
  18. 3. 日志查看与管理(实用命令,直接复用)
  19. 1. 进入日志根目录(统一管理所有日志)
  20. 2. 查看后端 1 实时日志(.NET 日志按日期命名,如 20260208.log)
  21. 3. 查看前端 1 的访问日志(筛选 web1 相关请求,定位前端请求异常)
  22. 4. 查看 MySQL 错误日志(排查数据库连接、查询异常)
  23. 5. 搜索所有后端日志中的关键词(如“接口报错”,快速定位问题)
  24. 6. 批量压缩旧日志(避免磁盘占满,保留 7 天日志)
  25. 7. 查看服务扩容后多实例的日志(后端 1 扩容为 3 个实例,日志自动区分)
  26. 输出:20260208.log 202602081.log 202602082.log
  27. 4. 基础版优势与局限
  28. 三、进阶版:EFK 栈集成(可视化管理,适合生产环境/规模化部署)
  29. 1. 部署架构(复用原有 Docker 网络,无需重构现有服务)
  30. 2. 完整配置步骤(分步实施,可直接复用)
  31. 步骤 1:编写 EFK 栈编排文件(efk.yml)
  32. 1. Elasticsearch:日志存储与检索(单节点部署,适合中小型生产)
  33. 2. Fluentd:轻量日志收集器(核心,收集所有服务日志)
  34. 3. Kibana:日志可视化界面(直观查看、筛选、监控日志)
  35. 数据卷:持久化 Elasticsearch 数据(日志存储)
  36. 网络:复用原有业务网络,无需重新创建
  37. 关键:使用已存在的网络(原有业务服务所在网络)
  38. 步骤 2:配置 Fluentd 日志收集规则(核心,过滤无用日志)
  39. 1. 创建 Fluentd 配置目录
  40. 2. 创建配置文件 fluent.conf(核心规则)
  41. 来源:监听 Docker 容器日志(接收所有容器发送的日志)
  42. 过滤:排除无用日志(健康检查日志、空日志、调试日志,减少存储压力)
  43. 输出:将过滤后的日志输出到 Elasticsearch,按日期分索引(便于归档和删除)
  44. 步骤 3:修改原有业务服务的日志驱动(指向 Fluentd)
  45. 以 backend1 为例,添加 logging 配置(其他服务同理)
  46. 新增:日志驱动配置(核心,指向 Fluentd)
  47. 其他环境变量、依赖配置不变
  48. Nginx 服务添加日志驱动(示例)
  49. 其他配置不变
  50. MySQL/Redis 服务同理,仅修改 tag 为 mysql、redis 即可
  51. 3. 启动 EFK 栈与验证(全程可复现)
  52. 1. 启动 EFK 栈和原有业务服务(同时启动,确保网络互通)
  53. 2. 查看所有服务运行状态(确保 EFK 服务和业务服务均正常启动)
  54. 3. 验证 Fluentd 是否正常接收日志(查看 Fluentd 日志)
  55. 出现"successfully connected to Elasticsearch"即为正常
  56. 4. 访问 Kibana 可视化界面(浏览器访问)
  57. http://服务器 IP:5601
  58. 如:http://192.168.1.100:5601
  59. 4. 进阶版优势与注意事项
  60. 四、通用避坑技巧(必看,避免日志收集失败)
  61. 五、方案选型建议(按需选择,无需过度设计)
  62. 六、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Java 按值传递与按引用传递详解
  • Whisper 语音识别技术本地部署与应用指南
  • 搜索旋转排序数组:二分查找 C++ 解法
  • Go 与 C++ 对比:性能、并发与生态差异分析
  • Ubuntu 虚拟机部署 OpenClaw 个人 AI 助手
  • 大模型的核心功能与技术架构解析
  • Java 随机数生成实战:解析范围字符串与动态区间控制
  • 使用 PyTorch 构建 GPT 模型
  • CSS 背景样式详解:颜色、图片与定位
  • Java Web 自研框架 18 年架构决策复盘与核心思路
  • 企业级Python反爬虫技术:JS逆向、APP抓包与验证码破解实战
  • Python Bokeh 交互式 Web 可视化实战指南
  • 国产 AI 智能体工具横向测评:腾讯、字节、阿里等主流方案
  • AI Agent 生产级框架实战:架构设计与核心代码实现
  • 基于 Java 和 Leaflet 的湖南省道路长度 WebGIS 系统构建
  • PyCharm 中 Copilot 无法加载 Claude 模型解决方案
  • Gitee 代码上传指南:Git 基础与实战操作
  • Byzer-lang 低代码 AI 数据平台部署指南
  • 网络安全行业自学与转行指南:入行规划与学习路径
  • Java Stream API 排序流特性与用法

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online