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
- 从旧文档中检索JSON 2. 修改它 3. 删除旧文档 4. 索引新文档
#注意:这里多了_update标识 PUT换成了POSTPOST /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搜索
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