ELKB日志分析平台 部署

ElasticSearch ELKB 日志分析 介绍
docker-compose一键部署ELK(elasticsearch+logstash+kibana)

以下是使用 Docker Compose 部署 Elasticsearch、Logstash、Kibana 和 Beats(以 Filebeat 为例) 的完整方案,涵盖配置文件、关键参数说明及部署步骤,适用于日志采集、存储与分析场景:

一、核心组件与架构

  • Elasticsearch:日志存储与搜索引擎,支持分布式扩展。
  • Logstash:日志采集、解析与转发工具,支持多数据源输入。
  • Kibana:数据可视化与仪表板工具,与 Elasticsearch 集成。
  • Filebeat:轻量级日志采集器,用于从文件或系统日志中收集数据并发送至 Logstash/Elasticsearch。

架构流程
Filebeat → Logstash → Elasticsearch → Kibana

二、Docker Compose 配置文件

创建 docker-compose.yml 文件,内容如下:

yaml 复制代码
version: '3.8'

services:
  # Elasticsearch 服务
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node  # 单节点模式(生产环境需改为集群配置)
      - ES_JAVA_OPTS=-Xms1g -Xmx1g  # JVM 堆内存设置(根据主机内存调整)
      - xpack.security.enabled=false  # 禁用安全认证(生产环境需开启)
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es_data:/usr/share/elasticsearch/data  # 数据持久化
    ports:
      - "9200:9200"  # REST API 端口
      - "9300:9300"  # 节点间通信端口
    networks:
      - elk_network

  # Logstash 服务
  logstash:
    image: docker.elastic.co/logstash/logstash:8.15.0
    container_name: logstash
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml  # Logstash 配置文件
      - ./logstash/pipeline:/usr/share/logstash/pipeline  # 管道配置目录
    depends_on:
      - elasticsearch
    ports:
      - "5044:5044"  # Beats 输入端口
      - "9600:9600"  # 监控端口
    networks:
      - elk_network

  # Kibana 服务
  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200  # 指定 Elasticsearch 地址
    depends_on:
      - elasticsearch
    ports:
      - "5601:5601"  # Kibana 访问端口
    networks:
      - elk_network

  # Filebeat 服务
  filebeat:
    image: docker.elastic.co/beats/filebeat:8.15.0
    container_name: filebeat
    user: root  # 需要 root 权限访问主机日志文件
    volumes:
      - ./filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml  # Filebeat 配置文件
      - /var/log:/var/log:ro  # 挂载主机日志目录(只读)
    depends_on:
      - logstash
    networks:
      - elk_network

volumes:
  es_data:  # Elasticsearch 数据卷

networks:
  elk_network:  # 自定义网络,确保容器间通信
    driver: bridge

三、关键配置文件说明

1. Logstash 管道配置 (logstash/pipeline/logstash.conf)
conf 复制代码
input {
  beats {
    port => 5044  # 监听 Filebeat 发送的数据
  }
}

filter {
  # 示例:解析 JSON 格式日志
  if [message] =~ "^{" {
    json {
      source => "message"
    }
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]  # 输出到 Elasticsearch
    index => "logstash-%{+YYYY.MM.dd}"  # 按日期生成索引
  }
  stdout { codec => rubydebug }  # 调试用,输出到控制台
}
2. Filebeat 配置 (filebeat/config/filebeat.yml)
yaml 复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log  # 采集主机日志目录下的所有 .log 文件
  fields:
    app: "my_application"  # 自定义字段,用于标识日志来源

output.logstash:
  hosts: ["logstash:5044"]  # 发送到 Logstash

四、部署步骤

  1. 创建目录结构

    bash 复制代码
    mkdir -p elk/{logstash/config,logstash/pipeline,filebeat/config}
    chmod -R 777 elk  # 确保容器有权限访问目录
  2. 放置配置文件

    • 将上述 logstash.conffilebeat.yml 分别放入对应目录。
  3. 启动服务

    bash 复制代码
    docker-compose up -d
  4. 验证部署

    • Elasticsearch :访问 http://localhost:9200,返回 JSON 信息表示成功。
    • Kibana :访问 http://localhost:5601,登录后创建索引模式(如 logstash-*)查看日志。
    • Logstash :检查日志输出(docker logs logstash)确认数据接收。
    • Filebeat :检查日志输出(docker logs filebeat)确认日志采集。

五、生产环境优化建议

  1. 集群配置

    • Elasticsearch 改为多节点部署,修改 discovery.typecluster.initial_master_nodes
    • 增加 vm.max_map_count 系统参数(通过 sysctl -w vm.max_map_count=262144)。
  2. 安全认证

    • 启用 Elasticsearch 的 X-Pack 安全功能,生成证书并配置 Kibana/Logstash 使用 HTTPS。
  3. 资源限制

    • 为每个容器设置 CPU/内存限制(如 resources.limits.memory: 2G)。
  4. 日志轮转

    • 配置 Filebeat 的 close_inactiveclean_inactive 参数避免日志文件过多。

六、常见问题排查

  • 容器无法通信 :检查是否加入同一自定义网络(elk_network)。
  • Elasticsearch 启动失败 :检查 vm.max_map_countmemlock 配置。
  • Logstash 无数据输入 :确认 Filebeat 的 output.logstash.hosts 地址正确。
  • Kibana 无法连接 Elasticsearch :检查 ELASTICSEARCH_HOSTS 环境变量是否指向正确的容器名称。
相关推荐
东皋长歌1 天前
SpringBoot集成ELK
spring boot·后端·elk
没有bug.的程序员3 天前
GC 日志分析与调优:从日志到性能优化的实战指南
性能优化·gc·日志分析·gc调优
勿芮介8 天前
[微服务]ELK Stack安装与配置全指南
elk·微服务·架构
core51212 天前
基于elk实现分布式日志
分布式·elk·日志·logstash
晴子呀15 天前
使用Springboot实现简单的ELK日志搜索系统
spring boot·后端·elk
xiejava101815 天前
Loki+Alloy+Grafana构建轻量级的日志分析系统
grafana·loki·日志分析·alloy
悟能不能悟16 天前
如何搭建ELK
elk
only_Klein20 天前
K8S部署ELK(二):部署Kafka消息队列
elk·kafka·kubernetes
core51221 天前
elk快速部署、集成、调优
elk·springboot·kibana·索引·查询