JavaEE 企业级分布式高级架构师(十七)ElasticSearch全文检索(2)
发布日期:2021-06-28 21:08:28 浏览次数:2 分类:技术文章

本文共 11842 字,大约阅读时间需要 39 分钟。

ElasticSearch学习笔记

实操篇

ElasticSearch相关软件安装

ES单机安装

下载安装包

  • 官网地址:https://www.elastic.co/cn/
  • 下载地址:https://www.elastic.co/cn/downloads/elasticsearch
    在这里插入图片描述
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz

解压缩修改配置文件

  • cd 到 ElasticSearch 下载目录,并进行解压缩
cd /usr/toolstar -zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz -C /usr/apps/elasticsearch/
  • cd 到 ElasticSearch 解压缩目录,并修改配置文件
cd /usr/apps/elasticsearch/elasticsearch-7.2.0vim config/elasticsearch.yml
  • 注意修改点:
cluster.name: my-applicationnode.name: node-1# 设置外网访问,默认配置外网无法访问network.host: 192.168.254.120http.port: 9200# 设置集群master节点cluster.initial_master_nodes: ["node-1"]
  • 如果不设置集群节点,就会报错:
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

启动ElasticSearch

  • 不要以root用户进行启动
    在这里插入图片描述
  • 设置用户名和密码
useradd yangwei echo "Password" | passwd yangwei --stdin
  • 修改elasticsearch目录所有者
[root@localhost elasticsearch-7.2.0]# chown -R yangwei:yangwei ./

在这里插入图片描述

  • 修改root权限
vim /etc/sudoers

在这里插入图片描述

  • 启动
su yangweibin/elasticsearch

在这里插入图片描述

修改系统环境变量

vim /etc/sysctl.conf
  • 添加如下内容:
[yangwei@localhost elasticsearch-7.2.0]$ sudo vim /etc/sysctl.conf

在这里插入图片描述

  • 修改完后需要重新启动才能生效
[yangwei@localhost elasticsearch-7.2.0]$ sysctl -a | grep vm.max_map_count[yangwei@localhost elasticsearch-7.2.0]$ sudo sysctl -w vm.max_map_count=262144

在这里插入图片描述

修改JVM分配大小

主要xms和xmx大小要一致

vim config/jvm.options

在这里插入图片描述

修改最大文件描述符数量和用户最大线程数

[yangwei@localhost elasticsearch-7.2.0]$ sudo vim /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 4096* hard nproc 4096

在这里插入图片描述

  • 注意:此文件修改后需要重新登录用户,才会生效。
  • 重启查看:
# 查看最大文件描述符ulimit -Hn # 查看用户最大线程数ulimit -u

在这里插入图片描述

后台启动

bin/elasticsearch &# 或者bin/elasticsearch -d
  • 启动成功
    在这里插入图片描述
  • 查看进程
    在这里插入图片描述
  • 访问一下:http://192.168.254.120:9200/
    在这里插入图片描述
    http://192.168.254.120:9200/_cat/health
    在这里插入图片描述

使用Docker容器安装ES

#搜索镜像docker search elasticsearch#拉取镜像docker pull elasticsearch:6.2.4#创建容器docker create --name elasticsearch --net host -e "discovery.type=single- node" -e"network.host=192.168.254.120" elasticsearch:6.2.4#启动docker start elasticsearch#查看日志docker logs elasticsearch

Head插件安装

head插件主要用途

  • elasticsearch-head是一个用来浏览、与Elastic Search簇进行交互的web前端展示插件。
  • elasticsearch-head是一个用来监控Elastic Search状态的客户端插件。
  • elasticsearch主要有以下三个主要操作:
    • 簇浏览,显示簇的拓扑并允许你执行索引(index)和节点层面的操作。
    • 查询接口,允许你查询簇并以原始json格式或表格的形式显示检索结果。
    • 显示簇状态,有许多快速访问的tabs用来显示簇的状态。
    • 支持Restful API接口,包含了许多选项产生感兴趣的结果,包括:
      • ① 请求方式:get、put、post、delete;json请求数据,节点node,路径path。
      • ② JSON验证器。
      • ③ 定时请求的能力。
      • ④ 用javascript表达式传输结果的能力。
      • ⑤ 统计一段时间的结果或该段时间结果比对的能力。
      • ⑥ 以简单图表的形式绘制传输结果。

安装

  • 下载node,并解压
# 下载nodejs,head插件运行依赖nodewget https://npm.taobao.org/mirrors/node/v14.13.0/node-v14.13.0-linux-x64.tar.xz# 解压tar -xf node-v14.13.0-linux-x64.tar.xz -C /usr/apps/
  • 配置profile:
[root@centos102 apps]# vim /etc/profile# 将node的路径添加到path中export NODE_HOME=/usr/apps/node-v14.13.0-linux-x64export PATH=$PATH:${NODE_HOME}/bin# 刷新配置[root@centos102 apps]# source /etc/profile[root@centos102 apps]# node -vv14.13.0
  • 下载 head 插件
# 下载wget https://github.com/mobz/elasticsearch-head/archive/master.zip# 解压unzip master.zip
  • 配置淘宝镜像加速
npm install -g cnpm --registry=https://registry.npm.taobao.org# 进入head插件解压目录,执行安装命令[root@centos102 elasticsearch-head-master]# npm start> elasticsearch-head@0.0.0 start /usr/apps/elasticsearch-head-master> grunt serverRunning "connect:server" (connect) taskWaiting forever...Started connect web server on http://localhost:9100

运行

# 启动head插件npm start
  • 访问:

在这里插入图片描述

  • 启用cors跨域支持:当head插件访问es时,必须在elasticsearch中启用CORS,否则您的浏览器将拒绝跨域。
# 在elasticsearch配置中增加:http.cors.enabled: true# 还必须设置,http.cors.allow-origin因为默认情况下不允许跨域。http.cors.allow-origin: "*" 是允许配置的,但由于这样配置的任何地方都可以访问,所以有安全风险。http.cors.allow-origin: "*"
  • 再次访问head插件:

在这里插入图片描述

LogStash安装

LogStash介绍

  • Logstash是一个具有实时管道的开源数据收集引擎。可以动态地统一不同来源的数据,并将数据归到不同目的地。也是一个管理事件和日志工具。你可以用它来收集日志,分析它们,并将它们储存起来以供以后使用。
  • Logstash 通常都是和 Kibana 以及 Elasticsearch 一起使用。
  • 文档:

LogStash安装

  • 下载并解压
# 注意版本和elasticsearch,kibana 必须保持一致wget https://artifacts.elastic.co/downloads/logstash/logstash-7.2.0.tar.gz # 解压tar -zxvf logstash-7.2.0.tar.gz -C /usr/apps
  • 启动与使用:
# 基本的 intput output# stdin stdout 输入输出插件./logstash -e 'input{ stdin{} } output{ stdout{} }'# codec./logstash -e 'input{ stdin{} } output{ stdout{ codec => json } }'# 日志内容写入elasticsearch./logstash -e 'input{ stdin{} } output{ elasticsearch{hosts => ["192.168.254.120:9200"]} }'# 日志内容写入elasticsearch,同时输出# 注意elasticsearch插件的语法格式:hosts 对应数组./logstash -e 'input{ stdin{} } output{ elasticsearch{hosts => ["192.168.254.120:9200"]} stdout{} }'

-e:设置启动参数

input、output:是logstash的插件
stdin{}:等待输入插件
stdout{}:输出日志插件
codec:编码创建

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

LogStash相关插件

input插件
  • 输入比较常见的几个插件:stdin、file、http、tcp
Plugin Description Github repository
stdin Reads events from standard input
file Streams events from files
http Receives events over HTTP or HTTPS
tcp Reads events from a TCP socket
output插件
  • 输入比较常见的几个插件:stdin、file、http、tcp
Plugin Description Github repository
stdout Prints events to the standard output
file Writes events to files on disk
http Sends events to a generic HTTP or HTTPS endpoint
tcp Writes events over a TCP sockett
  • 把日志内容输出到elasticsearch插件:
Plugin Description Github repository
elasticsearch Stores logs in Elasticsearch
codec插件
  • Codec(Code Decode)Plugin作用于input和output plugin,负责将数据在原始与Logstash之间转换,常见的codec有:
    • plain:读取原始内容
    • dots:将内容简化为点进行输出
    • rubydebug:将内容按照ruby格式输出,方便调试 line 处理带有换行符的内容
    • json:处理json格式的内容
    • multiline:处理多行数据的内容

LogStash配置

创建配置
  • 在config目录下创建 logstash.conf 配置文件:

在这里插入图片描述

配置语法
  • logstash.conf 配置:
input {
stdin {
} }output {
elasticsearch {
hosts => ["192.168.254.120:9200"] } stdout {
codec => rubydebug }}
  • 启动:
bin/logstash -f config/logstash.conf

File日志收集

  • file.conf配置:
# 建立新的配置文件mv logstash.conf file.conf# 详细配置如下:input {
file {
path => "/var/log/messages" # 收集messages文件日志 type => "system" start_position => "beginning" # 记录上次收集的位置 }}output {
elasticsearch {
hosts => ["192.168.254.120:9200"] # 写入elasticsearch的地址 index => "system-%{+YYYY.MM.dd}" # 定义索引的名称 } stdout {
codec => rubydebug }}
  • 启动:
bin/logstash -f config/file.conf

Java日志收集

  • 在原来file文件的基础上进行编辑
input {
file {
path => "/var/log/messages" type => "system" start_position => "beginning" } # 加一个file文件收集日志插件,收集elasticsearch日志、es就是java语言开发的。 file {
path => "/usr/apps/elasticsearch-7.2.0/logs/yw-es.log" type => "es-info" start_position => "beginning" }}output {
if [type] == "system" {
elasticsearch {
hosts => ["192.168.254.120:9200"] index => "system-%{+YYYY.MM.dd}" } } # 判断,导入到不同的索引库,否则会放入同一个索引库中 if [type] == "es-info" {
elasticsearch {
hosts => ["192.168.254.120:9200"] index => "es-info-%{+YYYY.MM.dd}" } } stdout {
codec => rubydebug }}
  • 问题:目前导入日志都是按照行导入的、但是有些日志多行是一句话,如果分开的话,就不太容查看日志的完整的意思了。

在这里插入图片描述

  • 解决方案:可以使用codec来进行解决,codec把多行日志:
input {
file {
path => "/var/log/messages" type => "system" start_position => "beginning" } file {
path => "/usr/apps/elasticsearch-7.2.0/logs/yw-es.log" type => "es-info" start_position => "beginning" # 使用正则表达式,合并多行日志 codec => multiline {
pattern => "^\[" # 发现中括号,就合并日志 negate => true what => "previous" } }}output {
if [type] == "system" {
elasticsearch {
hosts => ["192.168.254.120:9200"] index => "system-%{+YYYY.MM.dd}" } } if [type] == "es-info" {
elasticsearch {
hosts => ["192.168.254.120:9200"] index => "es-info-%{+YYYY.MM.dd}" } } stdout {
codec => rubydebug }}

项目日志

  • 配置如下:
input {
tcp {
port => 9600 codec => json }}output {
elasticsearch {
hosts => ["192.168.254.120:9200"] index => "yw-log-%{+YYYY.MM.dd}" } stdout {
codec => rubydebug }}

Kibana安装

Kibana插件介绍

  • kibana 插件提供了Marvel监控的UI界面。
  • kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台。使用kibana可以查询、查看并与存储在elasticsearch索引的数据进行交互操作。使用kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。 kibana使得理解大容量的数据变得非常容易。它非常简单,基于浏览器的接口使我们能够快速的创建和分享显示elasticsearch查询结果实时变化的仪表盘。

Kibana下载安装

  • 下载并解压:
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gztar -zxvf kibana-7.2.0-linux-x86_64.tar.gz -C /usr/apps/elasticsearch/
  • 修改配置文件:
cd /usr/apps/elasticsearch/kibana-7.2.0-linux-x86_64/vim config/kibana.yml

在这里插入图片描述

  • 启动:注意,kibana同样不能在 root 下启动
[root@localhost kibana-7.2.0-linux-x86_64]# chown -R yangwei:yangwei ./# 启动./bin/kibana# 后台启动./bin/kibana &

在这里插入图片描述

  • 访问一下:http://192.168.254.120:5601
    在这里插入图片描述

日志视图

  • 创建日志:
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 日志展示:

在这里插入图片描述

可视化数据

  • 在Visualize应用程序中,你可以使用各种图表、表格和地图等来塑造数据,你将创建可视化效果:饼图、柱状图、坐标图和Markdown小部件等。

在这里插入图片描述

  • 创建好了后保存

在这里插入图片描述

  • 在Dashboard添加视图模块

在这里插入图片描述

在这里插入图片描述

分词器

下载分词器,并解压到 ElasticSearch 安装目录下的 plugins 目录

ik分词器

  • 下载
[root@localhost ik]# pwd/usr/apps/elasticsearch/elasticsearch-7.2.0/plugins/ik[root@localhost ik]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip

拼音分词器

  • 下载
[root@localhost pinyin]# pwd/usr/apps/elasticsearch/elasticsearch-7.2.0/plugins/pinyin[root@localhost pinyin]# wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.2.0/elasticsearch-analysis-pinyin-7.2.0.zip

测试

  • 重启 ElasticSearch,利用 kibana 可视化界面的开发者工具进行测试
  • simple分词器,测试语句
POST /_analyze {
"analyzer": "simple", "text": "我是一个程序员,咿呀咿呀哟!" }

在这里插入图片描述

  • ik 分词器,测试语句
POST /_analyze {
"analyzer": "ik_smart", "text": "我是一个程序员,咿呀咿呀哟!"}

在这里插入图片描述

  • pinyin 分词器,测试语句
# 先创建索引PUT py_test{
"settings": {
"index": {
"analysis": {
"analyzer": {
"pinyin_analyzer": {
"tokenizer": "my_pinyin", "filter": "word_delimiter" } }, "tokenizer": {
"my_pinyin": {
"type": "pinyin", "first_letter": "none", "padding_char": " " } } } } }}# 测试GET /py_test/_analyze {
"text": ["刘德华"], "analyzer": "pinyin_analyzer"}

在这里插入图片描述

在这里插入图片描述

集群搭建

  • 安装的版本:elasticsearch-7.2.0
  • 该版本不用安装 JDK,其自带了 OpenJDK12.0.1
  • 配置文件中,集群发现有改动
  • 配置:
192.168.254.120    	node-0192.168.254.102		node-1192.168.254.104		node-2

集群配置

  • 修改配置文件 elasticsearch.yml
# ES集群名称cluster.name: yw-es# 当前ES节点名称,每个节点的名称不能相同node.name: node-0# 设置外网访问,默认配置外网无法访问network.host: 192.168.254.120# 端口http.port: 9200# 集群节点列表discovery.seed_hosts: ["192.168.254.120", "192.168.254.102", "192.168.254.104"]# 设置集群可以选举的主节点cluster.initial_master_nodes: ["node-0", "node-1", "node-2"]
# ES集群名称cluster.name: yw-es# 当前ES节点名称,每个节点的名称不能相同node.name: node-1# 设置外网访问,默认配置外网无法访问network.host: 192.168.254.102# 端口http.port: 9200# 集群节点列表discovery.seed_hosts: ["192.168.254.120", "192.168.254.102", "192.168.254.104"]# 设置集群可以选举的主节点cluster.initial_master_nodes: ["node-0", "node-1", "node-2"]
# ES集群名称cluster.name: yw-es# 当前ES节点名称,每个节点的名称不能相同node.name: node-2# 设置外网访问,默认配置外网无法访问network.host: 192.168.254.104# 端口http.port: 9200# 集群节点列表discovery.seed_hosts: ["192.168.254.120", "192.168.254.102", "192.168.254.104"]# 设置集群可以选举的主节点cluster.initial_master_nodes: ["node-0", "node-1", "node-2"]
  • 启动集群:启动各个ES结点

集群状态检查

http://192.168.254.120:9200/_cat/health?v

在这里插入图片描述

  • 或者在kibana上查看
    在这里插入图片描述

ElasticStack

在这里插入图片描述

  • ElasticStack(ELK) = elasticsearch+Logstash+kibana
  • elasticsearch:后台分布式存储以及全文检索;logstash:日志加工、“搬运工”;kibana:数据可视化展示。
  • ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

创建项目

  • 定义SpringBoot工程logstash-demo
  • 引入依赖:
net.logstash.logback
logstash-logback-encoder
5.2

代码实现

  • 控制器:
@Slf4j@RestControllerpublic class LogController {
@RequestMapping("/hello") public Object sayHello(String name) {
log.debug("开始执行sayHello方法"); log.info("hello:" + name); log.debug("sayHello方法执行完毕"); return "OK"; }}
  • 配置文件:
server:  port: 8080# 加载日志文件logging:  config: classpath:logback-spring.xml
  • 日志配置:
192.168.254.104:9600

测试

  • logstash配置文件:
input {
tcp {
port => 9600 codec => json }}output {
elasticsearch {
hosts => ["192.168.254.120:9200"] index => "server-log-%{+YYYY.MM.dd}" } stdout {
codec => rubydebug }}
  • 访问:http://localhost:8080/hello?name=zhangsan

在这里插入图片描述

转载地址:https://blog.csdn.net/yangwei234/article/details/96577075 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JavaEE 企业级分布式高级架构师(十七)ElasticSearch全文检索(4)
下一篇:JavaEE 企业级分布式高级架构师(十七)ElasticSearch全文检索(1)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月03日 00时45分43秒