目录
- 1 Elastic Stack
- 1.1 Elastic Stack介绍
- 1.2 为什么要用到ELK日志分析
- 1.3 ELK的组件
- 1.4 ELK架构原理
- 1、ELK工作流程
- 2、ELFK工作流程
- 2 Elasticsearch
- 2.1 Elasticsearch简介
- 1、什么是Elasticsearch
- 2、数据来源:索引(indices)和文档(documents)
- 3、信息输出:搜索(search)和分析(analyze)
- 4、可扩展性和弹性:集群、节点和分片
- 2.2 ES安装-源码包安装8.1
- 1、环境准备
- 2、安装
- 安装包下载
- 创建用户
- 签发证书并配置
- 修改系统文件
- 增加快速启动文件
- 登录前台进行验证
- 2.3 Elasticsearch简单使用
- 总结
1 Elastic Stack
1.1 Elastic Stack介绍
ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana,在发展的过程中,又有新成员Beats的加入,所以就形成了Elastic Stack。说白了Elastic Stack相当于以前的ELK。
1.2 为什么要用到ELK日志分析
一般需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时, 大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告
监控机制 ELK 提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
1.3 ELK的组件
ELK 的主要组件有:
- Elasticsearch 是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式, 零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。ELK官网:https://www.elastic.co/
- Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为 c/s 架构,client 端安装在需要收集日志的主机上,server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch 上去。
- Kibana 也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
- Filebeat 隶属于 Beats。目前 Beats 包含四种工具:
- Packetbeat(搜集网络流量数据)
- Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Filebeat(搜集文件数据)
- Winlogbeat(搜集 Windows 事件日志数据)
Logstash和Elasticsearch是用Java语言编写,而Kibana使用node.js框架,在配置ELK环境要保证系统有JAVA JDK开发库
1.4 ELK架构原理
ELK架构中,可以直接使用Logstach 组件收集数据并过滤,把数据发送给Elasticsearch,并通过Kibana展示出来;也可以使用Filebeat收集日志,Logstash从FileBeat获取日志文件。Logstash将从Filebeat获取到的日志进行处理,将处理好的日志文件输出到Elasticsearch进行处理
1、ELK工作流程
- 客户端安装Logstash日志收集工具
- 通过logstash收集客户端APP的日志数据,将所有的日志过滤出来,存入Elasticsearch 搜索引擎里
- 通过Kibana GUI在WEB前端展示给用户
- 用户需要可以进行查看指定的日志内容
2、ELFK工作流程
- 使用FileBeat获取Linux服务器上的日志。当启动Filebeat时,它将启动一个或多个Prospectors (检测者),查找服务器上指定的日志文件,作为日志的源头等待输出到Logstash。
- Logstash从FileBeat获取日志文件。Filebeat作为Logstash的输入input将获取到的日志进行处理,Logstash将处理好的日志文件输出到Elasticsearch进行处理。
- Elasticsearch得到Logstash的数据之后进行相应的搜索存储操作。将写入的数据可以被检索和聚合等以便于搜索操作,最后Kibana通过Elasticsearch提供的API将日志信息可视化的操作。
2 Elasticsearch
2.1 Elasticsearch简介
1、什么是Elasticsearch
Elasticsearch是Elastic Stack的核心,是一个分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富数据,并将其存储在Elasticsearch中。Kibana让你 以交互方式探索、可视化和共享数据的见解,并管理和监控整个堆栈。
Elasticsearch为所有类型的数据提供了近实时的搜索和分析功能。无论你是拥有结构化还是非结构化的文本、数值数据还是地理空间数据,Elasticsearch都能以支持快速搜索的方式高效地存储和索引这些数据。
Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论是 具有结构化或非结构化文本、数字数据或地理空间数据, Elasticsearch 可以以支持快速搜索的方式有效地存储和索引它。 可以远远超出简单的数据检索和汇总信息来发现 数据中的趋势和模式。
应用场景有:
- 在应用程序或网站上添加一个搜索框
- 存储并分析日志、指标和安全事件数据
- 使用机器学习实时自动构建数据行为模型
- 使用Elasticsearch作为存储引擎,自动化业务流程
- 使用Elasticsearch作为地理信息系统(GIS),管理、整合和分析空间信息
- 使用Elasticsearch作为生物信息学研究工具,存储和处理基因数据
2、数据来源:索引(indices)和文档(documents)
在Elasticsearch中,数据和信息的组织主要依赖于两个核心概念:文档(documents)和索引(indices)。
- 文档(documents):
- 文档是Elasticsearch中的基本数据单位。也是被索引的基本单元。
- 构成:每个文档都是一个JSON对象,其中包含了一组字段(fields),这些字段可以包含各种类型的数据,如文本、数字、日期、地理坐标等。这些字段及其对应的值一起构成了文档的内容。
- 索引(indices):
- 索引在Elasticsearch中是一个逻辑命名空间,用于存储具有相似结构的文档集合。
- 构成:可以将索引视为一个数据库中的表,或者一个文件系统中的文件夹。索引不仅存储了文档数据,还包含了用于搜索和分析这些数据的元数据。这些元数据包括倒排索引、字段类型信息、映射(mapping)等,它们使得Elasticsearch能够快速地响应查询请求。
- 倒排索引(inverted index):是一种数据结构,主要列出出现在任何文档中的每个唯一单词,并标识出每个单词出现的所有文档。也就是说通过这个数据结构实现快速的全文搜索。
数据和信息在Elasticsearch中是以文档和索引的形式进行组织和存储的。
文档是数据的基本单位,而索引则是组织和管理这些文档的容器。在Elasticsearch中,通常不会直接操作单个文档,而是通过索引来管理和查询文档集合。
当想要存储一个新的文档时,我们会将它添加到一个索引中;当我们想要搜索文档时,我们会在一个或多个索引中执行查询。索引还可以进行分片(sharding)和复制(replication),以支持水平扩展和高可用性。
3、信息输出:搜索(search)和分析(analyze)
在Elasticsearch中,搜索和分析功能是其最为核心和强大的特性之一。通过Elasticsearch,用户可以轻松地执行各种复杂的搜索操作,并对数据进行深入的分析。
- 搜索(search):支持的查询有:
- 基础搜索:
- 结构化查询:允许用户根据特定的字段和条件来过滤和筛选文档,类似于在关系型数据库中使用的SQL查询
- 全文查询:能够找到所有与查询字符串匹配的文档,并按照相关性进行排序
- 结合了两者的复杂查询
- 高级搜索:短语搜索、相似性搜索、前缀搜索等
- 基础搜索:
- 分析(analyze):允许用户对数据进行聚合、统计和分析。通过聚合操作,用户可以计算数据的平均值、总和、最大值、最小值等统计信息,或者对数据进行分组和计数。此外,Elasticsearch还支持各种复杂的分析操作,如时间序列分析、地理空间分析等
4、可扩展性和弹性:集群、节点和分片
Elasticsearch的可扩展性和弹性主要体现在其集群、节点和分片的设计上
- 集群(Clusters):
- Elasticsearch是一个分布式的文档存储系统,通过集群的方式实现其扩展性。
- 集群是由一个或多个节点(服务器)组成的,这些节点共同工作以提供数据存储和搜索服务。当需要增加集群的容量或提高性能时,可以简单地向集群中添加更多的节点。Elasticsearch会自动在所有可用的节点之间分配数据和查询负载,从而确保每个节点都能够高效地处理请求。这种自动分配和负载均衡的机制使得Elasticsearch能够轻松应对大规模的数据存储和搜索需求。
- 节点(Nodes):
- 节点是Elasticsearch集群的基本组成单位,每个节点都是一个独立的服务器或服务器实例。
- 节点负责存储和检索数据,并处理来自客户端的查询请求。在集群中,节点之间通过网络进行通信,共同协作以完成数据存储、搜索和分析任务。
- 节点可以容纳的分片数量与其可用的堆空间成正比,这意味着具有更多可用内存的节点可以处理更多的分片。
- 分片(Shards):
- 分片是数据的物理存储单位。
- 每个索引(Index)在创建时会被拆分成一个或多个主分片(Primary Shards),这些主分片是数据的逻辑分组,用于存储和检索数据。每个主分片可以有零个或多个副本分片(Replica Shards),用于提供数据的冗余和备份,以提高系统的可用性和容错能力。
- 通过分片的设计,Elasticsearch可以实现数据的水平扩展。当集群中的节点数量增加时,Elasticsearch可以将分片重新分配到这些新的节点上,从而平衡集群中的负载。这种自动的分片分配和再平衡机制使得Elasticsearch能够灵活地应对节点的增加或减少,保持系统的稳定性和性能。
- 分片的设计还使得Elasticsearch能够处理大规模的数据集。通过将数据拆分成多个分片并分散在多个节点上存储,Elasticsearch可以充分利用集群的资源,实现高效的并行处理和查询。
- 分片的设计也增强了Elasticsearch的弹性。通过创建副本分片,Elasticsearch可以在主分片发生故障时自动使用副本分片进行恢复,从而确保数据的可靠性和可用性。这种自动故障恢复机制使得Elasticsearch能够应对各种故障场景,保持系统的稳定性和可用性。
综上所述,Elasticsearch通过集群、节点和分片的设计实现了出色的可扩展性和弹性。这种设计使得Elasticsearch能够轻松应对大规模的数据存储和搜索需求,同时保持系统的稳定性和性能。
2.2 ES安装-源码包安装8.1
1、环境准备
系统:ubuntu
软件:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.0-linux-x86_64.tar.gz
2、安装
安装包下载
cat >> /etc/hosts << EOF
192.168.92.10 server
EOFcd /usr/local/src/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.1.0-linux-x86_64.tar.gz
创建用户
# 创建es用户,生成证书文件
# 新增es用户
useradd es
# 设置密码
passwd es mv elasticsearch-8.1.0 /usr/local/
# 创建数据文件目录
mkdir -p /usr/local/elasticsearch-8.1.0/data
# 创建证书目录
mkdir -p /usr/local/elasticsearch-8.1.0/config/certs
# 切换目录
cd /usr/local/elasticsearch-8.1.0
# 修改文件拥有者
chown -R es:es /usr/local/elasticsearch-8.1.0
签发证书并配置
# 签发证书并配置
su es
# 签发ca证书 直接回车两次, 会在当前目录生成一个文件elastic-stack-ca.p12
/usr/local/elasticsearch-8.1.0/bin/elasticsearch-certutil ca# 用ca证书签发节点证书, 这一步就是为整个集群做安全认证 过程直接回车三次
/usr/local/elasticsearch-8.1.0/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 将生成的证书文件移动到 config/certs目录中
mv elastic-stack-ca.p12 elastic-certificates.p12 config/certs/# 设置集群多节点的http证书 签发http证书
/usr/local/elasticsearch-8.1.0/bin/elasticsearch-certutil http
####### 以下为输出内容:
# 是否发出认证证书请求 n
Generate a CSR? [y/N]n
# 是否使用已经存在的ca证书 y
Use an existing CA? [y/N]y
# ca证书的路径 /usr/local/elasticsearch-8.1.0/config/certs/elastic-stack-ca.p12
CA Path: /usr/local/elasticsearch-8.1.0/config/certs/elastic-stack-ca.p12
# 输入密码 没有密码,直接回车
Password for elastic-stack-ca.p12:
# 证书的有效时间 默认5年 5y
For how long should your certificate be valid? [5y] 5y
# 是否每个节点都生成证书 不需要 n
Generate a certificate per node? [y/N]n
# 输入几台主机名称 并做最后的确认
When you are done, press <ENTER> once more to move on to the next step. con02# 输入几台主机的ip地址 并确认
When you are done, press <ENTER> once more to move on to the next step. 192.168.92.102 # 是否选择证书的配置 否 n
Do you wish to change any of these options? [y/N]n
# 输入证书的密码 没有密码 直接回车
If you wish to use a blank password, simply press <enter> at the prompt below.Provide a password for the "http.p12" file: [<ENTER> for none]
# 生成认证证书的压缩包文件
[/usr/local/elasticsearch-8.1.0/elasticsearch-ssl-http.zip]
# Where should we save the generated files?A number of files will be generated including your private key(s),
public certificate(s), and sample configuration options for Elastic Stack products.These files will be included in a single zip archive.What filename should be used for the output zip file? [/usr/local/elasticsearch-8.1.0/elasticsearch-ssl-http.zip]Zip file written to /usr/local/elasticsearch-8.1.0/elasticsearch-ssl-http.zip# 解压缩证书文件 并移动文件
unzip elasticsearch-ssl-http.zip
cp elasticsearch/http.p12 kibana/elasticsearch-ca.pem config/certs/
修改配置文件
# 修改配置文件
vim config/elasticsearch.yml
# 设置es集群名称
cluster.name: es-cluster
# 设置集群中当前的节点名称
node.name: con02
# 设置数据和日志路径
path.data: /usr/local/elasticsearch-8.1.0/data
path.logs: /usr/local/elasticsearch-8.1.0/logs
# 设置网络访问节点
network.host: 192.168.92.102
# 设置访问端口
http.port: 9200
# 初始节点
discovery.seed_hosts: ["con02"]
# 安全认证
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:enabled: truekeystore.path: /usr/local/elasticsearch-8.1.0/config/certs/http.p12truststore.path: /usr/local/elasticsearch-8.1.0/config/certs/http.p12
xpack.security.transport.ssl:enabled: trueverification_mode: certificatekeystore.path: /usr/local/elasticsearch-8.1.0/config/certs/elastic-certificates.p12truststore.path: /usr/local/elasticsearch-8.1.0/config/certs/elastic-certificates.p12
# 此处需要注意,node01为上面配置的节点名称
cluster.initial_master_nodes: ["con02"]
http.host: [_local_,_site_]
ingest.geoip.downloader.enabled: false
xpack.security.http.ssl.client_authentication: none# 最后的输入内容:
# 设置es集群名称
cluster.name: es-cluster
## 设置集群中当前的节点名称
node.name: con02
## 设置数据和日志路径
path.data: /usr/local/elasticsearch-8.1.0/data
path.logs: /usr/local/elasticsearch-8.1.0/logs
## 设置网络访问节点
network.host: 192.168.92.102
# 设置访问端口
http.port: 9200
# 安全认证
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:enabled: truekeystore.path: /usr/local/elasticsearch-8.1.0/config/certs/http.p12truststore.path: /usr/local/elasticsearch-8.1.0/config/certs/http.p12
xpack.security.transport.ssl:enabled: trueverification_mode: certificatekeystore.path: /usr/local/elasticsearch-8.1.0/config/certs/elastic-certificates.p12truststore.path: /usr/local/elasticsearch-8.1.0/config/certs/elastic-certificates.p12
# 此处需要注意,node01为上面配置的节点名称
cluster.initial_master_nodes: ["con02"]
http.host: [_local_,_site_]
ingest.geoip.downloader.enabled: false
xpack.security.http.ssl.client_authentication: none
修改系统文件
# 退出到root修改系统文件内容
exit
vim /etc/security/limits.conf
添加----------------------------------------------------------------
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096vi /etc/sysctl.conf
添加----------------------------------------------------------------
vm.max_map_count = 262144# 使配置生效
重启系统或者
sudo sysctl -p /etc/sysctl.conf
reboot# 验证结果
su es
ulimit -Hn
65536
ulimit -Sn
65536
exit
增加快速启动文件
##### 注意:第一次启动一定要手动启动
cd /usr/local/elasticsearch-8.1.0/
su es
./bin/elasticsearch# system管理
vim /usr/lib/systemd/system/elasticsearch.service
[Unit]
Description=elasticsearch
After=network.target
[Service]
Type=simple
User=es
Group=es
LimitNOFILE=100000
LimitNPROC=100000
Restart=no
ExecStart=/usr/local/elasticsearch-8.1.0/bin/elasticsearch
PrivateTmp=true
[Install]
WantedBy=multi-user.target# 启动服务
systemctl daemon-reload
systemctl start elasticsearch
systemctl enable elasticsearch# 重新生成密码:
/usr/local/elasticsearch-8.1.0/bin/elasticsearch-reset-password -u elastic默认账号
https://192.168.92.102:9200
账号 : elastic 密码 : pwYcuJ8aT-h7TvuA0gVu
注意:在修改密码时如果报如下错误,可以查看是配置文件不正确。或者删除证书重新生成
登录前台进行验证
登录地址:https://ip:port
2.3 Elasticsearch简单使用
# 查看
curl https://192.168.92.102:9200 -ku 'elastic:pwYcuJ8aT-h7TvuA0gVu'
# 查看索引
curl -ku 'elastic:pwYcuJ8aT-h7TvuA0gVu' https://172.16.1.56:9200/_cat/indicesk
总结
以上是Elastic stack和Elasticsearch的简介,和elasticsearch的安装。后面会写一些常用的Elasticsearch API调用。