ELK 企业级日志分析系统完整部署手册

前言

在企业运维场景中,服务器、应用、安全日志分散存储,传统grep/awk命令检索效率低下,ELK Stack 是目前主流的开源日志集中化管理方案,可实现日志采集、清洗、存储、检索、可视化全流程管理,广泛用于运维监控、故障排查、安全审计、业务分析等场景。

本手册基于CentOS 7.9 + ELK 7.10.0 完整部署,包含全部命令、配置文件、关键知识点与排错方案。


一、ELK 核心组件与架构

1.1 组件定义

  • Elasticsearch(ES) :分布式搜索引擎,负责日志存储、索引、检索,支持集群高可用与水平扩展。
  • Logstash :数据处理管道,负责日志采集、过滤、格式化、转发
  • Kibana:可视化平台,提供 Web 界面,用于日志查询、图表展示、报表生成。
  • Filebeat:轻量级日志采集器,部署在业务服务器,低资源占用采集日志并发送给 Logstash/ES。

1.2 工作流程

  1. Filebeat 采集业务服务器日志 → 发送至 Logstash
  2. Logstash 清洗格式化日志 → 输出至 Elasticsearch
  3. Elasticsearch 建立索引存储 → 提供检索能力
  4. Kibana 对接 Elasticsearch → 可视化展示日志

1.3 补充知识点

  1. ELK 版本必须一致:避免组件兼容问题,本手册统一使用 7.10.0。
  2. ES 集群节点数建议奇数:防止脑裂问题,提升选举稳定性。
  3. Logstash 依赖 JDK:运行在 JVM 上,建议使用 JDK 11。
  4. Filebeat 替代 Logstash Agent:Logstash 耗资源,生产环境用 Filebeat 做前端采集。

二、实验环境规划

2.1 主机清单

表格

主机名 IP 地址 系统版本 部署组件
web01 192.168.10.101 CentOS 7.9 httpd、Filebeat
logstash 192.168.10.102 CentOS 7.9 JDK 11、Logstash
elk1 192.168.10.103 CentOS 7.9 JDK 11、ES、Kibana
elk2 192.168.10.104 CentOS 7.9 JDK 11、ES

2.2 基础环境配置(所有节点执行)

bash

运行

复制代码
# 1. 设置主机名
hostnamectl set-hostname 主机名
bash

# 2. 配置hosts解析
cat <<EOF>>/etc/hosts
192.168.10.101 web01
192.168.10.102 logstash
192.168.10.103 elk1
192.168.10.104 elk2
EOF

# 3. 关闭防火墙与SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

# 4. 系统优化参数
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
sysctl -p

三、Elasticsearch 集群部署

3.1 ES 节点前置配置(elk1、elk2 执行)

bash

运行

复制代码
# 1. 创建专用用户(ES禁止root启动)
useradd es
echo "es123" | passwd --stdin es
gpasswd -a es wheel

# 2. 配置sudo免密
sed -i '/%wheel/s/^#//' /etc/sudoers

# 3. 安装JDK 11
sudo yum -y install java-11-openjdk java-11-openjdk-devel
java -version

3.2 安装与配置 Elasticsearch(elk1 节点)

bash

运行

复制代码
# 1. 解压安装
su - es
cd /opt
sudo tar zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz
sudo mv elasticsearch-7.10.0 /etc/elasticsearch

# 2. JVM内存配置(建议物理内存50%)
sudo vim /etc/elasticsearch/config/jvm.options
-Xms2g
-Xmx2g

# 3. 主配置文件
sudo vim /etc/elasticsearch/config/elasticsearch.yml
cluster.name: my-es-cluster
node.name: elk1
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["elk1","elk2"]
cluster.initial_master_nodes: ["elk1"]
http.cors.enabled: true
http.cors.allow-origin: "*"

# 4. 创建数据目录并授权
sudo mkdir -p /data/es/{data,logs}
sudo chown -R es:es /data/es
sudo chown -R es:es /etc/elasticsearch

# 5. 后台启动ES
/etc/elasticsearch/bin/elasticsearch &

3.3 elk2 节点 ES 配置

bash

运行

复制代码
# 重复3.2步骤,仅修改node.name
sudo vim /etc/elasticsearch/config/elasticsearch.yml
cluster.name: my-es-cluster
node.name: elk2
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["elk1","elk2"]
cluster.initial_master_nodes: ["elk1"]
http.cors.enabled: true
http.cors.allow-origin: "*"

# 启动ES
/etc/elasticsearch/bin/elasticsearch &

3.4 集群验证

bash

运行

复制代码
# 查看端口
netstat -anpt | grep 9200

# 查看集群节点(*为master节点)
curl http://192.168.10.103:9200/_cat/nodes

3.5 补充知识点

  1. bootstrap.memory_lock:锁定物理内存,禁用 swap 交换,提升 ES 性能。
  2. discovery.seed_hosts:集群发现节点列表,必须包含所有 ES 节点。
  3. 分片与副本:ES 7.x 默认 1 主分片 1 副本,副本不能与主分片同节点。
  4. 常见报错:max file descriptors 太低 → 调整 limits.conf。

四、Logstash 部署(192.168.10.102)

4.1 安装 Logstash

bash

运行

复制代码
# 1. 安装JDK
yum -y install java-11-openjdk java-11-openjdk-devel

# 2. 解压安装
cd /opt
tar zxvf logstash-7.10.0-linux-x86_64.tar.gz
mv logstash-7.10.0 /etc/logstash
chmod -R 777 /etc/logstash/data

4.2 功能测试

bash

运行

复制代码
# 标准输入→标准输出测试
/etc/logstash/bin/logstash -e 'input { stdin { } } output { stdout {codec => rubydebug} }'
# 输入内容,查看格式化输出,Ctrl+C退出

4.3 配置 1:采集本机系统日志

bash

运行

复制代码
# 授权日志读取权限
chmod o+r /var/log/messages

# 创建配置文件
vim /etc/logstash/config/system_log.conf
input {
  file {
    path => "/var/log/messages"
    type => "system-log"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["192.168.10.103:9200"]
    index => "system-log-%{+YYYY.MM.dd}"
  }
}

# 后台启动
/etc/logstash/bin/logstash -f /etc/logstash/config/system_log.conf &

4.4 补充知识点

  1. start_positionbeginning从头采集,end从最新日志采集。
  2. codec => rubydebug:标准输出格式化,便于调试。
  3. index 命名:按日期分割索引,便于管理与清理。

五、Filebeat 部署(web01:192.168.10.101)

5.1 安装 httpd 模拟业务日志

bash

运行

复制代码
yum -y install httpd
systemctl start httpd
echo "ELK Test Page" > /var/www/html/index.html
curl 127.0.0.1

5.2 安装配置 Filebeat

bash

运行

复制代码
cd /opt
tar zxvf filebeat-7.10.0-linux-x86_64.tar.gz
mv filebeat-7.10.0-linux-x86_64 /etc/filebeat

# 备份默认配置
mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak

# 新建配置
vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/httpd/access_log
    - /var/log/httpd/error_log

output.logstash:
  hosts: ["192.168.10.102:5044"]

# 后台启动
/etc/filebeat/filebeat -c /etc/filebeat/filebeat.yml &

5.3 Logstash 对接 Filebeat

bash

运行

复制代码
vim /etc/logstash/config/beats_log.conf
input {
  beats {
    port => 5044
    codec => "json"
  }
}

output {
  elasticsearch {
    hosts => ["192.168.10.103:9200"]
    index => "web-log-%{+YYYY.MM.dd}"
  }
}

# 启动(指定独立data目录,支持多实例)
/etc/logstash/bin/logstash -f /etc/logstash/config/beats_log.conf --path.data=/etc/logstash/data/web &

5.4 补充知识点

  1. Filebeat 优势:轻量、占用 CPU / 内存极低,适合大规模部署。
  2. 5044 端口:Logstash 默认监听 Beats 输入端口。
  3. codec => json:自动解析 JSON 格式日志,无需额外过滤。

六、Kibana 部署(elk1:192.168.10.103)

6.1 安装配置 Kibana

bash

运行

复制代码
su - es
cd /opt
sudo tar zxvf kibana-7.10.0-linux-x86_64.tar.gz
sudo mv kibana-7.10.0-linux-x86_64 /etc/kibana
sudo chown -R es:es /etc/kibana

# 修改配置
sudo vim /etc/kibana/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.10.103:9200"]
i18n.locale: "zh-CN"

# 后台启动
/etc/kibana/bin/kibana &

6.2 Web 界面使用

  1. 访问:http://192.168.10.103:5601
  2. 创建索引模式:Stack Management → Index Patterns → Create index pattern
  3. 日志查询:Discover 选择索引模式,查看实时日志
  4. 可视化:Visualize 创建图表,Dashboard 组合报表

6.3 补充知识点

  1. i18n.locale: zh-CN:开启中文界面,降低使用门槛。
  2. 索引模式:Kibana 必须创建索引模式才能读取 ES 数据。
  3. KQL 查询语法response:200 AND clientip:192.168.* 精准检索日志。

七、常用运维命令

7.1 Elasticsearch 常用命令

bash

运行

复制代码
# 查看所有索引
curl http://192.168.10.103:9200/_cat/indices?v

# 删除指定索引
curl -X DELETE http://192.168.10.103:9200/system-log-2026.04.27

# 查看集群健康状态
curl http://192.168.10.103:9200/_cluster/health?pretty

7.2 进程管理

bash

运行

复制代码
# 查看进程
ps -ef | grep elasticsearch
ps -ef | grep logstash
ps -ef | grep filebeat
ps -ef | grep kibana

# 杀死进程
kill -9 进程ID

八、常见问题排错

  1. ES 启动失败
    • 原因:root 用户启动、内存不足、系统参数未优化。
    • 解决:使用 es 用户启动,调整 JVM 内存,重新配置 limits.conf。
  2. Logstash 无法接收 Filebeat 日志
    • 原因:5044 端口未监听、防火墙拦截、配置文件错误。
    • 解决:netstat 检查端口,关闭防火墙,核对 hosts 配置。
  3. Kibana 无法连接 ES
    • 原因:elasticsearch.hosts 配置错误、ES 未启动。
    • 解决:核对 ES 地址,重启 ES 服务。
  4. 日志不显示
    • 原因:索引未创建、日志未生成、索引模式错误。
    • 解决:访问业务服务生成新日志,重新创建索引模式。

九、生产环境优化建议

  1. ES 集群扩容:3 节点起步,分离 master、data、coordinating 节点。
  2. 日志清理:配置索引生命周期策略,自动删除 7 天前日志。
  3. 安全加固:开启 ES 认证、HTTPS、限制 IP 访问。
  4. 资源配置:ES 内存不超过 32G,Logstash 单机不超过 4 实例。
相关推荐
Mr_pyx1 天前
微服务可观测性实战:分布式链路追踪从入门到精通
wpf
c#上位机2 天前
wpf附加事件
wpf
玖笙&2 天前
✨WPF编程进阶【9.1】:WPF资源完全指南(附源码)
c++·c#·wpf·visual studio
想你依然心痛2 天前
HarmonyOS 6(API 23)分布式实战:基于悬浮导航与沉浸光感的“光影协创“跨设备白板系统
分布式·wpf·harmonyos·悬浮导航·沉浸光感
m0_737539374 天前
ELK企业日志分析系统
elk
c#上位机4 天前
wpf路由事件
wpf
LSL666_4 天前
快速Spring Cloud+ELK+AOP搭建一个简单的项目
spring·elk·spring cloud
nashane4 天前
HarmonyOS 鸿蒙 2026 全栈实战:从手势驱动到分布式数据落地的完整架构
wpf·harmony app
秋雨雁南飞4 天前
WPF 国际化(全球化)管理
wpf