ELK(Elasticsearch / Logstash / Kibana)部署与日志分析

日志和数据分析系统

type
status
date
slug
summary
tags
category
icon
password

一、ELK 简介(作用 + 核心组件)

  • 作用:统一日志搜集、解析、存储与可视化(集中管理运维与分析)。
  • 核心组件
    • Beats(agent):部署在业务主机用于采集日志
      • filebeat:应用日志;
      • topbeat/metricbeat:系统指标;
      • winlogbeat:Windows 事件;
      • packetbeat:网络包。
    • Logstash:日志过滤/解析/转发(支持 grokmutatedate 等 filter)。
    • Elasticsearch(ES):分布式搜索引擎,负责索引存储与搜索。
      • 分布式
        1. —— 拆分任务和数据
        • 含义:将 大数据集拆分成多个小块(Shards,分片),避免单机无法承载。
        • 在 ES 中:
          • 一个索引(Index)会被拆分成多个 主分片(Primary Shards)
          • 每个分片就像一个小数据库,独立存储部分数据。
        • 好处:数据量大时,可以横向扩展,而不是依赖单机性能。
        2. —— 分布在多节点
        • 含义:把这些分片 分布在不同的机器(Node) 上,而不是集中在一台服务器。
        • 在 ES 中:
          • 一个 集群(Cluster) 有多台服务器,每台是一个 Node。
          • ES 自动将分片均衡地布置到各个节点。
        • 好处:
          • 提升可靠性:某台机器挂了,数据仍在别的节点上。
          • 提升并发性能:查询可以并行分发到不同节点执行。
        3. —— 协同工作形成整体
        • 含义:这些节点并不是“各自为政”,而是通过 协调机制 共同对外提供一个完整的服务。
        • 在 ES 中:
          • 主节点(Master Node) 负责管理元数据(索引分片分布情况)。
          • 数据节点(Data Node) 存储和检索数据。
          • 协调节点(Coordinating Node) 负责接收请求、拆分任务、合并结果。
        • 好处:
          • 对用户透明,外部看起来就像是一个统一的搜索引擎。
          • 具备高可用性和伸缩性。
        小结
        分布式 = 分 + 布 + 式
        • :数据拆分(分片)。
        • :存放到多台机器(节点)。
        • :各节点协作,对外像一个整体。
        所以,Elasticsearch 之所以能处理海量数据和高并发搜索请求,核心就在于它的 分布式架构

        notion image
    • Kibana:可视化 Web UI,用于查看索引、创建 dashboard/图表。

二、部署前:环境规划与准备步骤(必做)

  1. 网络/主机规划(示例)
    1. 将上述写入 /etc/hosts(所有节点)。
  1. 关闭 SELinux、确保时间同步(避免权限与时间相关索引问题)。
  1. 安装 JDK(示例)
    1. 调整系统资源限制(避免 ES 打开大量文件/进程失败):
      1. /etc/security/limits.conf 添加:
        并在 /etc/sysctl.conf 添加/检查:
        解释:nofile = 最大文件描述符;noproc = 最大进程数。

    三、部署 Elasticsearch(详细步骤与配置示例)

    3.1 创建用户与解压安装包

    (保留安装包路径与权限操作)

    3.2 编辑 elasticsearch.yml(示例:主节点)

    3.3 重要修正与建议(必须注意)

    • cluster.initial_master_nodes 的值应是 节点名 列表,而不是 host:port。例如:
      • http.cors.allow-origin 不应为 true,正确写法示例:
        • allow-origin 要求字符串或列表,true 不是合法来源值)。
      • 注意 node.name 一致性es-node01 / es-node02node.name 位置可能有混淆(可能写反),部署时务必确认每台机器 node.name 与其 hosts/配置一致。
      • 节点角色规划:生产环境通常不要让 master 节点同时做大量数据写入(可考虑主节点 node.master: truenode.data: false),但小规模测试/一机多节点可共存(取决于资源)。

      3.4 启动 ES 并验证

      示例返回会包含 "status":"green" 等字段,用于判断集群状态。

      四、配置并启动 Logstash(步骤与示例)

      4.1 安装与拷贝示例配置

      4.2 logstash.conf 示例

      说明:%{COMBINEDAPACHELOG} 为 Logstash 自带模式,位于 vendor/.../patterns。

      4.3 启动 Logstash(示例)

      (文档默认使用 nohup &,建议生产使用 systemd 服务单元管理)。

      五、安装并配置 Kibana(步骤)

      1. 解压并编辑 kibana.yml
      1. 启动:
      (Kibana web UI 默认监听 5601,用于创建可视化与索引管理)。

      六、在业务主机部署 Filebeat(采集并转发日志)

      6.1 在 web 服生成访问日志(测试)

      6.2 安装 & 编辑 filebeat.yml(关键部分)

      6.3 启动 filebeat

      建议:同样建议为 filebeat 使用 systemd service,便于启动/停止和日志收集。

      七、测试与可视化(验证 ELK 是否正常)

      • Kibana → Management → Index Patterns 中查看是否建立了 web-access-log-* 索引。
      • Kibana → Visualize / Dashboard 创建图表(例如按天统计访问量),确认日志字段解析(grok 是否成功)。

      八、常见错误、潜在误解与修正建议

      1. 建议优先使用 Elasticsearch 附带的 JDK或使用官方推荐的 LTS(例如 Java 11)以保证兼容性与稳定性;不同 ES 版本对 Java 要求不同,务必对照 ES 发布说明确认。
      1. 启动方式:文中多处使用 nohup ... & 启动。建议为 ES / Logstash / Kibana / Filebeat 建立 systemd 单元(生产环境更稳健),并配置日志轮转与监控。
      1. 权限与文件所有权:解压后务必 chown -R elk:elk /app/elk/ 并且确认 data/logs 目录权限正确,避免启动失败。
      1. IPv6 vs IPv4 监听netstat 示例显示 tcp6 监听(可能绑定在所有地址)。如果仅需 IPv4,可在 elasticsearch.yml 使用 network.host: 0.0.0.0 或指定 IPv4 地址并检查 /etc/hosts 与 DNS 配置。

      Loading...