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
  2. 使用清华源下载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
  3. 若你坚持要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
  2. 安装OpenJDK 11 JDK(完整开发环境,包含JRE)

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

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

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

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

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

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

    复制代码
    vi /etc/profile
  4. 在文件末尾添加以下内容(注意: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
  5. 使环境变量立即生效

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

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

  1. 编辑全局环境变量

    复制代码
    vi /etc/profile
  2. 在文件末尾添加

    复制代码
    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
  3. 生效环境变量

    复制代码
    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 安全验证、配置集群模式提高可用性、日志索引生命周期管理(自动删除过期日志)。

相关推荐
eight *1 天前
docker部署elk+filebeat日志收集分析系统
elk·docker·容器
Familyism1 天前
ELK 全链路核心知识
elk
oMcLin1 天前
如何在 Linux 服务器上部署 ELK 日志分析系统(技术深度详解)
linux·服务器·elk
Elastic 中国社区官方博客2 天前
使用 Elasticsearch 中的结构化输出创建可靠的 agents
大数据·人工智能·elk·elasticsearch·搜索引擎·ai·全文检索
时空无限2 天前
EFK 中使用 ruby 和 javascript 脚本去掉日志中颜色字符详解
linux·javascript·elk·ruby
随风语6 天前
ELK日志分析
elk·elasticsearch
阎*水6 天前
ELK 企业日志分析系统总结
elk
-dcr7 天前
47.ELK企业日志分析系统
elk
Elastic 中国社区官方博客7 天前
Elasticsearch:圣诞晚餐 BBQ
大数据·人工智能·elk·elasticsearch·搜索引擎·ai·全文检索