主要内容:
了解ELK分布式日志分析系统、Elasticsearch分布式集群搭建、Kibana搭建、使用kibana展示数据;
一、日志分析系统ELK概述
ELK 是 Elasticsearch、Logstash 和 Kibana 的缩写,是三款软件都是开源软件,通常是配合使用,而且又先后归于Elastic.co公司名下,故被简称为ELK,是一个流行的开源日志分析和管理系统。ELK 栈通常用于集中化日志收集、存储、搜索和可视化,广泛应用于各种规模的企业和组织。
1、ELK栈的开源软件
1)Elasticsearch(负责日志检索和存储)
- 分布式搜索引擎:Elasticsearch 是一个基于 Lucene 的分布式搜索引擎,用于存储和检索大量数据。
- 实时搜索:支持实时搜索和分析,能够快速处理和查询大量日志数据。
- 高可用性:通过分片和副本机制提供高可用性和容错能力。
2)Logstash(负责日志的收集和分析、处理)
- 数据收集和处理:Logstash 是一个数据收集引擎,可以从各种来源(如日志文件、数据库、消息队列等)收集数据,并进行处理和转换。
- 插件支持:Logstash 支持丰富的插件,可以处理各种数据格式和协议。
- 数据管道:Logstash 通过输入、过滤和输出插件构建数据管道,将数据从源传输到目标(如 Elasticsearch)。
3)Kibana(负责日志的可视化)
- 数据可视化:Kibana 是一个基于 Web 的界面,用于可视化和分析存储在 Elasticsearch 中的数据。
- 仪表盘:支持创建自定义仪表盘,用于监控和分析日志数据。
- 搜索和过滤:提供强大的搜索和过滤功能,帮助用户快速定位和分析特定日志。
2、ELK 栈的工作流程
① 数据收集:Logstash 从各种来源收集日志数据。数据可以是结构化的(如 JSON)或非结构化的(如文本日志)。
② 数据处理:Logstash 对收集到的数据进行处理和转换,如解析、过滤、格式化等。处理后的数据被发送到 Elasticsearch。
③ 数据存储:Elasticsearch 存储处理后的数据,并提供高效的搜索和分析功能。
④ 数据可视化:Kibana 从 Elasticsearch 中检索数据,并将其可视化为图表、仪表盘等。用户可以通过 Kibana 界面进行搜索、过滤和分析。
3、ELK 栈的应用场景
- 集中化日志管理:ELK 栈提供了一个集中化的平台,用于收集、存储和分析各种来源的日志数据。
- 实时分析:支持实时数据处理和分析,帮助用户快速发现和解决问题。
- 可扩展性:ELK 栈具有良好的可扩展性,可以处理从小型到大型企业的日志数据。
- 开源和社区支持:ELK 栈是开源的,拥有庞大的社区支持,提供了丰富的文档和插件。
ELK组件在海量日志系统的运维中,可用于解决:
① 日志管理:用于集中化管理和分析应用程序、服务器和网络设备的日志
② 监控和告警:通过 Kibana 创建仪表盘和告警规则,实时监控系统状态,包含系统硬件和应用各个组件的监控
③ 故障排除:通过分析告警日志,排查故障情况
④ 安全分析:用于分析安全日志,检测和响应潜在的安全威胁
⑤ 业务分析:通过分析业务日志,获取业务洞察和优化建议
相比Zabbix监控,ELK解决的是在运行过程中的日志分析处理
二、Elasticsearch 部署
Elasticsearch 是一个基于Apache Lucene构建的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulAPI的Web接口且用Java开发的,使用Apache许可条款的开源软件,是当前流行的企业级搜索引擎,广泛用于构建实时搜索和分析应用程序,提供了强大的全文搜索、结构化搜索、分析和可视化功能。在云计算中能够达到实时搜索、稳定、可靠、快速,安装使用方便(支持集群的数据库)
核心功能:
- 分布式存储和搜索:Elasticsearch 将数据分布在多个节点上,提供高可用性和容错能力。数据被分成多个分片(shards),每个分片可以有多个副本(replicas)
- 实时搜索和分析:支持实时数据索引和查询,能够快速响应搜索请求
- 全文搜索:提供强大的全文搜索功能,支持多种查询类型(如布尔查询、模糊查询、范围查询等)
- 结构化搜索:支持对结构化数据(如 JSON 文档)进行搜索和过滤
- 分析和聚合:提供丰富的聚合功能,用于数据分析和统计
关键概念:
① Node(节点)
定义:Node 是装有一个 Elasticsearch 服务器的节点。每个节点可以运行 Elasticsearch 实例,并参与集群中的数据存储和查询处理。
角色:节点可以承担不同的角色,如主节点(Master Node)、数据节点(Data Node)、协调节点(Coordinating Node)等。
② Cluster(集群)
定义:Cluster 是由多个 Node 组成的集群。集群中的节点协同工作,提供高可用性和容错能力。
特点:集群中的所有节点共享相同的集群名称,并通过内部通信协议协调工作。
③ Index(索引)
定义:Index 是拥有相似特征的文档的集合,相当于关系数据库中的“库”级别。每个索引由多个分片(Shards)组成。
用途:索引用于组织和存储文档,并提供高效的搜索和分析功能。
④ Type(类型)
定义:Type 是一个索引中可以定义的一种或多种类型,相当于关系数据库中的“表”级别。每个 Type 定义了文档的字段和映射。
注意:在 Elasticsearch 6.x 及之前的版本中,Type 是一个重要的概念。但从 Elasticsearch 7.x 开始,Type 被废弃,建议每个索引只包含一种 Type(通常是 _doc)。
⑤ Document(文档)
定义:Document 是一个可被搜索的基础信息单元,相当于关系数据库中的“行”级别。每个文档以 JSON 格式存储,并包含多个字段。
用途:文档是 Elasticsearch 中的基本数据单元,用于存储和检索数据。
⑥ Field(字段)
定义:Field 是 Elasticsearch 的最小单位,相当于关系数据库中的“列”级别。每个字段包含一个值,并具有特定的数据类型。
用途:字段用于定义文档的结构和内容,支持多种数据类型(如字符串、数字、日期等)。
⑦ Shard(分片)
定义:Shard 是索引的分片,每一个分片就是一个 Shard。分片是索引的物理存储单元,分为主要分片(Primary Shard)和副本分片(Replica Shard)。
用途:分片用于分布式存储和搜索,提供高可用性和可扩展性。
⑧ Replica(副本)
定义:Replica 是索引的拷贝(副本),用于提供冗余和高可用性。每个主要分片可以有多个副本分片。
用途:副本分片用于在节点故障时提供数据冗余和查询负载均衡。
- 配置文件:/etc/elasticsearch/elasticsearch.yml
- 默认监听端口:9200、9300
— 与关系型数据库对比:(数据组织存放方式)
部署Elasticsearch示例:
步骤1:准备环境
① 在跳板机上配置YUM仓库
# 拷贝云盘rpm-package/elk目录西的软件包到跳板机的YUM库
[root@ecs-proxy ~]# ls /root/elk/
[root@ecs-proxy ~]# cp -r /root/elk/ /var/ftp/localrepo/
[root@ecs-proxy ~]# cd /var/ftp/localrepo/
[root@ecs-proxy localrepo]# createrepo --update . //更新repodata索引
② 购买5台云主机
主机名称 |
IP地址 |
相关配置 |
es-0001 |
192.168.1.41 |
最低配置2核4G |
es-0002 |
192.168.1.42 |
最低配置2核4G |
es-0003 |
192.168.1.43 |
最低配置2核4G |
es-0004 |
192.168.1.44 |
最低配置2核4G |
es-0005 |
192.168.1.45 |
最低配置2核4G |
步骤2: Elasticsearch单台安装(es-0001操作)
① 配置主机名解析
[root@es-0001 ~]# vim /etc/hosts
192.168.1.41 es-0001
② 部署JAVA环境,并安装elasticsearch软件包
[root@es-0001 ~]# yum makecache
[root@es-0001 ~]# yum install -y java-1.8.0-openjdk elasticsearch
③ 修改配置文件(绑定监听地址),并启动服务
[root@es-0001 ~]# vim /etc/elasticsearch/elasticsearch.yml
55: network.host: 0.0.0.0 //监听所有地址
...
[root@es-0001 ~]# systemctl enable --now elasticsearch
[root@es-0001 ~]# ss -nlptu | grep java
tcp LISTEN 0 1024 [::]:9200 [::]:* users:(("java",pid=1415,fd=211))
tcp LISTEN 0 1024 [::]:9300 [::]:* users:(("java",pid=1415,fd=197))
④ 测试访问ES服务,返回Json数据
[root