基于docker的ELK部署

elasticsearch简介

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、
分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch
的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将
对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打
分,再将返回结果呈现给用户。

中文文档:

https://learnku.com/docs/elasticsearch73/7.3

参考文档:

https://www.kancloud.cn/yiyanan/elasticsearch_7_6/1651637

应用场景

  • 电商网站海量的商品搜索
  • ELK日志数据分析
  • 站内搜索(电商,招聘,门户,等等)
  • 数据分析(ES热门的一个使用场景)

es的功能

  • 分布式的搜索引擎和数据分析引擎
  • 全文检索,结构化检索,数据分析
  • 对海量数据进行近实时的处理

es的特点

  • 大型分布式集群
  • 功能强大
  • 部署简单
  • 能够替代数据库的不足之处

倒排索引

在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。

那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

DocIdDoc
1谷歌地图之父跳槽 Facebook
2谷歌地图之父加盟 Facebook
3谷歌地图创始人拉斯离开谷歌加盟 Facebook
4谷歌地图之父跳槽 Facebook 与 Wave 项目取消有关
5谷歌地图之父拉斯加盟社交网站 Facebook

倒排索引

WordIdWordDocIds
1谷歌1, 2, 3, 4, 5
2地图1, 2, 3, 4, 5
3之父1, 2, 4, 5
4跳槽1, 4
5Facebook1, 2, 3, 4, 5
6加盟2, 3, 5
7创始人3
8拉斯3, 5
9离开3
104

有了倒排索引,搜索引擎可以很方便地响应用户的查询。比如用户输入查询 Facebook ,搜索系统查找倒排索引,从中读出包含这个单词的文档,这些文档就是提供给用户的搜索结果。

倒排索引两个重要细节:

  • 倒排索引中的所有词项对应一个或多个文档;
  • 倒排索引中的词项根据字典顺序升序排列

elasticsearch的安装部署

1 . docker获取es的镜像

docker pull elasticsearch:7.12.1

2 . 创建es文件目录以及创建配置文件

mkdir /docker/es

mkdir /docker/es/conf

mkdir /docker/es/data

mkdir /docker/es/logs

mkdir /docker/es/plugins

touch /docker/es/conf/elasticsearch.yml

#注意:需要给文件  /docker/es  授权
chmod -R 777 /docker/es

3 . 构建容器

docker run -p 9200:9200 -d --name es \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /docker/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /docker/es/data:/usr/share/elasticsearch/data \
-v /docker/es/logs:/usr/share/elasticsearch/logs \
-v /docker/es/plugins:/usr/share/elasticsearch/plugins \
--privileged=true \
elasticsearch:7.12.1 

4 . 若出现异常:

max virtual memory areas vm.max_map_count [65530] is too low, increase to atleast [262144]

解决:

#修改配置sysctl.conf
vi /etc/sysctl.conf

#在尾行添加以下内容
vm.max_map_count=655300

#执行命令
sysctl -p

5 . 若出现连接异常:

ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.

原因: 存在es需要以集群的方式才能启动,或者限制了连接的ip端口,则需要进行开放设置

解决:修改配置文件:vim /docker/es/conf/elasticsearch.yml

network.host: 0.0.0.0
node.name: node-1
cluster.initial_master_nodes: ["node-1"]

6 . 测试

在这里插入图片描述

安装IK分词器

1 . 获取ik分词器安装包:

https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.12.1

在这里插入图片描述

2 . 解压安装包

unzip elasticsearch-analysis-ik-7.12.1.zip

这里解压出来可能会是很散乱的,需要将解压出来的包同一进行整理,整理到一个统一存储ik分词器相关的文件的目录:

mkdir -p /docker/es/plugins/ik

移动安装包

mv commons-codec-1.9.jar /docker/es/plugins/ik/
mv config/ /docker/es/plugins/ik/
mv httpclient-4.5.2.jar /docker/es/plugins/ik/
mv plugin-descriptor.properties /docker/es/plugins/ik/
mv commons-logging-1.2.jar /docker/es/plugins/ik/
mv elasticsearch-analysis-ik-7.12.1.jar /docker/es/plugins/ik/
mv httpcore-4.4.4.jar /docker/es/plugins/ik/
mv plugin-security.policy /docker/es/plugins/ik/

3 . 完成后重启es

docker restart es

注意事项:安装es的ik分词器可能导致es内存溢出,可以调整虚拟机内存到2G,es配置中增加内存

限制:indices.fielddata.cache.size: 50%

kibana的安装部署

1 . 拉取kibana镜像

kibana需要与es的版本一致

docker pull kibana:7.12.1

2 . kibana的配置文件

mkdir /docker/kibana

mkdir /docker/kibana/conf

3 . 创建配置文件

touch /docker/kibana/conf/kibana.yml

server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://你的es地址:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true

4 . 构建kibana的容器

docker run -p 5601:5601 -d --name kibana \
-v /docker/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml \
--privileged=true \
kibana:7.12.1

5 . 测试

在这里插入图片描述

6 . 汉化

kibana 7 中官方加入了中文的选项,中文包在容器中的

/usr/share/kibana/x-pack/plugins/translations/translations/zh-CN.jso

在配置文件 /usr/share/kibana/config/kibana.yml 中加入

i18n.locale: "zh-CN"
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐