ELK 企业日志分析系统核心
一、ELK 基础认知
ELK 是Elasticsearch、Logstash、Kibana三大开源工具组成的集中式日志分析平台,用于解决分散日志收集、检索、统计、可视化难题,适用于日志分析、APM、安全监控、业务指标分析等场景。
ELK工作原理展示图:
【APPServer集群】→→【logstash Agent 采集器】→→【ElasticSearch Cluster】→→【KibanaServer】→→【Browser】
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
简单来说,进行日志处理分析,一般需要经过以下几个步骤:
- 将日志进行集中化管理(beats)
- 将日志格式化(logstash)
- 对格式化后的数据进行索引和存储(elasticsearch)
- 前端数据的展示(kibana)
二、三大组件核心作用
-
Elasticsearch(ES)
- 定位:分布式搜索引擎,负责存储、索引、高速检索、聚合分析日志数据
- 特点:分布式高可用、毫秒级实时搜索、倒排索引、RESTful API、强大聚合能力
-
Logstash
- 定位:数据处理管道,负责收集、过滤、格式化、转发日志
- 流程:Input(采集)→ Filter(解析 / 清洗)→ Output(输出)
- 轻量替代:Beats(Filebeat/Metricbeat),资源占用更低
-
Kibana
- 定位:可视化平台,提供 Web 界面做数据查询、图表展示、仪表盘、集群管理
三、核心工作流程
日志源 → Logstash/Beats(采集处理) → Elasticsearch(存储索引) → Kibana(可视化分析)
四、实验环境与部署步骤
1. 实验拓扑

- 2 台 ES 节点(node1/192.168.108.41、node2/192.168.108.42):部署 ES+head 插件,node1 额外装 Kibana
- 1 台 Apache 节点(192.168.108.43):部署 Apache+Logstash,采集系统与 Web 日志
- 系统:CentOS 7.9,依赖 JDK 1.8

2. 部署关键步骤
-
ES 集群部署
- 配置 hosts、JDK、数据目录权限
- 修改 elasticsearch.yml:集群名、节点名、网络绑定、单播发现
- 启动服务,验证集群健康状态(green 为正常)
bash# 最底下加2行 [root@node1 ~]# vi /etc/hosts 192.168.108.41 node1 192.168.108.42 node2 node2 [root@node1 ~]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode) [root@node2 ~]# vim /etc/hosts 192.168.108.41 node1 192.168.108.42 node2 [root@node2 ~]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode) #安装elasticsearch rpm包,上传elasticsearch-5.5.0.rpm到/opt目录下 [root@node1 ~]# cd /opt [root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm #加载系统服务 [root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch.service #更改elasticsearch主配置文件 [root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak [root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 17 cluster.name: my-elk-cluster #集群名字 23 node #节点名字 33 path.data: /data/elk_data #数据存放路径 37 path.logs: /var/log/elasticsearch/ #日志存放路径 43 bootstrap.memory_lock: false #不在启动的时候锁定内存:锁定物理内存 地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高。 55 network.host: 0 #提供服务绑定的IP地址,0.0.0.0代表 所有地址 59 http.port: 9200 #侦听端口为9200 68 discovery.zen.ping.unicast.hosts: ["node1", "node2" #集群发现通过单播实现 #创建数据存放路径并授权 [root@node1 opt]# mkdir -p /data/elk_data [root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/ #启动elasticsearch是否成功开启 [root@node1 elasticsearch]# systemctl start elasticsearch.service [root@node1 elasticsearch]# netstat -antp |grep 9200 tcp6 0 0 LISTEN 64463/java查看节点信息 用真机192.168.108.1 的浏览器打开 http://192.168.108.41:9200 有文件打开 下面 是节点的信息
bash{ "name" : "node1", "cluster_name" : "my-elk-cluster", "cluster_uuid" : "KnVmyqgIRVqNtWVbic3Jbw", "version" : { "number" : "5.5.0", "build_hash" : "260387d", "build_date" : "2017-06-30T23:16:05.735Z", "build_snapshot" : false, "lucene_version" : "6.6.0" }, "tagline" : "You Know, for Search"
-
ES-head 插件安装
- 依赖 Node.js、PhantomJS,开启 ES 跨域,通过 9100 端口可视化管理集群
-
Logstash 部署
- 安装后配置 Input(系统日志 / Apache 日志)、Output(输出到 ES)
- 按日志类型分索引(system-、apache_access-、apache_error-*)
bash[root@apache ~]# cd /opt [root@apache opt]# rpm -ivh logstash-5.5.1.rpm # 安装logstash [root@apache opt]# systemctl start logstash.service # 启动logstash [root@apache opt]# systemctl enable logstash.service [root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ #建立logstash软连接
-
Kibana 部署
- 配置 ES 地址,监听 5601 端口
- 创建索引模式,在 Discover 查看结构化日志,制作可视化图表
bash[root@node1 ~]# cd /usr/local/src/ [root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm [root@node1 src]# cd /etc/kibana/ [root@node1 kibana]# cp kibana.yml kibana.yml.bak [root@node1 kibana]# vim kibana.yml 2 server.port: 5601 # kibana打开的端口 7 server.host: "0.0.0.0" #kibana侦听的地址 21 elasticsearch.url: "http://192.168.108.41:9200" #和elasticsearch建 立联系 30 kibana.index: ".kibana" #在elasticsearch中 添加.kibana索引 [root@node1 kibana]# systemctl start kibana.service # 启动kibana服务 [root@node1 kibana]# systemctl enable kibana.service # 开机启动kibana服务

bash
[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# touch apache_log.conf
[root@apache conf.d]# vim apache_log.conf
input {
file{
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.108.41:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.108.41:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf

五、核心功能与价值
- 集中管理分散服务器日志,替代手动 grep 检索
- 实时解析、存储、查询海量日志
- 可视化展示系统状态、Web 访问 / 错误日志