ElasticStack系列,第一章

编程

ElasticStack系列,第一章

一、Elastic Stack简介

ElasticStack目前由四部分组成:

ElasticSearch:核心存储和检索引擎

Kibana:数据可视化

Logstash:高吞吐量数据处理引擎

Beats:采集数据

ElasticSearch:基于Java,是一个开源分布式搜索引擎,特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格,多数据源,自动搜索负载等。

logstash:基于Java,是一个开源的用于收集,分析和存储日志的工具。(主要用beats做数据采集)

kibana:基于nodejs,也是一个开源的免费工具,kibana可以为logstash和elasticsearch提供的日志分析友好的web界面,可以汇总、分析和搜索重要数据日志。

beats:是elastic公司开源的一款采集系统监控数据的代理agent,实在被监控服务器上以客户端形式运行的数据搜集器的统称。可以直接把数据发送给elasticsearch或者通过logstash发送给elasticsearch,然后进行后续的数据分析活动。

Beats由如下组成:

Packetbeat:是一个网络数据包分析器,用于监控、收集网络流量信息,Packetbeat嗅探服务器之间的流量,解析应用层协议,并关联到消息的处理,其支 持ICMP (v4 and v6)、DNS、HTTP、Mysql、PostgreSQL、Redis、MongoDB、Memcache等协议;

Filebeat:用于监控、收集服务器日志文件,其已取代 logstash forwarder;

Metricbeat:可定期获取外部系统的监控指标信息,其可以监控、收集 Apache、HAProxy、MongoDBMySQL、Nginx、PostgreSQL、Redis、System、Zookeeper等服务;

Winlogbeat:用于监控、收集Windows系统的日志信息;

二、ElasticSearch简介和安装

1、简介

ElasticSearch是一个基于Lucene的搜索服务器。

它提供了一个分布式多用户能力的全文搜索引擎,基于RestFul web接口。

ElasticSearch使用Java开发的,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2、安装

下载:https://www.elastic.co/cn/downloads/elasticsearch

单机版安装:

##创建elsearch用户,Elasticsearch不支持root用户运行

useradd elsearch

##在opt下创建elasticStack

mkdir elasticStack

##在elasticStack中创建es

cd elasticStack

mkdir es

##更改elasticStack文件夹的用户权限

chown elsearch:elsearch elasticStack/ -R

【目录elasticStack和es文件夹都所属elsearch了】

##切换用户elsearch

su elsearch

##上传或下载elasticsearch-6.5.4.tar.gz

##解压到当前目录

tar -xvf elasticsearch-6.5.4.tar.gz -C /opt/elasticStack/es

配置config:

##修改配置文件

cd /conf

vim elasticsearch.yml

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

##说明:在Elasticsearch中如果,network.host不是localhost或者127.0.0.1的话,

##就会认为是生产环境,会对环境的要求比较高,我们的测试环境不一定能够满足,一般情况下需要修改2处配置,如下:

#1:修改jvm启动参数

vim conf/jvm.options

-Xms128m #根据自己机器情况修改原来是-Xms1g

-Xmx128m #原来是-Xmx1g

##2:一个进程在VMAs(虚拟内存区域)创建内存映射最大数量【用root用户操作:su root】

vim /etc/sysctl.conf

vm.max_map_count=655360 #新增

sysctl -p #配置生效

启动:

##启动ES服务【以elsearch用户启动】

su elsearch

cd bin

./elasticsearch 或 ./elasticsearch -d #后台启动

##访问:

http://你的主机IP:9200/

##阿里云如果拒绝访问,你需要给ESC实例设置安全组规则:

启动过程中会发现一些错误,总结如下:

1、ERROR: [1] bootstrap checks failed,

[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

#解决:切换到root用户,编辑limits.conf 添加类似如下内容

vi /etc/security/limits.conf

添加如下内容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

2、max number of threads [1024] for user [elsearch] is too low, increase to at least [4096]

#解决:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf

#修改如下内容:

* soft nproc 1024

#修改为

* soft nproc 4096

3、system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

#解决:Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true

vim config/elasticsearch.yml

添加:

bootstrap.system_call_filter: false

3、ElasticSearch-head

lasticsearch-head是一个为ES开发的一个页面客户端工具,其源码托管于GitHub,

地址为:https://github.com/mobz/elasticsearch-head

head提供了4种安装方式:

源码安装,通过npm run start启动(不推荐)

通过docker安装(推荐)

通过chrome插件安装(推荐)

通过ES的plugin方式安装(不推荐)

通过docker安装

#拉取镜像

docker pull mobz/elasticsearch-head:5

#创建容器

docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

#启动容器

docker start elasticsearch-head

通过浏览器进行访问:

http://你的主机IP:9100   【docker暴露的9100端口】

注意:

由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置,如下:

vim elasticsearch.yml

http.cors.enabled: true http.cors.allow-origin: "*"

通过chrome插件的方式安装不存在该问题。

chrome插件的方式安装

https://github.com/liufengji/es-head

下载然后解压

访问:chrome://extensions/

打开开发者模式

加载已解压的扩展程序

三、ElasticSearch快速入门

1、基本概念

索引

索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。

可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。

Elasticsearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),

每个分片可以有多个副本(replica)。

文档

存储在Elasticsearch中的主要实体叫文档(document)。

用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。

Elasticsearch和MongoDB中的文档类似,都可以有不同的结构,但Elasticsearch的文档中,相同字段必须有相同类型。

文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多值字段(multivalued)。

每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。

文档类型

在Elasticsearch中,一个索引对象可以存储很多不同用途的对象。

例如,一个博客应用程序可以保存文章和评论。

每个文档可以有不同的结构。

不同的文档类型不能为相同的属性设置不同的类型。

例如,在同一索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。

映射

所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。

一般由用户自己定义规则。

2、RestFul API

在Elasticsearch中,提供了功能丰富的RESTful API的操作,包括基本的CRUD、创建索引、删除索引等操作。

2.1)、创建索引

在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在Elasticsearch中提供了非结构化的索引,就是不需要创建索引结构,即可写入数据到索引中,实际上在Elasticsearch底层会进行结构化操作,此操作对用户是透明的。

(POSTMAN请求即可)

PUT /haoke

{

"settings": {

"index": {

"number_of_shards": "2",

"number_of_replicas": "0"

}

}

}

## "number_of_shards" #分片数

## "number_of_replicas" #副本数

2.2)、删除索引

(POSTMAN请求即可)

DELETE /haoke

{

"acknowledged": true

}

2.3)、插入数据

URL规则

POST /{索引}/{类型}/{id}    {id}可有可无,没有会自动生成一个随机数

POST /haoke/user/1001

##数据

{

"id":1001,

"name":"张三",

"age":20,

"sex":"男"

}

##结果

{

_index: "haoke"

_type: "user"

_id: "1001"

_version: 1

result: "created" ##结果

_shards: {

total: 1

successful: 1

failed: 0

}-

_seq_no: 0

_primary_term: 1

}

2.4)、更新数据

在Elasticsearch中,文档数据是不可以修改的,但是可以通过覆盖的方式进行更新。(先删除后新增的方式)

覆盖更新

URL规则:

PUT /{索引}/{type}/{id}

PUT /haoke/user/1001

##数据

{

"id":1001,

"name":"张三",

"age":21,

"sex":"女"

}

##结果

{

_index: "haoke"

_type: "user"

_id: "1001"

_version: 2 ##版本

result: "updated" ##结果

_shards: {

total: 1

successful: 1

failed: 0

}-

_seq_no: 2

_primary_term: 1

}

局部更新

URL规则:

POST /{索引}/{type}/{id}/_update

  1. 从旧文档中检索JSON 2. 修改它 3. 删除旧文档 4. 索引新文档

#注意:这里多了_update标识   PUT换成了POST

POST /haoke/user/1001/_update

##数据

{

"doc":

{

"age":23

}

}

##结果

{

_index: "haoke"

_type: "user"

_id: "1001"

_version: 4

result: "updated"

_shards: {

total: 1

successful: 1

failed: 0

}-

_seq_no: 4

_primary_term: 1

}

2.5)、删除数据

URL规则:

DELETE /{索引}/{类型}/{id}

在Elasticsearch中,删除文档数据,只需要发起DELETE请求即可。

注意:

删除一个文档也不会立即从磁盘上移除,它只是被标记成已删除状态。

Elasticsearch将会在你之后添加更多索引的时候才会在后台进行删除内容的清理。

测试:

DELETE /haoke/user/1001

结果:

{

_index: "haoke"

_type: "user"

_id: "1001"

_version: 5

result: "deleted" ##结果

_shards: {

total: 1

successful: 1

failed: 0

}-

_seq_no: 5

_primary_term: 1

}

2.6)、查询数据

A、根据ID搜索

URL规则:

GET /{索引}/{类型}/{id}

GET /haoke/user/FD_2gm4BoifuYiH46rUl

结果:

{

_index: "haoke"

_type: "user"

_id: "FD_2gm4BoifuYiH46rUl"

_version: 1

found: true

_source: {

id: 1002

name: "李四"

age: 21

sex: "男"

}-

}

B、查询所有

URL规则:

GET /{索引}/{类型}/_search

注意:

默认返回10条数据

更多数据要做分页查询

测试:

GET /haoke/user/_search

##结果:

{

took: 9

timed_out: false

_shards: {

total: 2

successful: 2

skipped: 0

failed: 0

}-

hits: {

total: 1

max_score: 1

hits: [1] ##击中,查询出1条数据

0: {

_index: "haoke"

_type: "user"

_id: "FD_2gm4BoifuYiH46rUl"

_score: 1 ##得分

_source: {

id: 1002

name: "李四"

age: 21

sex: "男"

}-

}-

-

}-

}

C、根据字段搜索

URL规则:

GET /{索引}/{类型}/_search?q=字段:字段值

测试:

GET /haoke/user/_search?q=age:21

##结果:

{

took: 2

timed_out: false

_shards: {

total: 2

successful: 2

skipped: 0

failed: 0

}-

hits: {

total: 1

max_score: 1

hits: [1] ##击中

0: {

_index: "haoke"

_type: "user"

_id: "FD_2gm4BoifuYiH46rUl"

_score: 1 ##得分

_source: {

id: 1002

name: "李四"

age: 21

sex: "男"

}-

}-

-

}-

}

2.7)、DSL搜索

_index

_type

_id

_score

id

name

age

sex

haoke

user

FT_Hh24BoifuYiH4yLVZ

1

1002

李四

21

haoke

user

Fj_Ih24BoifuYiH4mrUZ

1

1001

张三

20

haoke

user

Fz_Ih24BoifuYiH49rXb

1

1004

赵六

32

haoke

user

GD_Jh24BoifuYiH4ULXB

1

1005

孙七

33

haoke

user

GT_Jh24BoifuYiH4frUv

1

1003

王五

31

a、查询年龄等于20的

{

"query":{

"match":{

"age":20

}

}

}

b、查询年龄大于30岁的男性

{

"query":{

"bool":{

"filter":{ ##过滤

"range":{ ##范围

"age":{

"gt":30

}

}

},

"must":{ ##必须

"match":{ ##匹配

"sex":"男"

}

}

}

}

}

//TODO 有关DSL的详细叙述,之后再写

2.8)、高亮显示

name高亮显示:

{

"query":{

"match":{

"name":"张三 李四"

}

},

"highlight":{

"fields":{

"name":{}

}

}

}

2.9)、聚合

类似group by

{

"aggs":{

"all_interests":{

"terms":{

"field":"age"

}

}

}

}

以上只是简单的阐述一下,详细内容之后会做解析

以上是 ElasticStack系列,第一章 的全部内容, 来源链接: utcz.com/z/510956.html

回到顶部