Skip to content
在本页面
微信公众号

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中安装部署的时候,需要系统为其提供若干系统配置。如:应用可启动的线程数、应用可以在系统中划分的虚拟内存、应用可以最多创建多少文件等。

修改限制信息

shell
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环境。如果没有可以使用以下命令安装:

shell
yum install java-1.8.0-openjdk

安装完成,查看java版本

shell
java -version

安装

在Linux系统下,获取Elasticsearch安装包的命令如下所示。

shell
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.9-linux-x86_64.tar.gz

获取安装包后,可以使用如下命令解压缩安装包:

shell
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文件夹下存放的是配置插件,每个插件都包含在一个子目录中。

启动命令

shell
./bin/elasticsearch

在Elasticsearch运行过程中,如果需要将Elasticsearch作为守护进程运行,则需要在命令行上指定命令参数“-d”,并使用 “-p”选项将Elasticsearch的进程ID记录在文件中,启动命令如下:

shell
./bin/elasticsearch -d -pid

在关闭Elasticsearch时,可以根据PID文件中记录的进程ID执行pkill命令,具体命令如下:

shell
pkill -F pid

在Elasticsearch启动后,需要检查Elasticsearch是否能够运行。我们可以通过向本地主机上的端口9200发送HTTP请求来测试本地Elasticsearch节点是否正在运行,发送请求如下:

shell
curl http://localhost:9200/

我们会看到如下输出结果:

js
{
  "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"
}

表示成功。

如果提示以下拒绝连接

shell
curl: (7) Failed connect to localhost:9200; 拒绝连接

那么我们需要配置一下

shell
vim conf/elasticsearch.yml

设置network.host: 0.0.0.0 #设置ip地址,任意网络均可访问

Kibana

Kibana是一个基于Web的图形界面,可以让用户在Elasticsearch中使用图形和图表对数据进行可视化。在实际使用过程中,Kibana一般用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据。Kibana利用Elasticsearch的REST接口检索数据,不仅允许用户创建自己的数据定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。可以说从跟踪、查询、负载到理解请求如何流经整个应用,Kibana都能轻松完成。

安装

下载安装包

shell
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.17.9-linux-x86_64.tar.gz

解压

shell
tar -xzf kibana-7.17.9-linux-x86_64.tar.gz

启动

shell
./bin/kibana

在浏览器的地址栏中输入http://localhost:5601,打开Kibana页面

Released under the MIT License.