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四、部署步骤
- 
创建目录结构: bashmkdir -p elk/{logstash/config,logstash/pipeline,filebeat/config} chmod -R 777 elk # 确保容器有权限访问目录
- 
放置配置文件: - 将上述 logstash.conf和filebeat.yml分别放入对应目录。
 
- 将上述 
- 
启动服务: bashdocker-compose up -d
- 
验证部署: - Elasticsearch :访问 http://localhost:9200,返回 JSON 信息表示成功。
- Kibana :访问 http://localhost:5601,登录后创建索引模式(如logstash-*)查看日志。
- Logstash :检查日志输出(docker logs logstash)确认数据接收。
- Filebeat :检查日志输出(docker logs filebeat)确认日志采集。
 
- Elasticsearch :访问 
五、生产环境优化建议
- 
集群配置: - Elasticsearch 改为多节点部署,修改 discovery.type和cluster.initial_master_nodes。
- 增加 vm.max_map_count系统参数(通过sysctl -w vm.max_map_count=262144)。
 
- Elasticsearch 改为多节点部署,修改 
- 
安全认证: - 启用 Elasticsearch 的 X-Pack 安全功能,生成证书并配置 Kibana/Logstash 使用 HTTPS。
 
- 
资源限制: - 为每个容器设置 CPU/内存限制(如 resources.limits.memory: 2G)。
 
- 为每个容器设置 CPU/内存限制(如 
- 
日志轮转: - 配置 Filebeat 的 close_inactive和clean_inactive参数避免日志文件过多。
 
- 配置 Filebeat 的 
六、常见问题排查
- 容器无法通信 :检查是否加入同一自定义网络(elk_network)。
- Elasticsearch 启动失败 :检查 vm.max_map_count和memlock配置。
- Logstash 无数据输入 :确认 Filebeat 的 output.logstash.hosts地址正确。
- Kibana 无法连接 Elasticsearch :检查 ELASTICSEARCH_HOSTS环境变量是否指向正确的容器名称。