免费开源日志软件ELK Stack介绍及安装过程

一、ELK Stack 简介

ELK Stack 并非一个单一的软件,而是一套由三个开源项目组合而成的强大数据处理和分析平台。 "ELK" 是 Elasticsearch、Logstash 和 Kibana 这三个核心组件的首字母缩写。 通常,为了更全面的数据采集,还会加入 Beats,所以有时也被称为 Elastic Stack

1、组件详解

  • Elasticsearch (E):

    • 定位: 核心的分布式搜索和分析引擎。
    • 功能 :
      • 全文检索: 提供快速、近似实时的全文检索能力,能够处理海量数据。
      • 分布式特性: 易于扩展,可以处理PB级别的数据,具备高可用性和容错能力。
      • 分析引擎: 不仅可以搜索,还能进行复杂的数据聚合和分析。
      • NoSQL 数据库: 基于 JSON 文档存储,采用 Schema-less 模式,数据结构灵活。
    • 应用场景: 日志分析、指标监控、安全信息和事件管理 (SIEM)、应用性能监控 (APM)、网站搜索等。
  • Logstash (L):

    • 定位: 强大的数据收集引擎,用于收集、解析和转换各种来源的数据。
    • 功能 :
      • 数据管道: 构建实时的、流式的数据管道。
      • 多数据源支持: 可以从各种来源收集数据,如日志文件、数据库、消息队列、网络数据等。
      • 数据转换: 提供丰富的插件,用于解析、过滤、转换和增强数据。例如,可以将非结构化日志解析为结构化数据,添加地理位置信息等。
      • 数据输出: 支持多种数据输出目的地,最常见的当然是 Elasticsearch,也可以输出到其他存储系统或消息队列。
    • 核心概念 : Input (输入) -> Filter (过滤器) -> Output (输出)。
      • Input 插件: 定义数据来源。
      • Filter 插件: 定义数据处理和转换规则。
      • Output 插件: 定义数据输出目的地。
  • Kibana (K):

    • 定位: 数据可视化平台,用于探索和可视化存储在 Elasticsearch 中的数据。
    • 功能 :
      • 数据可视化: 提供丰富的图表类型(折线图、柱状图、饼图、地图等)和仪表板,用于直观展示数据。
      • 数据探索: 提供交互式的数据探索界面,可以快速查询、过滤和分析数据。
      • 实时仪表板: 可以创建实时更新的仪表板,监控系统和应用状态。
      • 告警: 可以配置告警规则,当数据满足特定条件时发出通知。
      • Canvas: 提供更自由的可视化画布,可以创建更具表现力的信息展示。
      • Maps: 提供地理空间数据可视化能力。
    • 核心概念: Dashboard (仪表板)、Visualization (可视化)、Discover (发现/探索)。
  • Beats:

    • 定位: 轻量级的数据采集器,用于将各种类型的数据发送到 Logstash 或 Elasticsearch。
    • 功能 :
      • 轻量高效: 资源消耗低,适合在各种环境中部署,例如服务器、虚拟机、容器等。
      • 多种类型 : 针对不同类型的数据有不同的 Beat,例如:
        • Filebeat: 用于收集日志文件。
        • Metricbeat: 用于收集系统和服务的指标数据 (CPU, 内存, 网络等)。
        • Packetbeat: 用于网络数据包分析。
        • Winlogbeat: 用于收集 Windows 事件日志。
        • Auditbeat: 用于审计系统事件。
        • Heartbeat: 用于监控服务可用性。
      • 直接输出: Beats 可以直接将数据发送到 Elasticsearch 或通过 Logstash 进行更复杂的处理。
    • Beats 优势: 相比于直接使用 Logstash 收集所有数据,Beats 更轻量,可以降低资源消耗,减轻 Logstash 的压力。

2、ELK Stack 的工作流程

  1. 数据采集 (Beats 或 Logstash Input): Beats 或 Logstash Input 插件从各种数据源收集数据。
  2. 数据传输 (Beats 或 Logstash) :
    • Beats -> Elasticsearch (或 Logstash): Beats 可以直接将数据发送到 Elasticsearch,也可以发送到 Logstash 进行预处理。
    • Logstash Input -> Logstash Filter -> Logstash Output: Logstash 接收数据后,通过 Filter 插件进行处理和转换,然后通过 Output 插件发送到 Elasticsearch (或其他目的地)。
  3. 数据存储和索引 (Elasticsearch): Elasticsearch 存储接收到的数据,并建立索引,以便快速搜索和分析。
  4. 数据可视化和分析 (Kibana): Kibana 连接到 Elasticsearch,用户可以使用 Kibana 提供的各种工具来探索、可视化和分析存储在 Elasticsearch 中的数据。

ELK Stack 的应用场景

  • 日志管理和分析: 最经典的应用场景,用于收集、分析和可视化应用程序和服务器的日志,帮助快速定位问题、监控系统运行状况。
  • 安全信息和事件管理 (SIEM): 用于收集和分析安全日志,检测安全威胁,进行安全事件响应。
  • 应用性能监控 (APM): 用于监控应用程序的性能指标,帮助优化应用性能,提升用户体验。
  • 业务分析: 可以用于分析用户行为、市场趋势、销售数据等,为业务决策提供支持。
  • 指标监控: 用于监控系统、网络、应用程序的各种指标,及时发现异常,保障系统稳定运行。
  • 网站搜索: Elasticsearch 可以作为网站的搜索引擎,提供快速、相关的搜索结果。

二、ELK Stack 的安装

这里以在 Linux 系统 (以 CentOS/Ubuntu 为例) 上安装最新版本的 ELK Stack 为例,并假设使用单节点安装,用于学习和测试环境。生产环境通常需要集群部署。

1、准备工作

  • Java : ELK Stack 基于 Java 开发,需要安装 Java (JDK 8 或更高版本,推荐 JDK 11 或 JDK 17)。
    • 检查 Java 版本: java -version
    • 如果没有安装或版本过低,请安装 JDK。例如,在 Ubuntu 上可以使用 sudo apt install openjdk-17-jdk,在 CentOS 上可以使用 sudo yum install java-17-openjdk-devel

2、安装 Elasticsearch

  1. 下载 Elasticsearch : 访问 Elasticsearch 官方下载页面,下载最新版本的 Elasticsearch .tar.gz.zip 包。或者使用 wget 命令下载:

    复制代码
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.x.x-linux-x86_64.tar.gz  # 请替换为最新版本号
  2. 解压 : 解压下载的压缩包到指定目录,例如 /opt/elasticsearch

    复制代码
    tar -xzf elasticsearch-8.x.x-linux-x86_64.tar.gz -C /opt
    cd /opt/elasticsearch-8.x.x  # 进入 Elasticsearch 目录
  3. 配置 (可选,对于单节点基本可以默认) :

    • 配置文件位于 config/elasticsearch.yml

    • 重要配置 (生产环境需要考虑) :

      • cluster.name: 集群名称,所有节点必须使用相同的集群名称。
      • node.name: 节点名称,每个节点必须唯一。
      • path.data: 数据存储路径。
      • path.logs: 日志存储路径。
      • network.host: 监听地址,默认为 127.0.0.1 (仅本地访问),生产环境通常设置为 0.0.0.0 (允许所有地址访问)。
      • http.port: HTTP 端口,默认为 9200
      • discovery.type: 单节点安装可以设置为 single-node
    • 示例配置 (config/elasticsearch.yml) :

      复制代码
      cluster.name: my-application
      node.name: node-1
      network.host: 0.0.0.0
      http.port: 9200
      discovery.type: single-node
  4. 启动 Elasticsearch : 在 Elasticsearch 目录下执行命令:

    复制代码
    ./bin/elasticsearch
    • 前台启动: 默认前台启动,方便查看日志输出。
    • 后台启动 : 可以使用 -d 参数后台启动: ./bin/elasticsearch -d
  5. 验证 Elasticsearch : 打开浏览器访问 http://<服务器IP>:9200,如果看到 Elasticsearch 的 JSON 响应,表示启动成功。 例如:

    复制代码
    {
      "name" : "node-1",
      "cluster_name" : "my-application",
      "cluster_uuid" : "xxxxxxxxxxxxxxxxxxxxxxx",
      "version" : {
        "number" : "8.x.x",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "xxxxxxxxxxxxxxxxxxxxxxx",
        "build_date" : "2023-xx-xxTxxxxxxxZ",
        "build_snapshot" : false,
        "lucene_version" : "9.x.x",
        "minimum_wire_compatibility_version" : "7.x.x",
        "minimum_index_compatibility_version" : "7.x.x"
      },
      "tagline" : "You Know, for Search"
    }

3、安装 Kibana

  1. 下载 Kibana : 访问 Kibana 官方下载页面,下载与 Elasticsearch 版本兼容的 Kibana .tar.gz.zip 包。或者使用 wget 命令下载:

    复制代码
    wget https://artifacts.elastic.co/downloads/kibana/kibana-8.x.x-linux-x86_64.tar.gz  # 请替换为最新版本号,确保版本与 Elasticsearch 一致
  2. 解压 : 解压下载的压缩包到指定目录,例如 /opt/kibana

    复制代码
    tar -xzf kibana-8.x.x-linux-x86_64.tar.gz -C /opt
    cd /opt/kibana-8.x.x  # 进入 Kibana 目录
  3. 配置 (可选) :

    • 配置文件位于 config/kibana.yml

    • 重要配置 (生产环境需要考虑) :

      • server.port: Kibana 服务端口,默认为 5601
      • server.host: Kibana 服务监听地址,默认为 0.0.0.0
      • elasticsearch.hosts: Elasticsearch 集群地址,默认为 ["http://localhost:9200"]。 如果 Elasticsearch 不在本地或端口不是 9200,需要修改此配置。
      • elasticsearch.usernameelasticsearch.password: 如果 Elasticsearch 启用了安全认证,需要配置用户名和密码。
    • 示例配置 (config/kibana.yml) :

      复制代码
      server.port: 5601
      server.host: "0.0.0.0"
      elasticsearch.hosts: ["http://<Elasticsearch服务器IP>:9200"] # 替换为实际 Elasticsearch 服务器 IP
      # elasticsearch.username: "kibana_system"  # 如果 Elasticsearch 启用了安全认证,取消注释并配置用户名和密码
      # elasticsearch.password: "xxxxxxxxxx"
  4. 启动 Kibana : 在 Kibana 目录下执行命令:

    复制代码
    ./bin/kibana
    • 前台启动: 默认前台启动。
    • 后台启动 : 可以使用 nohup ./bin/kibana & 命令后台启动。
  5. 验证 Kibana : 打开浏览器访问 http://<服务器IP>:5601,如果看到 Kibana 的欢迎界面,表示启动成功。

4、安装 Logstash

  1. 下载 Logstash : 访问 Logstash 官方下载页面,下载与 Elasticsearch 和 Kibana 版本兼容的 Logstash .tar.gz.zip 包。或者使用 wget 命令下载:

    复制代码
    wget https://artifacts.elastic.co/downloads/logstash/logstash-8.x.x-linux-x86_64.tar.gz  # 请替换为最新版本号,确保版本与 Elasticsearch 和 Kibana 一致
  2. 解压 : 解压下载的压缩包到指定目录,例如 /opt/logstash

    复制代码
    tar -xzf logstash-8.x.x-linux-x86_64.tar.gz -C /opt
    cd /opt/logstash-8.x.x  # 进入 Logstash 目录
  3. 配置 Logstash 管道 (Pipeline):

    • Logstash 的配置主要通过配置文件定义数据管道 (Pipeline)。

    • 配置文件通常位于 config/logstash.conf 或在 config/pipelines.yml 中配置多个管道。

    • 一个简单的 Logstash 配置文件示例 (例如 config/logstash.conf),从标准输入 (stdin) 接收数据,并输出到标准输出 (stdout):

      复制代码
      input {
        stdin { }
      }
      output {
        stdout {
          codec => rubydebug
        }
      }
    • 更常见的场景是从日志文件读取数据,并输出到 Elasticsearch:

      复制代码
      input {
        file {
          path => "/path/to/your/log/file.log"  # 替换为实际日志文件路径
          start_position => "beginning" # 从文件开头开始读取
          sincedb_path => "/dev/null" # 禁用 sincedb,每次都从头读取 (仅用于测试)
        }
      }
      filter {
        grok {
          match => { "message" => "%{COMBINEDAPACHELOG}" } # 使用 Grok 插件解析 Apache 日志 (示例)
        }
        date {
          match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] # 解析日志中的时间戳字段
          target => "@timestamp" # 将解析后的时间戳字段设置为 @timestamp,供 Elasticsearch 使用
        }
      }
      output {
        elasticsearch {
          hosts => ["http://<Elasticsearch服务器IP>:9200"] # 替换为实际 Elasticsearch 服务器 IP
          index => "web-logs-%{+YYYY.MM.dd}" # 定义 Elasticsearch 索引名称,每天创建一个新索引
        }
        stdout { codec => rubydebug } # 同时输出到标准输出,方便调试
      }
      • 重要配置 :
        • input 部分定义数据输入源 (例如 file, stdin, beats 等)。
        • filter 部分定义数据处理规则 (例如 grok 用于解析非结构化文本,date 用于处理时间戳)。
        • output 部分定义数据输出目的地 (例如 elasticsearch, stdout, file 等)。
        • Grok 插件: 非常强大,用于解析非结构化日志文本,提取关键字段。可以使用 Grok debugger 在 Kibana Dev Tools 中测试 Grok 表达式。
        • Date 插件: 用于处理日志中的时间戳,确保 Elasticsearch 能正确识别时间字段。
    • 插件 : Logstash 有大量的 Input, Filter 和 Output 插件,可以根据需求安装和配置。 插件列表可以在 Logstash 插件页面 找到。

  4. 启动 Logstash: 在 Logstash 目录下执行命令:

    复制代码
    ./bin/logstash -f config/logstash.conf  # 使用指定的配置文件启动 Logstash
    • 前台启动: 默认前台启动。
    • 后台启动 : 可以使用 nohup ./bin/logstash -f config/logstash.conf & 命令后台启动。

5、安装 Beats (以 Filebeat 为例)

  1. 下载 Filebeat : 访问 Beats 官方下载页面,下载与 ELK Stack 版本兼容的 Filebeat .tar.gz.zip 包。或者使用 wget 命令下载:

    复制代码
    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.x.x-linux-x86_64.tar.gz  # 请替换为最新版本号,确保版本与 ELK Stack 一致
  2. 解压 : 解压下载的压缩包到指定目录,例如 /opt/filebeat

    复制代码
    tar -xzf filebeat-8.x.x-linux-x86_64.tar.gz -C /opt
    cd /opt/filebeat-8.x.x  # 进入 Filebeat 目录
  3. 配置 Filebeat :

    • 配置文件位于 filebeat.yml

    • 重要配置 :

      • filebeat.inputs: 定义要收集的日志文件。
      • output.elasticsearch: 配置输出到 Elasticsearch。
      • output.logstash: 配置输出到 Logstash (如果使用 Logstash 进行预处理)。
    • 示例配置 (filebeat.yml) :

      复制代码
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - "/path/to/your/log/*.log" # 替换为实际日志文件路径
      output.elasticsearch:
        hosts: ["http://<Elasticsearch服务器IP>:9200"] # 直接输出到 Elasticsearch
        # username: "filebeat_internal"  # 如果 Elasticsearch 启用了安全认证,取消注释并配置用户名和密码
        # password: "xxxxxxxxxx"
      
      # output.logstash:  # 如果输出到 Logstash,取消注释并配置 Logstash 地址
      #   hosts: ["<Logstash服务器IP>:5044"]
      • 模块 (Modules) : Filebeat 提供预配置的模块,用于收集和解析特定类型的日志,例如 Apache, Nginx, System 等。 可以简化配置。 可以通过命令 ./filebeat modules enable <module_name> 启用模块。 模块配置在 modules.d/<module_name>.yml 文件中。
  4. 启动 Filebeat : 在 Filebeat 目录下执行命令:

    复制代码
    ./filebeat -e  # 前台启动,方便查看日志
    # ./filebeat -e &  # 后台启动
    • 首次启动前 : 建议执行 ./filebeat setup -e 初始化 Filebeat,例如加载 Kibana dashboards 和 Elasticsearch ingest pipelines (如果使用 Filebeat 模块)。

三、ELK Stack 的基本使用流程

  1. 启动 Elasticsearch, Kibana 和 Logstash (如果使用): 按照上述步骤启动各个组件。
  2. 配置 Logstash 或 Beats: 配置 Logstash Pipeline 或 Beats,定义数据输入、处理和输出规则。
  3. 启动 Logstash 或 Beats: 启动 Logstash 或 Beats 开始数据采集。
  4. 在 Kibana 中探索数据 :
    • 打开 Kibana Web 界面 (http://&lt;服务器IP>:5601)。
    • 配置 Index Pattern (索引模式) : 首次使用 Kibana 需要配置 Index Pattern,告诉 Kibana 哪些 Elasticsearch 索引用于数据可视化。 例如,如果 Logstash 配置中 index 设置为 "web-logs-%{+YYYY.MM.dd}",则 Index Pattern 可以设置为 web-logs-*
    • 使用 Discover: 在 Discover 界面可以查看原始日志数据,进行搜索和过滤。
    • 创建 Visualization: 在 Visualize 界面可以创建各种图表 (例如折线图、柱状图、饼图) 可视化数据。
    • 创建 Dashboard: 在 Dashboard 界面可以将多个 Visualization 组合成仪表板,实时监控数据。

四、ELK Stack 部署架构

  • 单节点架构 : 所有组件 (Elasticsearch, Logstash, Kibana, Beats) 部署在同一台服务器上。 适用于学习、测试或小规模应用场景。

  • 多节点架构 (集群) :

    • Elasticsearch 集群: 生产环境 Elasticsearch 通常采用集群部署,提高性能、可用性和数据容量。 集群由多个 Elasticsearch 节点组成,包括 Master 节点 (集群管理)、Data 节点 (数据存储和检索)、Ingest 节点 (数据预处理)、Coordinating 节点 (请求路由)。

    • Logstash 集群: 对于高吞吐量的数据采集,可以部署 Logstash 集群,提高数据处理能力和负载均衡。

    • Kibana 可以多实例部署: 通过负载均衡器实现高可用。

    • Beats 通常部署在数据源服务器上,可以是成千上万个实例

五、ELK Stack 的优势

  • 开源免费: ELK Stack 全部开源免费,降低了使用成本。
  • 功能强大: 提供全面的数据处理、存储、搜索、分析和可视化能力。
  • 易于扩展: Elasticsearch 的分布式特性使其易于水平扩展,可以处理海量数据。
  • 活跃的社区: Elastic 社区非常活跃,提供丰富的文档、教程和支持。
  • 丰富的插件: Logstash 和 Beats 拥有大量的插件,可以方便地集成各种数据源和输出目的地。
  • 可视化能力: Kibana 提供强大的数据可视化和探索能力,使数据分析更加直观和高效。

ELK Stack 的不足

  • 资源消耗: ELK Stack 尤其是 Elasticsearch 和 Logstash,资源消耗相对较高,需要足够的硬件资源支持。
  • 配置复杂性: 特别是 Logstash 的配置,学习曲线较陡峭,需要一定的学习成本。
  • 安全: 默认情况下,ELK Stack 的安全性配置较为薄弱,生产环境需要进行安全加固。
  • 维护成本: 随着数据规模增长,ELK Stack 集群的维护和调优也需要一定的技术能力和经验。

六、总结

ELK Stack 是一套非常强大的数据处理和分析平台,尤其在日志管理、指标监控和安全分析等领域有着广泛的应用。 掌握 ELK Stack 的安装、部署和使用,对于系统运维、开发人员和数据分析师都非常有价值。 希望以上详细介绍能帮助你更好地理解和使用 ELK Stack。

如果想深入学习,可以参考 Elastic 官方文档:https://www.elastic.co/guide/index.html

相关推荐
修己xj4 小时前
Anki:让记忆更高效、更智能的开源力量
开源
冬奇Lab10 小时前
一天一个开源项目(第17篇):ViMax - 多智能体视频生成框架,导演、编剧、制片人全包
开源·音视频开发
一个处女座的程序猿11 小时前
AI之Agent之VibeCoding:《Vibe Coding Kills Open Source》翻译与解读
人工智能·开源·vibecoding·氛围编程
一只大侠的侠13 小时前
React Native开源鸿蒙跨平台训练营 Day16自定义 useForm 高性能验证
flutter·开源·harmonyos
IvorySQL13 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
一只大侠的侠14 小时前
Flutter开源鸿蒙跨平台训练营 Day11从零开发商品详情页面
flutter·开源·harmonyos
一只大侠的侠14 小时前
React Native开源鸿蒙跨平台训练营 Day18自定义useForm表单管理实战实现
flutter·开源·harmonyos
一只大侠的侠14 小时前
React Native开源鸿蒙跨平台训练营 Day20自定义 useValidator 实现高性能表单验证
flutter·开源·harmonyos
晚霞的不甘15 小时前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
晚霞的不甘16 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频