ELK
Elasticsearch官网中提供了很多技术,其中一些技术是可以配合使用的,里面比较出名的就是ELK技术栈。
ELK是Elasticsearch、Logstash、Kibana三个软件首字母。
Elasticsearch:全文检索工具。
Kibana:页面管理工具,可以通过Kibana的管理界面操作Elasticsearch。
logstash:日志收集的工具,通过此工具可以实现日志内容收集及格式转换。
Elasticsearch简介
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式的全文搜索引擎,其对外服务是基于RESTful web接口发布的。Elasticsearch是用Java开发的应用,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。
功能分类
Elasticsearch具备两个主要功能:
- 搜索,功能和Solr类似。代替目前(海量数据)的MySQL模糊查询
- 分析,结合LogStash使用
相关概念
cluster
集群。Elasticsearch集群由一个或多个节点组成,其中有一个主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。Elasticsearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部看Elasticsearch集群,在逻辑上是个整体,你与集群中的任何一个节点通信和与整个Elasticsearch集群通信是等价的。也就是说,主节点的存在不会产生单点安全隐患、并发访问瓶颈等问题。
Index
索引,相当于关系型数据库中的表。其中存储若干相似结构的Document数据。如:客户索引,订单索引,商品索引等。Elasticsearch中的索引不像数据库表格一样有强制的数据约束,在理论上,可以存储任意结构的数据。但为了更好的业务提供搜索数据支撑,还是要设计合适的索引体系来存储不同的数据。
shards
primary shard代表索引的主分片,Elasticsearch可以把一个完整的索引分成多个primary shard,这样的好处是可以把一个大的索引拆分成多个分片,分布存储在不同的Elasticsearch节点上,从而形成分布式存储,并为搜索访问提供分布式服务,提高并发处理能力。primary shard的数量只能在索引创建时指定,并且索引创建后不能更改primary shard数量。
replicas
replica shard:代表索引主分片的副本,Elasticsearch可以设置多个replica shard。replica shard的作用:一是提高系统的容错性,当某个节点某个primary shard损坏或丢失时可以从副本中恢复。二是提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡,将并发的搜索请求发送给合适的节点,增强并发处理能力。
Type
类型。每个索引中都必须有唯一的一个Type,Type是Index中的一个逻辑分类。Elasticsearch中的数据Document是存储在索引下的Type中的。
TIP
Elasticsearch 5.x及更低版本中,一个Index中可以有多个Type。Elasticsearch6.x版本之后,type概念被弱化,一个index中只能有唯一的一个type。且在7.x版本之后,删除type定义。
Document
文档。Elasticsearch中的最小数据单元。一个Document就是一条数据,一般使用JSON数据结构表示,每个Index下的Type中都可以存储多个Document,一个Document中可定义多个field,field就是数据字段,如:学生数据({"name":"张三","age":20,"gender":"男"})
。
元数据
在Elasticsearch中所有以"_"开头的属性都称为元数据,都有着自己特定的函数。例如:_index:表示索引
常见使用场景
- 维基百科:全文检索,高亮显示,搜索推荐
- The Guardian(国外的一个新闻网站),此平台可以对用户的行为(点击、浏览、收藏、评论)、社区网络数据(对新闻的评论等)进行数据分析,为新闻的发布者提供相关的公众反馈。
- Stach Overflow(国外的程序异常讨论论坛)
- Github(开源代码管理),在千亿级别的代码行中搜索信息
- 电子商务平台等。
安装Elasticsearch
使用的Elasticsearch的版本是7.17.9,Elasticsearch7.x要求linux内核必须是4+版本以上。在linux操作系统中,查看内核版本的命令是:uname -a。
为Elasticsearch提供完善的系统配置
Elasticsearch在Linux中安装部署的时候,需要系统为其提供若干系统配置。如:应用可启动的线程数、应用可以在系统中划分的虚拟内存、应用可以最多创建多少文件等。
修改限制信息
vim /etc/security/limits.conf
是修改系统中允许应用最多创建多少文件等的限制权限。Linux默认来说,一般限制应用最多创建的文件是65535个。但是Elasticsearch至少需要65535的文件创建权限。修改后的内容为:
* soft nofile 65536
* hard nofile 65536
*
代表任意用户,soft表示内存中虚拟文件(软文件),hard表示落地到磁盘的具体文件(硬文件),nofile表示权限,65536表示个数。
修改线程开启限制
在centos6.5版本中编辑下述的配置文件vim /etc/security/limits.d/90-nproc.conf
在centos7+版本中编辑配置文件是vim /etc/security/limits.conf
是修改系统中允许用户启动的进程开启多少个线程。默认的linux限制root用户开启的进程可以开启任意数量的线程,其他用户开启的进程可以开启1024个线程。必须修改限制数为4096+。因为Elasticsearch至少需要4096的线程池预备。Elasticsearch在5.x版本之后,强制要求在linux中不能使用root用户启动Elasticsearch进程。所以必须使用其他用户启动Elasticsearch进程才可以。
*soft nproc 4096
root soft nproc unlimited
*任何用户 nproc创建线程 数量4096
TIP
Linux低版本内核为线程分配的内存是128K。4.x版本的内核分配的内存更大。如果虚拟机的内存是1G,最多只能开启3000+个线程数。至少为虚拟机分配1.5G以上的内存,保险起见建议2G以上。
修改系统控制权限
centos6.5中的配置文件为vim /etc/sysctl.conf
,centos8中的配置文件为vim /etc/sysctl.d/99-sysctl.conf
。系统控制文件是管理系统中的各种资源控制的配置文件。Elasticsearch需要开辟一个65535字节以上空间的虚拟内存。linux默认不允许任何用户和应用直接开辟虚拟内存。
新增内容为:vm.max_map_count=655360
使用sysctl -p
命令,让系统控制权限配置生效。
JDK环境
首先需要安装jdk环境,安装JDK8(Elastic 需要 Java 8 环境),由于elasticsearch不能用root启动,所以需要和elasticsearch用户共享java环境。如果没有可以使用以下命令安装:
yum install java-1.8.0-openjdk
安装完成,查看java版本
java -version
安装
在Linux系统下,获取Elasticsearch安装包的命令如下所示。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.9-linux-x86_64.tar.gz
获取安装包后,可以使用如下命令解压缩安装包:
tar -xzf elasticsearch-7.17.9-linux-x86_64.tar.gz
在elasticsearch文件夹中有bin、config、jdk、lib、logs、modules、plugins和文件夹。
- bin文件夹下存放的是二进制脚本,包括启动Elasticsearch节点和安装的Elasticsearch插件。
- config文件夹下存放的是包含elasticsearch.yml在内的配置文件。
- jdk文件夹下存放的是Java运行环境。
- lib文件夹下存放的是Elasticsearch自身所需的jar文件。
- logs文件夹下存放的是日志文件。
- modules文件夹下存放的是Elasticsearch的各个模块。
- plugins文件夹下存放的是配置插件,每个插件都包含在一个子目录中。
启动命令
./bin/elasticsearch
在Elasticsearch运行过程中,如果需要将Elasticsearch作为守护进程运行,则需要在命令行上指定命令参数“-d”,并使用 “-p”选项将Elasticsearch的进程ID记录在文件中,启动命令如下:
./bin/elasticsearch -d -pid
在关闭Elasticsearch时,可以根据PID文件中记录的进程ID执行pkill命令,具体命令如下:
pkill -F pid
在Elasticsearch启动后,需要检查Elasticsearch是否能够运行。我们可以通过向本地主机上的端口9200发送HTTP请求来测试本地Elasticsearch节点是否正在运行,发送请求如下:
curl http://localhost:9200/
我们会看到如下输出结果:
{
"name" : "localhost.localdomain",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "4Bq-PMVjTROxs7HPGplgXQ",
"version" : {
"number" : "7.17.9",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "ef48222227ee6b9e70e502f0f0daa52435ee634d",
"build_date" : "2023-01-31T05:34:43.305517834Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
表示成功。
如果提示以下拒绝连接
curl: (7) Failed connect to localhost:9200; 拒绝连接
那么我们需要配置一下
vim conf/elasticsearch.yml
设置network.host: 0.0.0.0 #设置ip地址,任意网络均可访问
Kibana
Kibana是一个基于Web的图形界面,可以让用户在Elasticsearch中使用图形和图表对数据进行可视化。在实际使用过程中,Kibana一般用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据。Kibana利用Elasticsearch的REST接口检索数据,不仅允许用户创建自己的数据定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。可以说从跟踪、查询、负载到理解请求如何流经整个应用,Kibana都能轻松完成。
安装
下载安装包
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.17.9-linux-x86_64.tar.gz
解压
tar -xzf kibana-7.17.9-linux-x86_64.tar.gz
启动
./bin/kibana
在浏览器的地址栏中输入http://localhost:5601
,打开Kibana页面