ELK企业级日志分析系统详解:从入门到部署实践
文章目录
- 前言
- 一、ELK概述
- 1.1 什么是ELK
- 1.2 各组件角色
- 1.3 简单理解
- 二、Elasticsearch介绍
- 2.1 基本概念
- 2.2 核心功能
- 2.3 架构与组件
- 2.4 使用场景
- 2.5 Elasticsearch特点与缺点
- 三、Logstash介绍
- 3.1 概述
- 3.2 主要特点
- 3.3 使用场景
- 3.4 数据处理流程
- 3.5 其他数据收集组件
- 3.5.1 Filebeat
- 3.5.2 Fluentd
- 四、Kibana介绍
- 4.1 概述
- 4.2 主要功能
- 4.3 使用场景
- 4.4 Kibana的工作原理
- 五、为什么要使用ELK
- 六、完整日志系统基本特征
- 七、ELK的工作原理(重点)
- 八、部署ELK日志分析系统
- 8.1 环境准备
- 8.1.1 基础环境配置
- 8.2 Elasticsearch集群部署
- 8.2.1 安装Elasticsearch
- 8.2.2 安装Elasticsearch-head插件
- 8.3 Logstash部署
- 8.4 Kibana部署
- 九、Filebeat+ELK部署
- 9.1 环境规划
- 9.1.1 在Filebeat节点上操作
- 总结
前言
在当今大数据时代,日志数据已成为企业运维和业务分析的重要资产。然而,面对分布式系统中海量、分散的日志信息,传统的grep、awk等命令行工具已力不从心。
ELK Stack作为一套完整的日志集中处理解决方案,应运而生。本文将全面介绍ELK企业级日志分析系统,从基础概念到实战部署,帮助您系统掌握这一强大工具。
一、ELK概述
1.1 什么是ELK
ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kibana三个开源工具配合使用,满足更强大的用户对日志的查询、排序、统计需求。
ELK是Elasticsearch、Logstash、Kibana的缩写,这三个工具组合在一起,用于数据收集、存储、搜索和可视化分析。
1.2 各组件角色
- Elasticsearch:核心搜索和分析引擎,负责存储数据并提供快速的全文搜索和分析功能
- Logstash:数据收集和处理管道,能够从各种来源(如日志文件、数据库)收集数据,并进行过滤和转换,然后将其发送到Elasticsearch
- Kibana:数据可视化工具,提供图形界面来展示和分析存储在Elasticsearch中的数据
1.3 简单理解
ELK Stack是一个一体化的工具包,帮助用户从多个数据源中收集数据、存储并进行快速搜索、分析和可视化,适合于日志分析、监控、数据可视化等场景。
二、Elasticsearch介绍
2.1 基本概念
ElasticSearch是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。它用Java开发,可通过RESTful Web接口让用户通过浏览器与Elasticsearch通信。
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。
2.2 核心功能
- 全文搜索:能够对文本数据进行快速的
全文索引和搜索
,是实现复杂搜索功能的理想工具 - 实时数据分析:支持实时的数据更新和查询,适合用于日志分析、监控数据的实时处理
- 分布式架构:基于分布式架构设计,支持跨集群的数据存储和检索,在扩展性和性能上具有很大优势
- RESTful API:使用简单的HTTP接口,支持通过各种语言和平台进行集成
2.3 架构与组件
- 集群(Cluster):一个或多个Elasticsearch节点组成一个集群,集群中的所有节点协同工作,共享数据和负载
- 节点(Node):运行Elasticsearch的单个实例,节点可以有不同的角色(如主节点、数据节点等),负责存储数据和处理查询
- 索引(Index):类似于传统数据库中的一个表,包含了一个数据集。每个索引都有唯一的名称,用于引用其中的文档。
- 文档(Document):最小数据单元,每个文档是一个JSON格式的对象,存储在索引中
- 分片(Shard):每个索引可以被分割为多个分片,每个分片是一个Lucene索引。分片提供了数据的分布和并行处理能力,确保系统的高可用性和可扩展性。
- 副本(Replica):每个分片都可以有一个或多个副本,用于数据冗余和提高系统的容错能力
2.4 使用场景
- 日志和事件数据分析:处理大规模的日志、事件流数据,提供实时的查询和分析能力
- 全文搜索应用:如电子商务网站中的产品搜索,社交媒体平台的用户内容搜索
- 监控和报警系统:与Kibana等工具结合,提供数据的可视化和实时监控功能
- 商业智能(BI):支持复杂数据查询和分析,帮助企业从数据中获取洞察
2.5 Elasticsearch特点与缺点
优点:
- 高性能:得益于Lucene的底层支持,在处理全文搜索和分析操作时性能非常优越
- 易扩展:分布式架构设计使得集群可以随着数据量的增长而轻松扩展
- 灵活性强:支持多种数据类型和复杂查询语法,可以适应各种不同的应用需求
- 开放源代码:免费且活跃的社区支持,用户可以自由定制和扩展
缺点:
- 资源消耗:作为内存密集型应用,对硬件资源的要求较高
- 学习曲线:虽然Elasticsearch易于集成,但对于新手来说,理解其复杂的查询DSL(Domain Specific Language)和架构可能需要一些时间
- 管理复杂性:在大型分布式集群环境中,管理和调优需要相当的专业知识
nodejs 安装包:https://nodejs.org/en/download
三、Logstash介绍
3.1 概述
Logstash作为数据收集引擎,支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后将处理后的数据发送到存储或分析系统。
Logstash由Ruby语言编写,运行在Java虚拟机(JVM)上,是一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出。具有强大的插件功能,常用于日志处理。
3.2 主要特点
-
数据收集:
- 能够从多种数据源(如日志文件、数据库、消息队列等)收集数据
- 支持各种输入插件,帮助从不同的系统或服务中提取数据
-
数据处理:
- 使用
过滤
器插件处理数据,可以对数据进行清洗
、格式转换
、字段解析等操作 - 支持丰富的数据处理操作,如正则表达式解析、日期转换、字段拆分和合并
- 使用
-
数据输出:
- 处理后的数据可以发送到多种输出目标,如Elasticsearch、关系型数据库、消息队列等
- 输出插件的灵活性使得Logstash能够与各种系统集成
-
可扩展性:
- 架构允许通过插件轻松扩展和自定义,包括输入、过滤器、输出和编码插件
-
实时处理:
- 支持实时数据处理,适用于需要快速数据流的场景
3.3 使用场景
- 日志收集和分析:从各种日志文件中提取数据,然后将数据发送到Elasticsearch进行集中化分析
- 数据转换:在数据进入目标存储之前,进行清理、格式化和标准化处理
- 数据流整合:从多种来源获取数据,汇聚到统一的平台进行分析和决策支持
3.4 数据处理流程
input(数据采集)→ filter(数据过滤)→ output(数据输出)
3.5 其他数据收集组件
3.5.1 Filebeat
轻量级的开源日志文件数据搜集器。通常在客户端安装Filebeat,并指定目录与日志格式,Filebeat能快速收集数据,并发送给logstash或直接发给Elasticsearch存储。性能上相比运行于JVM上的logstash优势明显,是对它的替代。常应用于EFLK架构中。
filebeat结合logstash带来好处:
- 通过Logstash具有基于磁盘的自适应缓冲系统,将吸收传入的吞吐量,减轻Elasticsearch持续写入数据的压力
- 从其他数据源(如数据库、S3对象存储或消息队列)中提取
- 将数据发送到多个目的地,如S3、HDFS或写入文件
- 使用条件数据流逻辑组成更复杂的处理管道
缓存/消息队列(redis、kafka、RabbitMQ等):可以对高并发日志数据进行流量削峰和缓冲,保护数据不丢失,还可以对整个架构进行应用解耦。
3.5.2 Fluentd
一个流行的开源数据收集器。由于logstash太重量级的缺点,随后就有Fluentd的出现。相比较logstash,Fluentd更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,常应用于EFK架构中。在Kubernetes集群中也常使用EFK作为日志数据收集的方案。
在Kubernetes集群中一般通过DaemonSet运行Fluentd,以便在每个工作节点上都可以运行一个Pod。它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到Elasticsearch集群进行索引和存储。
四、Kibana介绍
4.1 概述
Kibana通常与Elasticsearch一起部署,是Elasticsearch的一个功能强大的数据可视化Dashboard,提供图形化的web界面来浏览Elasticsearch日志数据,可以用来汇总、分析和搜索重要数据。它提供了交互式仪表盘、图表和报告功能,用于更好地理解数据。
4.2 主要功能
-
数据可视化(Visualizations):
- 提供丰富的可视化工具,可以通过折线图、饼图、柱状图、地图等方式展示数据
- 用户可以根据需求自定义图表样式,更好地分析和解读数据
- 支持创建动态可视化,根据过滤器和时间范围即时更新显示内容
-
仪表板(Dashboards):
- 用来展示多个可视化图表的集合,可以通过仪表板同时监控多个数据来源或系统状态
- 支持交互式过滤器,用户可以在不同时间范围、不同条件下实时查看数据
-
日志管理和搜索(Log Management & Discovery):
- "Discovery"功能提供了对Elasticsearch中存储的原始数据的实时搜索与过滤功能
- 用户可以根据条件快速查询和检索日志,使用强大的过滤器和查询语言精准获取所需信息
-
时间序列分析(Time Series Analytics):
- 使用"TSVB"(Time Series Visual Builder),用户可以进行复杂的时间序列分析
- 支持创建基于时间的数据图表,常用于监控系统性能、用户活动趋势
-
报警与监控(Alerts & Monitoring):
- 通过与Elasticsearch和Logstash的集成提供数据监控、报警通知功能
- 用户可以设置阈值,当数据达到某个条件时,自动触发报警并发送通知
-
安全和访问控制(Security & Access Control):
- 提供基于角色的访问控制,管理员可以根据用户角色设置权限
- 支持与外部认证系统(如LDAP、OAuth)集成
-
机器学习(Machine Learning):
- 提供了与Elastic Stack的机器学习功能集成,用户可以对数据进行异常检测、趋势预测
- 可以通过无监督的机器学习算法自动检测数据中的异常行为
-
地图和地理可视化(Maps & Geospatial Visualization):
- 提供了强大的地理数据可视化功能,通过Elastic Maps显示地理数据、绘制地图
- 支持动态过滤和聚合地理数据,适用于位置数据分析、物流等领域
-
Canvas和报告(Canvas & Reporting):
- Canvas:允许用户创建高度自定义的、视觉吸引力强的报告和展示
- Reporting:支持自动生成报告,可以通过预定义模板或自定义的方式导出PDF、CSV报告
-
监控(Monitoring):
- 提供Elastic Stack组件的监控功能,帮助用户监控集群健康状况、性能和资源使用情况
4.3 使用场景
-
日志管理与分析:
- 对大量的日志数据进行集中管理与分析,帮助开发者、运维工程师及时发现系统故障
-
实时监控:
- 运用仪表板和报警功能,对系统的性能和服务进行实时监控,异常时及时采取行动
-
业务数据分析:
- 用于对商业数据(如销售数据、用户行为数据)进行深度分析,帮助企业决策
-
安全分析与威胁检测:
- 通过集成Elastic Security,用来检测网络中的安全威胁,分析安全日志,进行入侵检测
-
机器学习与数据预测:
- Kibana 提供的机器学习功能可用于自动化的数据预测、趋势识别和异常检测,适用于金融预测、系统监控等场景。
4.4 Kibana的工作原理
-
数据存储在Elasticsearch中:
- Kibana本身不存储数据,而是通过Elasticsearch查询和检索存储的数据
- 数据可以从不同来源(如 Logstash、Beats、API 等)存储到 Elasticsearch 中
-
查询和分析:
- 用户在Kibana中执行查询时,Kibana会向Elasticsearch发送查询请求。
- 查询可以使用 Kibana Query Language (KQL) 或 Lucene 查询语法。
-
数据可视化和展示:
- 查询结果返回后,Kibana会通过各种可视化工具展示数据,帮助用户快速理解和分析
五、为什么要使用ELK
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
往往单台机器的日志使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果管理数十上百台服务器,使用依次登录每台机器的传统方法查阅日志,会感觉繁琐和效率低下。当务之急是使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免力不从心。
一般大型系统是分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
六、完整日志系统基本特征
- 收集:能够采集多种来源的日志数据
- 传输:能够稳定的把日志数据解析过滤并传输到存储系统
- 存储:存储日志数据
- 分析:支持UI分析
- 警告:能够提供错误报告,监控机制
七、ELK的工作原理(重点)
- 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
- Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
- Elasticsearch 对格式化后的数据进行索引和存储。
- Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
八、部署ELK日志分析系统
8.1 环境准备
部署环境ELK
配置与名称 | IP | 服务 |
---|---|---|
Node1节点(2C/4G) | node1/192.168.10.14 | Elasticsearch(集群) Kibana |
Node2节点(2C/4G) | node2/192.168.10.15 | Elasticsearch(集群) |
Apache节点 | apache/192.168.10.16 | Logstash Apache |
官方网站(中文) :https://www.elastic.co/cn/downloads/
8.1.1 基础环境配置
1、关闭防火墙与增强功能
systectl stop firewalld #关闭防火墙
setenforce 0 #关闭增强功能
2、更改主机名、配置域名解析、查看Java环境
Node1节点:hostnamectl set-hostname node1
Node2节点:hostnamectl set-hostname node2
Logstash节点:hostnamectl set-hostname logstash
3、主机名与IP解析
vim /etc/hosts
192.168.10.14 node1
192.168.10.15 node2
192.168.10.16 logstash
4、java安装
注:版本问题
java -version #如果没有安装,yum -y install java
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
8.2 Elasticsearch集群部署
(在Node1、Node2节点上操作)
8.2.1 安装Elasticsearch
1、部署Elasticsearch软件
(1)安装elasticsearch—rpm包
#上传elasticsearch-6.6.1.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-6.6.1.rpm
(2)加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
(3)修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字(非集群不需要取消注释)
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点node1、node2(单节点这里不需要)
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
================================================================
# 注意修改node.name
sed -i \-e 's|#cluster.name.*|cluster.name: my-elk-cluster|' \-e 's|#node.name.*|node.name: node1|' \-e 's|path.data.*|path.data: /data/elk_data|' \-e 's|path.logs.*|path.logs: /var/log/elasticsearch|' \-e 's|#bootstrap.memory_lock.*|bootstrap.memory_lock: false|' \-e 's|#network.host.*|network.host: 0.0.0.0|' \-e 's|#http.port.*|http.port: 9200|' \-e 's|#discovery.zen.ping.unicast.hosts.*|discovery.zen.ping.unicast.hosts: \["node1", "node2"\]|' \/etc/elasticsearch/elasticsearch.yml
================================================================
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
(4)创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
(5)启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200
(6)查看节点信息
浏览器访问http://192.168.10.14:9200、http://192.168.10.15:9200查看节点Node1、Node2的信息。浏览器访问http://192.168.10.14:9200/_cluster/health?pretty、http://192.168.10.15:9200/_cluster/health?pretty查看群集的健康情况,可以看到status值为green(绿色),表示节点健康运行。绿色:健康 数据和副本全都没有问题
红色:数据都不完整
黄色:数据完整,但副本有问题浏览器访问http://192.168.10.14:9200/_cluster/state?pretty检查群集状态信息。
8.2.2 安装Elasticsearch-head插件
使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
Elasticsearch在5.0版本后,Elasticsearch-head插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装Elasticsearch-head需要提前安装好依赖软件node和phantomjs:
- node:是一个基于Chrome V8引擎的JavaScript运行环境。
- phantomjs:是一个基于webkit的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。
(1)编译安装node
yum install gcc gcc-c++ make -y
#上传软件包node-v8.2.1.tar.gz到/opt V10~V16
cd /opt
tar zxvf node-v8.2.1.tar.gzcd node-v8.2.1/
./configure
make -j2 && make install
(2)安装phantomjs(前端的框架)
#上传软件包phantomjs-2.1.1-linux-x86_64.tar.bz2到/opt
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
(3)安装Elasticsearch-head数据可视化工具
#上传软件包elasticsearch-head.tar.gz到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
(4)修改Elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持,默认为false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有systemctl restart elasticsearch
(5)启动elasticsearch-head服务
#必须在解压后的elasticsearch-head目录下启动服务,进程会读取该目录下的gruntfile.js文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt serverRunning "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100#elasticsearch-head监听的端口是9100
netstat -natp |grep 9100
(6)通过Elasticsearch-head查看Elasticsearch信息
通过浏览器访问http://192.168.10.14:9100/地址并连接群集。如果看到群集健康值为green绿色,代表群集很健康。
(7)插入索引
#通过命令插入一个测试索引,索引为index-demo,类型为test。curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
# 输出结果如下:
{"_index" : "index-demo1","_type" : "test","_id" : "1","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1
}浏览器访问http://192.168.10.14:9100/查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击"数据浏览",会发现在node1上创建的索引为index-demo,类型为test的相关信息。
8.3 Logstash部署
(在Logstash节点上操作)
Logstash一般部署在需要监控其日志的服务器。在本案例中,Logstash部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elasticsearch。
1.更改主机名
# hostnamectl set-hostname apache2.安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd
3.安装Java环境
yum -y install java
java -version
4.安装logstash
#上传软件包logstash-6.6.1.rpm到/opt目录下
cd /opt
rpm -ivh logstash-6.6.1.rpm
systemctl start logstash.service
systemctl enable logstash.serviceln -s /usr/share/logstash/bin/logstash /usr/local/bin/
5.测试Logstash
Logstash命令常用选项:
-f:通过这个选项可以指定Logstash的配置文件,根据配置文件配置Logstash的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作Logstash的配置(如果是空,则默认使用stdin作为输入,stdout作为输出)。
-t:测试配置文件是否正确,然后退出。定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com #键入内容(标准输入)
2025-09-22T03:58:47.799Z node1 www.baidu.com #输出结果(标准输出)
www.sina.com.cn #键入内容(标准输入)
2025-09-22T03:59:02.908Z node1 www.sina.com.cn #输出结果(标准输出)# 执行ctrl+c退出
#使用rubydebug输出详细格式显示,codec为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
www.baidu.com #键入内容(标准输入)
#输出结果(处理后的结果)
{"message" => "www.baidu.com","@version" => "1","@timestamp" => 2025-09-22T12:01:34.980Z,"host" => "logstash"
}
#使用Logstash将信息写入Elasticsearch中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.14:9200"] } }'输入 输出 对接
......
www.baidu.com #键入内容(标准输入)
www.sina.com.cn #键入内容(标准输入)
www.google.com #键入内容(标准输入)//结果不在标准输出显示,而是发送至Elasticsearch中,可浏览器访问http://192.168.10.14:9100/查看索引信息和数据浏览。
6.定义logstash配置文件
Logstash配置文件基本由三部分组成:input、output以及filter(可选,根据需要选择使用)。
- input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
- filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
- output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。#格式如下:
input {...}
filter {...}
output {...}#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {file { path =>"/var/log/messages" type =>"syslog"}file { path =>"/var/log/httpd/access.log" type =>"apache"}
}#修改Logstash配置文件,让其收集系统日志/var/log/messages,并将其输出到elasticsearch中。
chmod +r /var/log/messages # 让Logstash可以读取日志(很重要)vim /etc/logstash/conf.d/system.conf
input {file{path =>"/var/log/messages" #指定要收集的日志的位置type =>"system" #自定义日志类型标识start_position =>"beginning" #表示从开始处收集}
}
output {elasticsearch { #输出到elasticsearchhosts => ["192.168.10.14:9200"] #指定elasticsearch服务器的地址和端口index =>"system-%{+YYYY.MM.dd}" #指定输出到elasticsearch的索引格式}
}systemctl restart logstash 浏览器访问http://192.168.10.14:9100/查看索引信息
8.4 Kibana部署
(在Node1节点上操作)
官方网站 :https://www.elastic.co/cn/downloads/kibana/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz1.安装Kiabana
#上传软件包kibana-6.6.1-x86_64.rpm到/opt目录
cd /opt
rpm -ivh kibana-6.6.1-x86_64.rpm
2.设置Kibana的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置Kiabana的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,设置和Elasticsearch建立连接的地址和端口
elasticsearch.hosts: ["http://192.168.10.14:9200"]
--37--取消注释,设置在elasticsearch中添加.kibana索引
kibana.index: ".kibana"
3.启动Kibana服务
systemctl start kibana.service
systemctl enable kibana.servicenetstat -natp | grep 5601
4.验证Kibana
浏览器访问http://192.168.10.14:5601
第一次登录需要添加一个Elasticsearch索引:
Index Patterns---》create index Patterns
//输入:system-* #在索引名中输入之前配置的Output前缀"system"然后--》Next step(下一步)--》Time Filter field name--》@timestarmp单击"create index Patterns"按钮创建,单击"Discover"按钮可查看图表信息及日志信息。
数据展示可以分类显示,在"Available Fields"中的"host",然后单击"add"按钮,可以看到按照"host"筛选后的结果后面再次创建的步骤---》Management--》index Patterns--》单击"create index Patterns"按钮创建
5.将Apache服务器的日志(访问的、错误的)添加到Elasticsearch并通过Kibana显示
vim /etc/logstash/conf.d/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.10.14:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.10.14:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}
}cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf浏览器访问http://192.168.10.14:9100查看索引是否创建浏览器访问http://192.168.10.14:5601登录Kibana,单击"Create Index Pattern"按钮添加索引,在索引名中输入之前配置的 Output 前缀apache_access-*,并单击"Create"按钮。在用相同的方法添加apache_error-*索引。
选择"Discover"选项卡,在中间下拉列表中选择刚添加的apache_access-*、apache_error-*索引,可以查看相应的图表及日志信息。
九、Filebeat+ELK部署
9.1 环境规划
配置与名称 | IP | 服务 |
---|---|---|
Node1节点(2C/4G) | node1/192.168.10.14 | Elasticsearch(集群) Kibana |
Node2节点(2C/4G) | node2/192.168.10.15 | Elasticsearch(集群) |
Apache节点 | apache/192.168.10.16 | Logstash Apache |
Filebeat节点 | filebeat/192.168.10.17 | Filebeat |
9.1.1 在Filebeat节点上操作
1.安装Filebeat两种
①二进制解包即可
#上传软件包filebeat-6.6.1-linux-x86_64.tar.gz到/opt目录
tar zxvf filebeat-6.6.1-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat②使用rpm包安装上传包
rpm -ivh filebeat-6.6.1-x86_64.rpm
2.设置filebeat的主配置文件
①如果使用第一种方式按照如下配置
cd /usr/local/filebeatvim filebeat.yml
filebeat.prospectors:
- type: log #指定log类型,从日志文件中读取消息enabled: truepaths:- /var/log/messages #指定监控的日志文件- /var/log/*.logfields: #可以使用fields配置选项设置一些参数字段添加到output中service_name: filebeatlog_type: logservice_id: 192.168.10.17--------------Elasticsearch output-------------------
(全部注释掉)----------------Logstash output---------------------
output.logstash:hosts: ["192.168.10.16:5044"] #指定logstash的IP和端口#启动filebeat
./filebeat -e -c filebeat.yml②rpm包方式安装配置都一样
ln -s /usr/share/filebeat/bin/filebeat /usr/local/bin
vim /etc/filebeat/filebeat.yml
filebeat -e -c filebeat.yml
3.在Logstash组件所在节点上新建一个Logstash配置文件
cd /etc/logstash/conf.dvim logstash.conf
input {beats {port => "5044"}
}
output {elasticsearch {hosts => ["192.168.10.14:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}#启动logstash
logstash -f logstash.conf
4.浏览器访问http://192.168.10.14:5601登录Kibana,先点击Management--》"Index Pattern"--》"Create Index Pattern"按钮创建--》选择输入"Index Pattern"--》然后Next step(下一步)--》Time Filter field name--》@timestarmp单击"Discover"按钮可查看图表信息及日志信息。按钮添加索引"filebeat-*"
总结
ELK企业级日志分析系统作为一套完整的日志集中处理解决方案,通过Elasticsearch、Logstash和Kibana三大组件的协同工作,为企业提供了强大的日志收集、存储、搜索和可视化分析能力。
- Elasticsearch
- Elasticsearch就是一个超级快速的搜索分析工具,帮助你在海量的数据中快速找到你想要的内容,还能帮你实时的分析这些数据。它的强大功能和灵活性让它成为公司做大数据分析和实时搜索的首先工具。也是适合大量日志收集分析以及存诸。
- Logstash
- Logstash 就是一多功能的"数据搬运工"。从各种地方拿数据、清洗整理,然后送到你想要的地方(es)。它在数据分析、监控 和处理过程中非常有用。可以让你更轻松地处理各种数据(日志)。
- Kibana
- Kibana是一个帮你把数据变成图标,让你更容易看懂数据的工具。无论是监控系统、查看日志还是分析业务数据(业务日志),都能帮你轻松了解信息内容。
本文从ELK的基本概念出发,详细介绍了各个组件的功能特点、使用场景和工作原理,并通过实战部署案例,展示了如何搭建一套完整的ELK日志分析系统。
ELKStack的优势在于其开源、可扩展、功能强大且社区活跃,能够有效解决分布式系统中日志管理面临的挑战。无论是系统运维监控、业务数据分析,还是安全威胁检测,ELK都能提供强有力的支持。通过本文的学习,读者可以掌握ELK系统的基本原理和部署方法,为构建企业级日志分析平台奠定坚实基础。
需要注意的是,ELK系统在实际生产环境中可能会面临性能、资源消耗和管理复杂性的挑战,需要根据具体业务需求进行调优和扩展。随着技术的不断发展,ELK生态系统也在不断演进,出现了诸如Fluentd、Filebeat等轻量级替代方案,为企业提供了更多选择空间。