文章目录
- 1、工作当中日志的重要性
- 2、日志收集的工具有那些
- Solr与es的对比与选型
- ElasticSearch vs Solr总结
- 3、elk简单介绍
- 4、倒排查询原理
- 5、数据的分类
- 6、es用户场景
- Elasticsearch简介
- 7、部署es的方法
- 8、和es交互的方式
- 8.1、了解概念
- ES常用的数据类型可分为3大类
- 核心数据类型
- 8.2、使用命令行的方式和es交互
- 8.3、使用插件head和es交互
- 8.4、使用nodejs方式来部署head插件
1、工作当中日志的重要性
1、分析日志来判断系统运行的状态是否正常
2、分析日志来判断程序是否有bug存在
3、分析日志来监控web服务器的流量,页面的响应时间超过1s
4、分析日志来优化数据库的慢查询语句
5、根据用户访问情况针对业务侧进行不断完善
。。。。
2、日志收集的工具有那些
1、日志易(收费)
2、splunk(国外的软件,按流量收费)
3、elk/efk工具
elasticsearch+logstash+kibana elk
elasticsearch+filebeat+kibana efk
4、Solr
Solr与es的对比与选型
在底层应用都是属于Lucene,在应用范围上包括淘宝电商、百度、github等,
Solr是Apach基金会下的一个顶级的开源项目,采用java开发,他是基于Lucene的全文搜索服务器,Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置,可拓展,并对索引进行了优化
Solr可以独立运行,运行在etty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用POST方法向Solr服务器发送一个描述Field及其内容的XML文档,Solr根据xml文档添加、删除、更新索引。 Solr搜索只需要发送HTTP GET请求,然后对Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
Solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的APl接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。
索引速度:
如果单纯对已有数据进行搜索solr更快,
致命弱点: 实时建立索引会产生io阻塞,查询性能是es的1/5
随着数据量加大 Solr的搜索速度越来越低
ElasticSearch vs Solr总结
1、es基本是开箱即用(解压就可以用!) ,非常简单。Solr安装略微复杂一丢丢!
2、Solr 利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。
3、Solr 支持更多格式的数据,比如JSON、XML、 CSV ,而Elasticsearch仅支持json文件格式。
4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
5、Solr 查询快,但更新索引时慢(即插入删除慢) , 用于电商等查询多的应用;
●ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
●Solr 是传统搜索应用的有力解决方案,但Elasticsearch 更适用于新兴的实时搜索应用。
6、Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。
3、elk简单介绍
1、elasticsearch 端口号:9200 9300
非关系型的数据库
功能:存储数据,分析数据,搜索数据
发展史:使用java语言,在luncen的基础上做二次封装,提供restful接口
搜索的原理:倒排索引
特点:水平扩展方便、提供高可用、分布式存储、使用简单
2、logstash/filebeat
logstash功能:收集日志,中转站
filebeat功能:专门收集日志
3、kibana 端口号: 5601
功能:做数据的展示(图形、饼状图、表格、浮动云图形)
4、倒排查询原理
1、把信息存储es数据库,分成一个一个的词语
2、根据搜索的内容,进行匹配,匹配上的语句权重加一
3、把匹配到的内存,推送给用户
5、数据的分类
1、关系型的数据库
mysql 、oracle 、sql-server。。
2、非关系型的数据库
es、redis、mongodb
关系的定义:
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
- 性能
NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。 - 可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
6、es用户场景
1、电商平台
2、高亮显示
3、数据的分析(elk)
Elasticsearch简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch 是一个分布式的、开源的搜索分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化。
Elasticsearch 是基于 Apache Lucene 的。
Elasticsearch 因其简单的 REST API、分布式特性、可塑、可扩展而闻名。
Elasticsearch 是 Elastic 产品栈的核心,Elastic 产品栈是个开源工具集合,用于数据接收、存储、分析、可视化
- 文档搜索结合ElasticSearch高亮显示,输入实时搜索(search-asyour-type)和纠错(did-you-main)显示
- 英国卫报结合ElasticSearch结合用户日志和社交网络数据给用户实时反馈
- Github使用ElasticSearch检索1300亿行代码
7、部署es的方法
1、源码的方式:
特点:安装之后的路径统一,需要手动写启动脚本
2、rpm的方式:
特点:安装之后路径分散,不需要手动写启动脚本
3、docker的方式:
特点:会使用docker,专人来维护
部署es的流程
1、安装jdk环境
mkdir /opt/es-software
cd /opt/es-software
rpm -ivh jdk-8u102-linux-x64.rpm
java -version
2、安装elasticsearch
rpm -ivh elasticsearch-6.6.0.rpm
rpm -qc elasticsearch
3、简单介绍安装后的文件的作用
/etc/elasticsearch/elasticsearch.yml#es的主要配置文件
/etc/elasticsearch/jvm.options #配置jvm虚拟机的内存信息
/etc/sysconfig/elasticsearch #配置相关系统变量
/usr/lib/sysctl.d/elasticsearch.conf#配置相关系统变量
/usr/lib/systemd/system/elasticsearch.service#es的服务程序
4、修改es的主配置文件
[root@es01 elasticsearch]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
23:node.name: gaoxu01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
43:bootstrap.memory_lock: true
network.host: 10.0.0.240
http.port: 9200
5、服务启动后有报错
tail -f /var/log/elasticsearch/elasticsearch.log
[2020-04-08T13:29:53,773][ERROR][o.e.b.Bootstrap ] [gaoxu01] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
#解决方法
官网地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/index.html memory_lock_check
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
#重新载入
systemctl daemon-reload
#重新es服务
systemctl restart elasicsearch
#查询端口
netstat -lntup
ss -lnt
#命令行的方式检查
curl http://10.0.0.240:9200
curl http://localhost:9200
8、和es交互的方式
8.1、了解概念
1、索引:相当于在mysql当中创建一个数据库(database)
2、类型:相当于数据库当中的一张表(table)
3、docs:表中字段信息
ES常用的数据类型可分为3大类
- 核心数据类型
- 复杂数据类型
- 专业数据类型
核心数据类型
(1)字符串
- text 属于全量索引,搜索时会自动使用分词器进⾏分词再匹配
- keyword 不分词,搜索时需要匹配完整的值
(2)数值型
- 整型: byte,short,integer,long
- 浮点型: float, half_float, scaled_float,double
(3)日期类型
- date
json没有date类型,插入|更新文档|字段时怎么表示date类型?
#mapping,将字段类型设置为date
"type" : "date"
#插入|更新此字段的值时,有3种表示方式
#使用固定格式的字符串
"2020-04-18"、"2020/04/18 09:00:00"
#值使用长整型的时间戳,1970-01-01 00:00:00,s
1610350870
#值使用长整型的时间戳,ms
1641886870000
(4)范围型
integer_range, long_range, float_range,double_range,date_range
比如招聘要求年龄在[20, 40]上,mapping:
age_limit :{
"type" : "integer_range"
}
插入|更新文档|字段时,值写成json对象的形式:
"age_limit" : {
"gte" : 20,
"lte" : 40
}
8.2、使用命令行的方式和es交互
常用的方法
PUT\POST\DELETE\GET
1、创建一个索引
curl -XPUT http://10.0.0.240:9200/gaoxu
2、往这个索引里面写入一条数据
curl -XPUT '10.0.0.211:9200/gaoxu/student/1?pretty' -H 'Content-Type: application/json' -d'
{
"first_name" : "zhang",
"last_name": "san",
"age" : 28,
"about" : "I love to go rock climbing",
"interests": [ "sports" ]
}'
## 内容解析
本质es属于数据库, gaoxu为数据库库名(索引),student为一张表(类型)
1 :指定一个唯一id号
pretty:固定格式
-H: 头信息
-d: 数据内容
## 索引有多少索引:
curl http://localhost:9200/_cat/indices?v
根据索引往下查询type类型
curl -XGET http://localhost:9200/uccaut
根据type类型往下细分具体查找
curl -XGET http://localhost:9200/uccaut/custom
curl -XGET http://localhost:9200/uccaut/commodity/10089?pretty
3、写第二条数据
curl -XPUT '10.0.0.240:9200/gaoxu/student/2?pretty' -H 'Content-Type: application/json' -d' {
"first_name": "li",
"last_name" : "si",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}'
4、随机生成一个id,写入数据
curl -XPOST '10.0.0.240:9200/gaoxu/student/?pretty' -H 'Content-Type: application/json' -d' {
"first_name": "li",
"last_name" : "mingming",
"age" : 45,
"about": "I like to swime",
"interests": [ "reading" ]
}'
5、查询指定id为1的数据信息
curl -XGET '10.0.0.240:9200/gaoxu/student/1?pretty'
6、查询指定索引的所有数据
curl -XGET '10.0.0.240:9200/gaoxu/_search/?pretty'
7、删除指定id为1的数据
curl -XDELETE '10.0.0.240:9200/gaoxu/student/1?pretty'
8、删除指定索引里面所有的数据,包括索引本身
curl -XDELETE '10.0.0.240:9200/gaoxu/?pretty'
8.3、使用插件head和es交互
#部署head插件有多种方法
1、nodejs npm
2、谷歌自带的head插件
3、docker的方式来部署
通过head插件写入数据
1、创建一个索引
http://10.0.0.240:9200/gaoxu PUT
2、插入数据:
http://10.0.0.240:9200/gaoxu/student/1 PUT
{
"first_name":"lao",
"last_name":"wang",
"age":25,
"about":"I love to go rock climbing",
"interests":["sports"]
}
3、插入第二条数据:
http://10.0.0.240:9200/gaoxu/student/2 PUT
{
"first_name":"wang",
"last_name":"wu",
"age":27,
"about":"I love to go rock climbing",
"interests":["music"]
}
4、不指定id号随机插入一条数据:
put不支持随机分配id号,post支持随机分配id号
http://10.0.0.240:9200/gaoxu/student/ POST
{
"first_name":"zhao",
"last_name":"liu",
"age":29,
"about":"I love to go rock climbing",
"interests":["eatting"]
}
5、查询指定id号的数据信息:
http://10.0.0.240:9200/gaoxu/student/1 GET
6、查询指定索引所有数据信息:
http://10.0.0.240:9200/gaoxu/_search GET
7、删除指定的数据:
http://10.0.0.240:9200/gaoxu/student/1 DELETE
8、删除指定索引里面的数据:
http://10.0.0.240:9200/gaoxu/ DELETE
8.4、使用nodejs方式来部署head插件
1、安装epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、安装 nodejs npm
yum install nodejs npm openssl screen -y#配置nodejs环境
3、安装组件
npm install -g cnpm --registry=https://registry.npm.taobao.org
4、克隆代码
官网https://github.com/mobz/elasticsearch-head
cd /opt/
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
cnpm install
screen -S es-head
cnpm run start
Ctrl+A+D
5、修改es配置文件最下面加入下面内容
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
#重启es服务
systemctl restart elasticsearch
6、出现node版本不兼容
cd /opt/es-software
tar xf node-v12.13.0-linux-x64.tar.xz -C /opt
ln -s /opt/node-v12.13.0-linux-x64 /opt/node
#添加环境变量
vim /etc/profile
export PATH=/opt/node/bin:$PATH
#把环境变更生效
source /etc/profile
#重新安装
cnpm install