一、ELK介绍
ELK的应用
ELK的应用场景:日志查询,问题排查,上线检查服务器监控,应用监控,错误报警Bug管理性能分析,用户行为分析,安全漏洞分析。
企业 |
行业 |
ELK用途 |
阿里巴巴 |
电子商务、云计算 |
用于日志管理和实时监控 |
腾讯 |
互联网、科技 |
用于处理和分析大规模的日志数据 |
百度 |
搜索引擎 |
用于日志分析和搜索相关数据的实时监控 |
美团 |
在线服务 |
用于分析用户行为和业务数据 |
京东 |
自营式电商 |
用于日志分析和监控系统性能 |
新浪 |
门户网站、社交媒体 |
用于日志管理和实时数据分析 |
字节跳动 |
移动互联网 |
用于日志分析、数据挖掘和业务监控 |
华为 |
通信、电信设备 |
用于网络设备监控、故障排查和性能优化 |
头条 |
新闻、娱乐、社交媒体 |
用于实时日志分析、内容推荐和用户行为追踪 |
贝壳 |
房地产科技 |
用于数据分析、智能推荐和市场预测 |
滴滴出行 |
移动出行平台 |
用于日志管理、位置数据分析和实时监控 |
相比传统方式,集成ELK具有以下优势:
1.实时性:ELK能够实时收集和分析日志数据,能够快速获取系统的最新状态和事件。传统方式可能需要手动查找和解析日志文件,耗费时间和精力。
2.可扩展性:ELK采用分布式架构,可以轻松地扩展以处理大规模的数据。传统方式可能面临存储容量不足或处理能力有限的问题。
3.搜索和过滤功能:ELK提供强大的搜索和过滤功能,可以根据条件、字段或时间范围对日志数据进行快速查询。传统方式可能需要手动解析和筛选日志文件,效率低下。
4.可视化和仪表板:ELK的Kibana组件提供了交互式的可视化和仪表板功能,使得日志数据更直观和易于理解。传统方式可能需要手动整理和绘制图表,不够直观和灵活。
集中存储和管理:ELK能够将各种来源的日志数据集中存储在一个地方,方便进行管理
架构图
二、基本原理
ELK是由三个开源的高性能日志分析及可视化的服务器组件组成
1. Elasticsearch
ElasticSearch是ELK的核心,简称ES,它是一个基于Apache Lucene的开源数据搜索引擎,具备了Lucene的全部特性,使用Java语言编写。支持分词、全文搜索等。
分布式扩展性:Elasticsearch是分布式系统,能够水平扩展以适应数据量和查询负载的增长。
**实时性能:**Elasticsearch以快速响应为目标,具备优秀的实时搜索和分析性能。
**多样数据类型支持:**Elasticsearch支持多种数据类型的索引和查询,包括结构化、文本、地理位置、数值和时间序列数据。
**强大的搜索和分析功能:**Elasticsearch提供丰富的查询语言和灵活的搜索功能,支持全文搜索、过滤、范围查询和聚合等高级操作。
可扩展的生态系统:Elasticsearch具有庞大的开源生态系统,可与其他工具和应用程序集成,构建完整的日志管理、数据可视化和监控解决方案。
ES 上手简单且性能强悍,继承了Lucene的强大数据检索能力,
可以快速搜索数十亿的文件及PB级别的数据。
倒排索引 e.g.
今天/天气/很好
word |
doc_id |
今天 |
1 |
天气 |
1 |
很好 |
1 |
2. Logstash
Logstash是一种开源的数据收集和日志处理工具,它是Elastic公司的一部分,用于将不同来源的数据收集、转换和发送到目标位置。它是Elastic Stack(前身是ELK Stack)的一部分,与Elasticsearch、Kibana和Beats一起构成了强大的日志管理和分析解决方案。
3. Kibana
Kibana是Elastic Stack中的开源数据可视化和分析平台,用于探索、分析和可视化存储在Elasticsearch中的数据。它提供交互式图表、仪表板和搜索等功能,帮助用户快速理解和利用数据。
4. Filebeat
Filebeat 是一个轻量级的日志文件收集器,通过监控指定的日志文件或目录,实时读取新增的数据行,并将其传输到配置的目标输出。它使用内置的解析器来解析不同格式的日志数据,并支持将数据发送到各种输出目的地,如 Elasticsearch、Logstash、Kafka 等。
实战演练
环境介绍
1. 服务器配置
IP地址 |
操作系统 |
192.168.19.1 |
Windows 11 |
192.168.19.128 |
Linux CentOS Stream 9 |
2. 工具及版本
软件 |
版本 |
JDK |
Java17 |
Elasticsearch |
8.7.1 |
Kibana |
8.7.1 |
Logstash |
8.7.1 |
Filebeat |
8.7.1 |
前置工作
# 建立新用户
$ useradd elk
# 赋予elk用户elk文件夹的所属权限
$ chown -R elk:elk ./elk
#JDk环境准备
$ java -version
1.ES安装部署
1.1解压文件
# 解压
$ tar -zxvf elasticsearch-8.7.1-linux-x86_64.tar.gz
# 修改解压文件夹
$ mv elasticsearch.8.7.1 elasticsearch
1.2 修改elasticsearch.yml
# IP配置为:0.0.0.0 外网才能访问
network.host: 0.0.0.0
# 集群配置
cluster.initial_master_nodes: ["node-1"]
# 配置当前es节点的名称
node.name: node-1
# 配置端口号
http.port: 9200
# 设置免密登录访问
xpack.security.enabled: false
1.3 启动
$ cd /usr/local/elk/elasticsearch/bin
# 后台启动
$ ./elasticsearch -d
2.Kibana安装部署
2.1 解压文件
# 解压
$ tar -zxvf kibana-8.7.1-linux-x86_64.tar.gz
# 修改解压文件夹
$ mv kibana-8.7.1 kibana
2.2 修改配置文件
# kibana 端口
server.port: 5601
# 允许外网访问
server.host: "0.0.0.0"
# 监听ES
elasticsearch.hosts: ["http://localhost:9200"]
2.3 启动
# 后台启动
$ nohup ./kibana &
3.Logstash安装部署
3.1 解压文件
# 解压
$ tar -zxvf logstash-8.7.1-linux-x86_64.tar.gz
# 修改解压文件夹
$ tar -zxvf logstash-8.7.1 logstash
3.2 定义管道文件
# 定义输入
input{
beats {
port => 5044
# 日志类型
type => 'systemlog'
# 编码
codec => plain {charset => "UTF-8"}
}
}
# 定义输出
output {
elasticsearch {
# ES的IP端口地址
hosts => ["192.168.19.128:9200"]
# ES日志索引
index => "log-%{type}-%{+yyyy.MM.dd}"
}
}
3.3 启动
$ ./logstash -f /usr/local/elk/logstash/config/conf/logstash.conf
# 后台启动
$ nohup ./logstash -f /usr/local/elk/logstash/config/conf/logstash.conf &
4.Filebeat
4.1 创建filebeat.yml文件
filebeat.inputs:
- type: log
# 是否启用
enabled: true
# 监听文件路径
paths:
- D:\tools\Liberty\Liberty\usr\servers\defaultServer\logs\*.log
output.logstash:
# logstash自定义的传输通道端口
hosts: ["192.168.19.128:5044"]
4.2 启动filebeat
# -e 动态显示 -c 执行配置文件 & 后台启动
$ .\filebeat.exe -e -c .\filebeat.yml
至此为止,我们的ELK(B)就搭建完成啦~