Docker的ELK部署"/>
基于Docker的ELK部署
基于docker的ELK部署
elasticsearch简介
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、
分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch
的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将
对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打
分,再将返回结果呈现给用户。
中文文档:
.3
参考文档:
应用场景
- 电商网站海量的商品搜索
- ELK日志数据分析
- 站内搜索(电商,招聘,门户,等等)
- 数据分析(ES热门的一个使用场景)
es的功能
- 分布式的搜索引擎和数据分析引擎
- 全文检索,结构化检索,数据分析
- 对海量数据进行近实时的处理
es的特点
- 大型分布式集群
- 功能强大
- 部署简单
- 能够替代数据库的不足之处
倒排索引
在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。
那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。
DocId | Doc |
---|---|
1 | 谷歌地图之父跳槽 Facebook |
2 | 谷歌地图之父加盟 Facebook |
3 | 谷歌地图创始人拉斯离开谷歌加盟 Facebook |
4 | 谷歌地图之父跳槽 Facebook 与 Wave 项目取消有关 |
5 | 谷歌地图之父拉斯加盟社交网站 Facebook |
倒排索引
WordId | Word | DocIds |
---|---|---|
1 | 谷歌 | 1, 2, 3, 4, 5 |
2 | 地图 | 1, 2, 3, 4, 5 |
3 | 之父 | 1, 2, 4, 5 |
4 | 跳槽 | 1, 4 |
5 | 1, 2, 3, 4, 5 | |
6 | 加盟 | 2, 3, 5 |
7 | 创始人 | 3 |
8 | 拉斯 | 3, 5 |
9 | 离开 | 3 |
10 | 与 | 4 |
有了倒排索引,搜索引擎可以很方便地响应用户的查询。比如用户输入查询 Facebook
,搜索系统查找倒排索引,从中读出包含这个单词的文档,这些文档就是提供给用户的搜索结果。
倒排索引两个重要细节:
- 倒排索引中的所有词项对应一个或多个文档;
- 倒排索引中的词项根据字典顺序升序排列
elasticsearch的安装部署
1 . docker获取es的镜像
docker pull elasticsearch:7.12.1
2 . 创建es文件目录以及创建配置文件
mkdir /docker/esmkdir /docker/es/confmkdir /docker/es/datamkdir /docker/es/logsmkdir /docker/es/pluginstouch /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分词器安装包:
.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/kibanamkdir /docker/kibana/conf
3 . 创建配置文件
touch /docker/kibana/conf/kibana.ymlserver.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"
更多推荐
基于Docker的ELK部署
发布评论