ELK 栈入门:日志收集与分析的基础配置步骤

核心提要:ELK 栈是 Elasticsearch、Logstash、Kibana 三款工具的组合,核心作用是实现“日志收集→处理→存储→可视化分析”的全流程闭环。本文针对新手,基于 Linux 环境(CentOS 7/Ubuntu 18.04),详细拆解 ELK 栈的基础配置步骤,重点实现“收集系统日志→存储到 Elasticsearch→通过 Kibana 可视化查询”,避开入门常见的环境依赖、配置语法等坑,帮助快速搭建可用的日志分析体系。

先明确核心组件分工(新手必懂):① Elasticsearch:分布式搜索引擎,负责存储日志数据并提供检索能力;② Logstash:日志收集与处理器,负责从目标源(如系统日志、应用日志)采集日志,格式化后发送到 Elasticsearch;③ Kibana:可视化平台,对接 Elasticsearch,通过界面实现日志的查询、统计、图表展示。

一、实操前置准备

1. 环境要求

  • 操作系统:Linux(CentOS 7+/Ubuntu 18.04+,推荐单机测试,内存≥4G,避免内存不足导致组件启动失败);

  • 依赖环境:Java 8/11(ELK 栈核心组件依赖 Java,推荐 Java 11,版本需统一);

  • 网络要求:关闭防火墙(新手测试)或开放核心端口(9200、5601、5044); # Ubuntu 关闭防火墙命令:ufw disable

  • 辅助工具:wget(下载安装包)、vim(编辑配置文件)、浏览器(访问 Kibana 界面); # Ubuntu 安装 wget 命令:apt install wget -y;安装 vim 命令:apt install vim -y

2. 前置依赖安装(Java 环境配置)

方案一:更换有效JDK 11下载源(手动下载部署)

选择国内可用的镜像源或官方有效路径,以下提供清华大学镜像源(稳定可用)的下载命令:

  1. 先删除无效的下载文件(如果有残留)

    rm -f jdk-11.0.15_linux-x64_bin.tar.gz
    1. 使用清华源下载OpenJDK 11(开源免费,功能与Oracle JDK一致)

      # 下载OpenJDK 11.0.20(稳定版本,适配Linux x64)
      wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/11/jdk/x64/linux/OpenJDK11U-jdk_x64_linux_hotspot_11.0.20_8.tar.gz
      1. 若你坚持要Oracle JDK 11,可使用Oracle官网(需要登录,或替换为其他有效镜像):

        # 注意:Oracle JDK 11需登录账号才能下载,建议优先使用OpenJDK
        wget https://download.oracle.com/java/11/latest/jdk-11_linux-x64_bin.tar.gz
        方案二:Ubuntu系统直接通过apt包管理器安装(更简便,推荐)

        Ubuntu系统内置了OpenJDK 11的软件源,无需手动下载解压,一键安装即可:

        1. 更新软件源缓存

          apt update -y
          1. 安装OpenJDK 11 JDK(完整开发环境,包含JRE)

            apt install openjdk-11-jdk -y
            1. 若仅需运行环境(无需开发工具),可安装JRE:

              apt install openjdk-11-jre -y
              后续配置(环境变量设置,验证安装)

              无论使用哪种方案,安装/解压后都需要配置JAVA_HOME环境变量,并验证是否生效:

              1. 方案一(手动解压)的环境变量配置
              1. 创建JDK安装目录

                mkdir -p /usr/local/java
                1. 解压下载的JDK包到该目录(以清华源的OpenJDK为例,文件名请对应你的下载文件)

                  tar -zxvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.20_8.tar.gz -C /usr/local/java/
                  1. 编辑全局环境变量配置文件

                    vi /etc/profile
                    1. 在文件末尾添加以下内容(注意:jdk-11.0.20+8需替换为你解压后的实际目录名)

                      # JAVA_HOME配置
                      export JAVA_HOME=/usr/local/java/OpenJDK11U-jdk_x64_linux_hotspot_11.0.20_8
                      export JRE_HOME=${JAVA_HOME}/jre
                      export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
                      export PATH=${JAVA_HOME}/bin:$PATH
                      1. 使环境变量立即生效

                        source /etc/profile
                        2. 方案二(apt安装)的环境变量配置

                        apt安装后,JDK默认路径为/usr/lib/jvm/java-11-openjdk-amd64/,直接配置即可:

                        1. 编辑全局环境变量

                          vi /etc/profile
                          1. 在文件末尾添加

                            export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
                            export JRE_HOME=${JAVA_HOME}/jre
                            export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
                            export PATH=${JAVA_HOME}/bin:$PATH
                            1. 生效环境变量

                              source /etc/profile
                              3. 验证JDK是否安装成功

                              执行以下命令,若输出JDK版本信息,则说明安装配置成功:

                              # 查看JDK版本
                              java -version
                              # 查看javac版本(验证JDK开发环境,仅JDK有该命令,JRE无)
                              javac -version
                              组件版本选择(关键!避免版本不兼容)

                              ELK 栈各组件版本必须一致(如均选择 8.10.4 稳定版),否则会出现连接失败、数据解析异常等问题。本文选用 8.10.4 版本(2025年主流稳定版,兼容性好)。

                              二、操作步骤

                              步骤 1:安装并配置 Elasticsearch(日志存储核心)

                              1. 下载并解压 Elasticsearch
                              # 1. 创建统一工作目录
                              mkdir -p /opt/elk
                              cd /opt/elk
                              
                              # 2. 下载 Elasticsearch 8.10.4
                              wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-linux-x86_64.tar.gz
                              
                              # 3. 解压并重命名(简化操作)
                              tar -zxvf elasticsearch-8.10.4-linux-x86_64.tar.gz
                              mv elasticsearch-8.10.4 elasticsearch
                              
                              2. 创建专用用户(Elasticsearch 禁止 root 用户启动)
                              # 1. 创建 elk 用户并设置密码
                              useradd elk
                              passwd elk  # 输入密码(如 elk@123456,新手记住简单密码即可)
                              
                              # 2. 授权工作目录给 elk 用户
                              chown -R elk:elk /opt/elk
                              
                              3. 修改 Elasticsearch 核心配置
                              # 1. 切换到 elk 用户
                              su - elk
                              
                              # 2. 编辑配置文件
                              vim /opt/elk/elasticsearch/config/elasticsearch.yml
                              
                              # 3. 核心配置内容(注释掉原有默认配置,添加以下内容)
                              cluster.name: elk-cluster  # 集群名称(自定义,单机也需配置)
                              node.name: node-1  # 节点名称(单机单节点,自定义)
                              network.host: 0.0.0.0  # 绑定所有网卡,允许外部访问
                              http.port: 9200  # 核心端口(默认9200,可自定义)
                              discovery.type: single-node  # 单机模式(新手必设,避免集群发现异常)
                              xpack.security.enabled: false  # 关闭安全验证(新手简化配置,生产环境需开启)
                              action.auto_create_index: .monitoring*,*  # 允许自动创建索引(日志存储需要)
                              4. 启动 Elasticsearch 并验证
                              # 1. 后台启动 Elasticsearch(必须用 elk 用户)
                              cd /opt/elk/elasticsearch/bin
                              nohup ./elasticsearch > /opt/elk/elasticsearch/nohup.out 2>&1 &
                              
                              # 2. 验证启动状态(等待30秒左右,让服务完全启动)
                              # 方法1:查看端口是否占用
                              netstat -tnlp | grep 9200  # 看到 java 进程占用9200即启动成功
                              
                              # 方法2:浏览器/终端访问验证
                              curl http://localhost:9200
                              # 预期输出(包含集群名称、节点名称等信息):
                              {
                                "name" : "node-1",
                                "cluster_name" : "elk-cluster",
                                "cluster_uuid" : "xxxxxxx",
                                "version" : {
                                  "number" : "8.10.4",
                                  ...
                                },
                                "tagline" : "You Know, for Search"
                              }
                              

                              步骤 2:安装并配置 Logstash(日志收集与处理)

                              1. 下载并解压 Logstash
                              # 1. 切换回 root 用户(下载安装包需要权限)
                              su - root
                              
                              # 2. 进入工作目录
                              cd /opt/elk
                              
                              # 3. 下载 Logstash 8.10.4
                              wget https://artifacts.elastic.co/downloads/logstash/logstash-8.10.4-linux-x86_64.tar.gz
                              
                              # 4. 解压并重命名
                              tar -zxvf logstash-8.10.4-linux-x86_64.tar.gz
                              mv logstash-8.10.4 logstash
                              
                              # 5. 授权给 elk 用户
                              chown -R elk:elk /opt/elk/logstash
                              
                              2. 配置 Logstash(收集系统日志→发送到 Elasticsearch)

                              Logstash 核心是“输入(Input)→过滤(Filter)→输出(Output)”的管道配置,本文以收集 Linux 系统日志(/var/log/messages)为例。

                              # 1. 切换到 elk 用户
                              su - elk
                              
                              # 2. 创建自定义配置文件(推荐自定义,避免修改默认配置)
                              vim /opt/elk/logstash/config/system-log.conf
                              
                              # 3. 配置内容(输入+过滤+输出)
                              input {
                                # 输入:收集系统日志 /var/log/messages
                                file {
                                  path => "/var/log/messages"  # 日志文件路径
                                  type => "system-log"  # 日志类型(自定义,便于后续分类)
                                  start_position => "beginning"  # 从文件开头开始收集
                                  stat_interval => 1  # 每秒检查一次文件是否有新日志
                                }
                              }
                              
                              filter {
                                # 过滤:格式化日志(提取时间、主机、日志内容,新手简化配置)
                                grok {
                                  match => { "message" => "%{SYSLOGTIMESTAMP:log_time} %{SYSLOGHOST:host} %{DATA:program}: %{GREEDYDATA:log_content}" }
                                }
                                # 转换时间格式(便于 Elasticsearch 识别)
                                date {
                                  match => [ "log_time", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
                                  target => "@timestamp"
                                }
                              }
                              
                              output {
                                # 输出:发送到 Elasticsearch
                                elasticsearch {
                                  hosts => ["http://localhost:9200"]  # Elasticsearch 地址(与前文配置一致)
                                  index => "system-log-%{+YYYY.MM.dd}"  # 索引名称(按日期拆分,便于管理)
                                }
                                # 输出到终端(调试用,可删除)
                                stdout { codec => rubydebug }
                              }
                              
                              3. 启动 Logstash 并验证
                              # 1. 后台启动 Logstash(用 elk 用户)
                              cd /opt/elk/logstash/bin
                              nohup ./logstash -f /opt/elk/logstash/config/system-log.conf > /opt/elk/logstash/nohup.out 2>&1 &
                              
                              # 2. 验证启动状态
                              # 方法1:查看进程
                              ps -ef | grep logstash  # 看到 logstash 相关进程即启动成功
                              
                              # 方法2:查看 Elasticsearch 索引(确认日志已发送)
                              curl http://localhost:9200/_cat/indices?v
                              # 预期输出:会出现 system-log-当前日期 的索引(如 system-log-2025.08.20)

                              步骤 3:安装并配置 Kibana(日志可视化分析)

                              1. 下载并解压 Kibana
                              # 1. 切换回 root 用户
                              su - root
                              
                              # 2. 进入工作目录
                              cd /opt/elk
                              
                              # 3. 下载 Kibana 8.10.4
                              wget https://artifacts.elastic.co/downloads/kibana/kibana-8.10.4-linux-x86_64.tar.gz
                              
                              # 4. 解压并重命名
                              tar -zxvf kibana-8.10.4-linux-x86_64.tar.gz
                              mv kibana-8.10.4 kibana
                              
                              # 5. 授权给 elk 用户
                              chown -R elk:elk /opt/elk/kibana
                              
                              2. 修改 Kibana 核心配置
                              # 1. 切换到 elk 用户
                              su - elk
                              
                              # 2. 编辑配置文件
                              vim /opt/elk/kibana/config/kibana.yml
                              
                              # 3. 核心配置内容
                              server.port: 5601  # 核心端口(默认5601,浏览器访问用)
                              server.host: "0.0.0.0"  # 绑定所有网卡,允许外部访问
                              elasticsearch.hosts: ["http://localhost:9200"]  # 对接 Elasticsearch(与前文一致)
                              kibana.index: ".kibana"  # Kibana 自身数据存储索引
                              i18n.locale: "zh-CN"  # 中文界面(新手友好,可选)
                              
                              3. 启动 Kibana 并验证
                              # 1. 后台启动 Kibana(用 elk 用户)
                              cd /opt/elk/kibana/bin
                              nohup ./kibana > /opt/elk/kibana/nohup.out 2>&1 &
                              
                              # 2. 验证启动状态(等待60秒左右,服务完全启动)
                              netstat -tnlp | grep 5601  # 看到 node 进程占用5601即启动成功
                              
                              # 3. 浏览器访问验证
                              # 地址:http://服务器IP:5601(如 http://192.168.1.100:5601)
                              # 预期:进入 Kibana 中文登录界面(因前文关闭 Elasticsearch 安全验证,无需登录,直接进入首页)
                              

                              步骤 4:验证日志收集与分析全流程

                              1. 在 Kibana 中创建索引模式(关联 Elasticsearch 日志索引)
                              1. 进入 Kibana 首页,点击左侧导航栏「管理」→「索引模式」→「创建索引模式」;

                              2. 索引模式名称输入「system-log-*」(匹配 Logstash 配置的按日期拆分索引),点击「下一步」;

                              3. 时间字段选择「@timestamp」(Logstash 过滤时设置的时间字段),点击「创建索引模式」;

                              4. 创建成功后,左侧导航栏点击「Discover」,即可看到收集到的系统日志数据。

                              2. 日志查询与分析(新手常用操作)
                              • 简单查询:在搜索框输入关键词(如「error」),可筛选出包含错误信息的日志;

                              • 时间筛选:通过页面顶部的时间选择器(如「最近15分钟」),查看指定时间段的日志;

                              • 字段筛选:在左侧「可用字段」中勾选需要展示的字段(如「host」「log_content」),页面会只显示选中字段;

                              • 日志排序:点击「@timestamp」字段,可按时间正序/倒序排列日志(默认倒序,最新日志在最上方)。

                              三、入门常见坑与解决方案

                              坑 1:Elasticsearch 启动失败,提示“内存不足”原因:Elasticsearch 默认堆内存设置为 1G,若服务器内存≤2G,会启动失败。解决方案:修改 Elasticsearch 堆内存配置:vim /opt/elk/elasticsearch/config/jvm.options将「-Xms1g」「-Xmx1g」改为「-Xms512m」「-Xmx512m」(不超过物理内存的一半),保存后重启 Elasticsearch。

                              坑 2:Logstash 启动失败,提示“权限不足”原因:日志文件(如 /var/log/messages)的读取权限不足,或 Logstash 目录未授权给 elk 用户。解决方案:① 给日志文件添加读取权限:chmod 644 /var/log/messages;② 确保 Logstash 目录归属 elk 用户:chown -R elk:elk /opt/elk/logstash

                              坑 3:Kibana 无法看到日志数据原因:① 索引模式创建错误(未匹配 Logstash 配置的索引名称);② Logstash 未成功发送日志到 Elasticsearch;③ 时间字段选择错误。解决方案:① 检查索引模式名称是否为「system-log-*」;② 用 curl http://localhost:9200/_cat/indices?v 确认「system-log-当前日期」索引存在;③ 重新创建索引模式,确保时间字段选择「@timestamp」。

                              坑 4:浏览器无法访问 Kibana原因:防火墙未开放 5601 端口,或 Kibana 未启动成功。解决方案:① 关闭防火墙(ufw disable);② 用 netstat -tnlp | grep 5601 确认 Kibana 已启动;③ 检查服务器 IP 是否正确,避免网络不通。

                              四、总结与进阶方向

                              1. 核心成果回顾

                              完成了「Logstash 收集系统日志→Elasticsearch 存储日志→Kibana 可视化分析」的 ELK 栈基础闭环,掌握了各组件的核心配置和日志查询的基本操作,可满足入门级日志分析需求。

                              2. 进阶学习方向

                              • 日志类型扩展:收集应用日志(如 Java 应用日志、Python 应用日志)、容器日志(Docker/K8s 日志);

                              • Logstash 进阶:使用 Filebeat 替代 Logstash 收集日志(轻量级,适合分布式环境),Logstash 专注于日志处理;

                              • 可视化进阶:在 Kibana 中创建仪表盘(Dashboard),展示日志统计图表(如错误日志数量趋势、各主机日志分布);

                              • 生产环境优化:开启 Elasticsearch 安全验证、配置集群模式提高可用性、日志索引生命周期管理(自动删除过期日志)。

                              posted @ 2026-01-01 22:21  szjmc  阅读(2)  评论(0)    收藏  举报  来源