如何搭建ELK

搭建 ELK(Elasticsearch、Logstash、Kibana)栈是一个多步骤的过程,涉及多个组件的部署和配置。以下是详细的搭建步骤,适用于在 Linux 服务器(如 CentOS 7/8、Ubuntu 20.04/22.04)上部署生产或开发/测试环境。


🎯 一、架构概述

典型的 ELK 栈核心组件:

  1. Filebeat(可选但推荐)​:轻量级日志收集器,部署在客户端节点。
  2. Logstash:日志处理管道(接收、解析、过滤、输出)。
  3. Elasticsearch:分布式搜索引擎,存储和索引数据。
  4. Kibana:数据可视化 Dashboard。
  5. Kafka(可选,高并发场景)​:作为日志缓冲队列。

⚠️ ​最小化部署​:可将 Logstash + ES + Kibana 装在同一台服务器(测试环境)。生产环境建议分离部署。


📦 二、环境准备

  1. 服务器要求​:

    • OS: Linux (CentOS 7+, Ubuntu 18.04+)。

    • Java:至少 OpenJDK 11(Elasticsearch 依赖)。

      安装 OpenJDK 11

      sudo apt update && sudo apt install openjdk-11-jdk # Ubuntu
      sudo yum install java-11-openjdk-devel # CentOS

  2. 资源规划​:

    • 内存:ES 单独占用 ≥4GB(生产建议 ≥16GB),禁用 Swap。
    • 磁盘:SSD 高性能磁盘,预留足够空间(日志量 x 副本数)。
    • 网络 :开放端口:
      • ES: 9200 (HTTP), 9300 (集群通信)
      • Kibana: 5601
      • Logstash: 5044 (Beats), 9600 (管理)

🔧 三、分步安装配置

🔹 步骤 1:安装 Elasticsearch
  1. 添加 Elastic 仓库​:

    复制代码
    # Ubuntu/Debian
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    sudo apt-get install apt-transport-https
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    
    # CentOS/RHEL
    sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    sudo tee /etc/yum.repos.d/elastic.repo <<EOF
    [elasticsearch]
    name=Elasticsearch
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    EOF
  2. 安装并启动 ES​:

    复制代码
    sudo apt update && sudo apt install elasticsearch  # Ubuntu
    sudo yum install elasticsearch                    # CentOS
    
    # 修改配置文件 /etc/elasticsearch/elasticsearch.yml
    cluster.name: my-elk-cluster    # 集群名(所有节点一致)
    node.name: node-1               # 节点名
    network.host: 0.0.0.0           # 监听所有IP(生产环境建议绑定内网IP)
    discovery.type: single-node     # 单节点模式(集群需注释此项)
    # 集群配置示例(多节点):
    # discovery.seed_hosts: ["192.168.1.10", "192.168.1.11"]
    # cluster.initial_master_nodes: ["node-1", "node-2"]
    
    # 启动服务
    sudo systemctl daemon-reload
    sudo systemctl enable elasticsearch
    sudo systemctl start elasticsearch
  3. 验证 ES​:

    复制代码
    curl -X GET http://localhost:9200
    # 应返回JSON,包含"cluster_name"等信息

🔹 步骤 2:安装 Logstash
  1. 安装 Logstash​:

    复制代码
    sudo apt install logstash    # Ubuntu
    sudo yum install logstash    # CentOS
  2. 配置 Pipeline ​:

    创建配置文件 /etc/logstash/conf.d/my-pipeline.conf

    复制代码
    input {
      beats {
        port => 5044   # 接收 Filebeat 数据
      }
      # 可选:直接监听文件
      # file {
      #   path => "/var/log/*.log"
      #   start_position => "beginning"
      # }
    }
    
    filter {
      grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}" } # 示例:解析日志格式
      }
      date {
        match => [ "timestamp", "ISO8601" ]
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://localhost:9200"]  # ES地址
        index => "app-logs-%{+YYYY.MM.dd}"   # 索引命名规则
      }
    }
  3. 启动 Logstash​:

    复制代码
    sudo systemctl enable logstash
    sudo systemctl start logstash

🔹 步骤 3:安装 Kibana
  1. 安装并配置 Kibana​:

    复制代码
    sudo apt install kibana    # Ubuntu
    sudo yum install kibana    # CentOS
    
    # 编辑配置 /etc/kibana/kibana.yml
    server.port: 5601
    server.host: "0.0.0.0"       # 允许外部访问
    elasticsearch.hosts: ["http://localhost:9200"] # ES地址
  2. 启动 Kibana​:

    复制代码
    sudo systemctl enable kibana
    sudo systemctl start kibana

    访问 http://<your-server-ip>:5601,进入Kibana界面。


🔹 步骤 4:安装 Filebeat(在客户端服务器)
  1. 安装 Filebeat​:

    复制代码
    # Ubuntu
    sudo apt install filebeat
    # CentOS
    sudo yum install filebeat
  2. 配置 Filebeat ​:

    修改 /etc/filebeat/filebeat.yml

    复制代码
    filebeat.inputs:
      - type: filestream
        enabled: true
        paths:
          - /var/log/*.log        # 收集的日志路径
    
    output.logstash:
      hosts: ["logstash-server-ip:5044"]  # Logstash地址
  3. 启动并验证​:

    复制代码
    sudo systemctl enable filebeat
    sudo systemctl start filebeat
    # 检查状态:sudo filebeat test output

🛡 四、重要优化与安全设置

  1. Elasticsearch 安全​(免费版基础安全):

    • 启用 TLS 加密传输(xpack.security.enabled: true)。

    • 设置内置用户密码:

      复制代码
      sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
    • 在 Kibana 和 Logstash 配置中使用用户名密码连接 ES。

  2. 性能调优​:

    • ES 内存 :调整 -Xms-Xmx(不超过物理内存50%):

      复制代码
      # /etc/elasticsearch/jvm.options
      -Xms4g
      -Xmx4g
    • Logstash Worker 线程 (根据 CPU 核心数):

      复制代码
      # /etc/logstash/logstash.yml
      pipeline.workers: 4
  3. 索引生命周期管理 (ILM)​​:

    • 通过 Kibana > Stack Management 创建策略:
      • 自动删除旧数据(如保留7天)。
      • 优化分片数量(推荐单分片大小20-50GB)。

🔍 五、验证日志流程

  1. 在客户端生成日志:echo "Test log entry" >> /var/log/test.log
  2. 在 Kibana 中操作:
    • Management > Stack Management > Data Views :创建 app-logs-* 数据视图。
    • Analytics > Discover:选择数据视图查看日志。

⚙️ 六、可选:集群化部署(生产推荐)

组件 集群化方案
Elasticsearch 部署 ≥3 节点(奇数),配置 discovery.seed_hostscluster.initial_master_nodes
Logstash 多实例部署,通过负载均衡器分发数据(如 Nginx、HAProxy)
Kibana 无状态服务,可多实例 + Nginx 反向代理

🚨 避坑指南

  • 防火墙未开放端口 :检查 firewall-cmdufw
  • Java 版本不兼容:必须使用 JDK 11(ES 7.x/8.x)。
  • 磁盘空间不足:监控 ES 磁盘使用率,避免只读状态。
  • 日志未解析:在 Kibana 的 Discover 中检查字段是否被正确解析(Grok 调试器好用!)。

通过以上步骤,您可搭建一个功能完备的 ELK 栈。建议初次使用从单节点测试开始,熟悉后再扩展集群。如需容器化部署(Docker/K8s),可参考 Elastic 官方 Helm Charts 或 Docker Compose 模板。

相关推荐
only_Klein5 天前
K8S部署ELK(二):部署Kafka消息队列
elk·kafka·kubernetes
core5126 天前
elk快速部署、集成、调优
elk·springboot·kibana·索引·查询
only_Klein6 天前
K8S部署ELK(一):部署Filebeat日志收集器
elk·容器·kubernetes
晴子呀6 天前
ELK实践指南
elk
三不原则6 天前
日志管理工具 ——ELK Stack
运维·elk
only_Klein7 天前
K8S部署ELK(五):集成Kibana实现日志可视化
elk·容器·kubernetes
鼠鼠我捏,要死了捏8 天前
基于ELK Stack的实时日志分析与智能告警实践指南
elk·日志分析·智能告警
所念皆为东辞10 天前
elk部署加日志收集
linux·elk·elasticsearch·centos
运维成长记13 天前
企业级日志分析系统ELK
elk