使用Docker部署ELK

简介

ELK Stack是Elasticsearch、Logstash和Kibana的简称,是目前最流行的开源日志分析平台。通过Docker部署ELK可以大大简化安装配置过程,提高部署效率。

  • Elasticsearch: 分布式搜索引擎,用于存储和检索数据
  • Logstash: 数据收集和转换引擎,用于日志收集和处理
  • Kibana: 数据可视化平台,提供图表和仪表板功能

前置准备

  1. 安装Docker (版本 20.10+)
  2. 安装Docker Compose (版本 2.0+)
  3. 确保服务器至少有4GB内存
  4. 建议使用Linux系统(如Ubuntu 20.04/22.04)

部署步骤

1. 创建项目目录结构

mkdir elk-docker
cd elk-docker
mkdir elasticsearch kibana logstash

2. 创建docker-compose.yml文件

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - cluster.name=es-docker-cluster
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elk

  logstash:
    image: docker.elastic.co/logstash/logstash:8.12.0
    container_name: logstash
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    ports:
      - 5044:5044
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.0
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: bridge

3. 配置Logstash

创建logstash/pipeline/logstash.conf文件:

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

4. 启动服务

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

配置说明

Elasticsearch配置

  1. 内存设置:

    • 通过ES_JAVA_OPTS环境变量配置JVM堆大小
    • 建议设置为服务器内存的50%
  2. 重要配置参数:

    • discovery.type=single-node: 单节点模式
    • bootstrap.memory_lock=true: 锁定内存,防止交换

Kibana配置

  1. 访问地址:http://localhost:5601
  2. 默认用户名:elastic
  3. 密码:首次启动时自动生成

Logstash配置

  1. 管道配置:
    • 输入:支持多种输入源
    • 过滤:数据处理和转换
    • 输出:定义数据出口

常见问题

1. Elasticsearch无法启动

常见原因:

  • 内存不足
  • 权限问题
  • 端口被占用

解决方案:

# 检查日志
docker logs elasticsearch

# 修改系统配置
sudo sysctl -w vm.max_map_count=262144

2. Kibana连接Elasticsearch失败

检查项:

  • Elasticsearch是否正常运行
  • 网络连接是否正常
  • 认证信息是否正确

3. Logstash数据收集问题

排查步骤:

  1. 检查配置文件语法
  2. 确认输入源是否正常
  3. 查看Logstash日志
docker logs logstash

总结

通过Docker部署ELK具有以下优势:

  1. 快速部署,环境一致性好
  2. 配置简单,维护方便
  3. 资源隔离,便于扩展
  4. 版本控制方便

建议在生产环境中:

  • 根据实际需求调整资源配置
  • 做好数据备份
  • 配置安全认证
  • 监控服务状态