ElasticSearch:部署ElasticSearch & Kibana
以下关于ElasticSearch
的介绍来自官网:
- 查询和分析,从数据中探寻各种问题的答案:
- 定义您自己的搜索方式:通过
Elasticsearch
,您能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。先从一个简单的问题出发,试试看能够从中发现些什么。 - 分析大规模数据:找到与查询最匹配的
10
个文档并不困难。但如果面对的是十亿行日志,又该如何解读呢?Elasticsearch
聚合让您能够从大处着眼,探索数据的趋势和规律。
- 定义您自己的搜索方式:通过
- 速度,
Elasticsearch
很快,快到不可思议:- 快速获得结果: 如果您能够立即获得答案,您与数据的关系就会发生变化。这样您就有条件进行迭代并涵盖更大的范围。
- 强大的设计:但是要达到这样的速度并非易事。我们通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的
BKD
树,以及用于分析的列存储。 - 无所不包:而且由于每个数据都被编入了索引,因此您再也不用因为某些数据没有索引而烦心。您可以用快到令人惊叹的速度使用和访问您的所有数据。
- 可扩展性,可以在笔记本电脑上运行,也可以在承载了
PB
级数据的成百上千台服务器上运行:原型环境和生产环境可无缝切换;无论Elasticsearch
是在一个节点上运行,还是在一个包含300
个节点的集群上运行,您都能够以相同的方式与Elasticsearch
进行通信。它能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,以实现极其流畅的操作。 - 相关度,搜索所有内容,找到所需的具体信息:基于各项元素(从词频或新近度到热门度等)对搜索结果进行排序。将这些内容与功能进行混搭,以优化向用户显示结果的方式。而且,由于我们的大部分用户都是真实的人,
Elasticsearch
具备齐全功能,可以处理包括各种复杂情况(例如拼写错误)在内的人为错误。 - 弹性,我们在您高飞的时候保驾护航:硬件故障,网络分割,
Elasticsearch
为您检测这些故障并确保您的集群(和数据)的安全性和可用性。通过跨集群复制功能,辅助集群可以作为热备份随时投入使用。Elasticsearch
运行在一个分布式的环境中,从设计之初就考虑到了这一点,目的只有一个,让您永远高枕无忧。 - 用例,我到底能够使用
Elasticsearch
做什么:数字、文本、地理位置、结构化数据、非结构化数据。适用于所有数据类型。全文本搜索只是全球众多公司利用Elasticsearch
解决各种挑战的冰山一角。查看直接依托Elastic Stack
所构建解决方案的完整列表。
部署ElasticSearch
- 下载地址
选择合适的操作系统和版本进行下载,博主这里选择的是Linux
操作系统以及版本7.16.0
。
使用Xftp
将ElasticSearch
压缩包传入虚拟机中(/usr/local
)。
将压缩包解压。
[root@MiWiFi-R1CM-srv ~]# cd /usr/local
[root@MiWiFi-R1CM-srv local]# ll
总用量 334772
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
-rw-r--r--. 1 root root 342805188 12月 10 10:16 elasticsearch-7.16.0-linux-x86_64.tar.gz
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 2 root root 6 4月 11 2018 include
drwxr-xr-x. 2 root root 6 4月 11 2018 lib
drwxr-xr-x. 2 root root 6 4月 11 2018 lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 libexec
drwxr-xr-x. 2 root root 6 4月 11 2018 sbin
drwxr-xr-x. 5 root root 49 11月 10 16:17 share
drwxr-xr-x. 2 root root 40 11月 11 10:33 src
[root@MiWiFi-R1CM-srv local]# tar -zxvf elasticsearch-7.16.0-linux-x86_64.tar.gz
[root@MiWiFi-R1CM-srv local]# ll
总用量 334772
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
drwxr-xr-x. 9 root root 155 12月 2 23:52 elasticsearch-7.16.0
-rw-r--r--. 1 root root 342805188 12月 10 10:16 elasticsearch-7.16.0-linux-x86_64.tar.gz
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 2 root root 6 4月 11 2018 include
drwxr-xr-x. 2 root root 6 4月 11 2018 lib
drwxr-xr-x. 2 root root 6 4月 11 2018 lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 libexec
drwxr-xr-x. 2 root root 6 4月 11 2018 sbin
drwxr-xr-x. 5 root root 49 11月 10 16:17 share
drwxr-xr-x. 2 root root 40 11月 11 10:33 src
修改配置。
[root@MiWiFi-R1CM-srv local]# cd elasticsearch-7.16.0
[root@MiWiFi-R1CM-srv elasticsearch-7.16.0]# ll
总用量 636
drwxr-xr-x. 2 root root 4096 12月 2 23:52 bin
drwxr-xr-x. 3 root root 210 12月 10 10:46 config
drwxr-xr-x. 9 root root 121 12月 2 23:52 jdk
drwxr-xr-x. 3 root root 4096 12月 2 23:52 lib
-rw-r--r--. 1 root root 3860 12月 2 23:44 LICENSE.txt
drwxr-xr-x. 2 root root 6 12月 2 23:49 logs
drwxr-xr-x. 61 root root 4096 12月 2 23:52 modules
-rw-r--r--. 1 root root 627787 12月 2 23:49 NOTICE.txt
drwxr-xr-x. 2 root root 6 12月 2 23:49 plugins
-rw-r--r--. 1 root root 2710 12月 2 23:44 README.asciidoc
[root@MiWiFi-R1CM-srv elasticsearch-7.16.0]# mkdir data
[root@MiWiFi-R1CM-srv elasticsearch-7.16.0]# pwd
/usr/local/elasticsearch-7.16.0
[root@MiWiFi-R1CM-srv elasticsearch-7.16.0]# cd config
[root@MiWiFi-R1CM-srv config]# ll
总用量 40
-rw-rw----. 1 root root 1042 12月 2 23:44 elasticsearch-plugins.example.yml
-rw-rw----. 1 root root 3415 12月 2 23:44 elasticsearch.yml
-rw-rw----. 1 root root 3257 12月 2 23:44 jvm.options
drwxr-x---. 2 root root 6 12月 2 23:49 jvm.options.d
-rw-rw----. 1 root root 19095 12月 2 23:47 log4j2.properties
-rw-rw----. 1 root root 473 12月 2 23:47 role_mapping.yml
-rw-rw----. 1 root root 197 12月 2 23:47 roles.yml
-rw-rw----. 1 root root 0 12月 2 23:47 users
-rw-rw----. 1 root root 0 12月 2 23:47 users_roles
[root@MiWiFi-R1CM-srv config]# vim elasticsearch.yml
修改以下配置:
# 集群名称
cluster.name: cluster-kaven
# 节点名称
node.name: node-1
# 存储数据的目录路径(用逗号分隔多个目录路径)
path.data: /usr/local/elasticsearch-7.16.0/data
# 日志文件的路径
path.logs: /usr/local/elasticsearch-7.16.0/logs
# 默认情况下,Elasticsearch只能在本地主机上访问。在此处设置其他地址以在网络上公开此节点:
network.host: 0.0.0.0
# 默认情况下,Elasticsearch从9200端口开始,在找到的第一个空闲端口上侦听HTTP流量。在此处设置特定的HTTP端口:
http.port: 9200
# 在启动此节点时传递要执行查找的初始主机列表:默认主机列表为["127.0.0.1", "[::1]"]
discovery.seed_hosts: ["127.0.0.1"]
# 使用初始的一组符合条件的主节点引导群集:
cluster.initial_master_nodes: ["node-1"]
修改JVM
配置(博主虚拟机有2G
内存,这里给heap
配置1G
内存,不修改JVM
配置,博主这边也是能正常启动ElasticSearch
,这里只是为了演示),堆大小由Elasticsearch
根据系统中的可用内存和每个节点要履行的角色自动配置。
[root@MiWiFi-R1CM-srv config]# vim jvm.options
-Xmx1g
:设置JVM
最大可用内存为1G
。-Xms1g
:设置JVM
初始内存为1G
。此值可以设置与-Xmx
相同,以避免每次垃圾回收完成后JVM
重新分配内存。
-Xms1g
-Xmx1g
还需要创建用户,ElasticSearch
不能使用root
用户启动。
[root@MiWiFi-R1CM-srv config]# cd ../bin
[root@MiWiFi-R1CM-srv bin]# ./elasticsearch
创建用户,递归修改文件的拥有者用户和组。
[root@MiWiFi-R1CM-srv bin]# adduser kaven
[root@MiWiFi-R1CM-srv bin]# chown -R kaven:kaven /usr/local/elasticsearch-7.16.0
还需要修改一些配置,不然切换到创建的用户启动ElasticSearch
还是会报错。
bootstrap check failure [1] of [3]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
bootstrap check failure [2] of [3]: max number of threads [3871] for user [kaven] is too low, increase to at least [4096]
bootstrap check failure [3] of [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[root@MiWiFi-R1CM-srv bin]# vim /etc/security/limits.conf
kaven soft nofile 65536
kaven hard nofile 131070
kaven soft nproc 4097
kaven hard nproc 8192
kaven
是用户名,也可以使用*
表示所有用户。
[root@MiWiFi-R1CM-srv bin]# vim /etc/sysctl.conf
vm.max_map_count=524288
立即生效。
[root@MiWiFi-R1CM-srv bin]# /sbin/sysctl -p
vm.max_map_count = 524288
切换到创建的用户启动ElasticSearch
。
[root@MiWiFi-R1CM-srv bin]# su kaven
[kaven@MiWiFi-R1CM-srv bin]$ ./elasticsearch -d
这样就表示启动成功了。
[kaven@MiWiFi-R1CM-srv bin]$ curl http://127.0.0.1:9200
{
"name" : "node-1","cluster_name" : "cluster-kaven","cluster_uuid" : "QVpWCxZmTWeA04vovflHrw","version" : {
"number" : "7.16.0","build_flavor" : "default","build_type" : "tar","build_hash" : "6fc81662312141fe7691d7c1c91b8658ac17aa0d","build_date" : "2021-12-02T15:46:35.697268109Z","build_snapshot" : false,"lucene_version" : "8.10.1","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}
关闭防火墙,让本地浏览器可以访问,也为了后面部署的Kibana
可以与ElasticSearch
进行通信。
[kaven@MiWiFi-R1CM-srv bin]$ systemctl stop firewalld
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
这样,ElasticSearch
就算启动成功了。想要停止ElasticSearch
,可以如下所示,查出ElasticSearch
服务的PID
,再kill
该PID
即可。
[kaven@MiWiFi-R1CM-srv config]$ ps -ef | grep elasticsearch
kaven 2091 1 7 11:48 pts/0 00:00:40 /usr/local/elasticsearch-7.16.0/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -XX:+ShowCodeDetailsInExceptionMessages -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=SPI,COMPAT --add-opens=java.base/java.io=ALL-UNNAMED -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-16255184879977854706 -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m -Xms396m -Xmx396m -XX:MaxDirectMemorySize=207618048 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 -Des.path.home=/usr/local/elasticsearch-7.16.0 -Des.path.conf=/usr/local/elasticsearch-7.16.0/config -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=true -cp /usr/local/elasticsearch-7.16.0/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
kaven 2111 2091 0 11:48 pts/0 00:00:00 /usr/local/elasticsearch-7.16.0/modules/x-pack-ml/platform/linux-x86_64/bin/controller
kaven 2254 2238 0 11:56 pts/0 00:00:00 grep --color=auto elasticsearch
[kaven@MiWiFi-R1CM-srv config]$ kill -9 2091
再次访问就会发生错误。
[kaven@MiWiFi-R1CM-srv config]$ curl http:127.0.0.1:9200
curl: (6) Could not resolve host: http:127.0.0.1; 未知的错误
部署Kibana
以下关于Kibana
的介绍来自官网:
Kibana
是一个免费且开放的用户界面,能够让您对Elasticsearch
数据进行可视化,并让您在Elastic Stack
中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。- 可视化和分析,一张图片胜过千万行日志:
Kibana
让您能够自由地选择如何呈现自己的数据。不过借助Kibana
的交互式可视化,您可以先从一个问题出发,看看能够从中发现些什么。- 基本内容:
Kibana
核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图等等。当然,您还可以搜索自己的所有文档。
- 位置分析:借助
Elastic Maps
,可探索位置数据,或者发挥创意,将自定义图层和矢量形状进行可视化。
- 时序:借助我们精选的时序数据
UI
,对您Elasticsearch
中的数据执行高级时间序列分析。您可以利用功能强大、简单易学的表达式来描述查询、转换和可视化。
Machine Learning
:借助非监督型Machine Learning
功能来检测隐藏在您Elasticsearch
数据中的异常情况,并探索那些对它们有显著影响的属性。
- 图表和网络:凭借搜索引擎的相关性功能,结合
Graph
关联分析,揭示您Elasticsearch
数据中极其常见的关系。
- 基本内容:
- 探索,简单直观地构建可视化:开始探索,即使不确定前进方向,也没关系。拖放字段并查看即时预览,看着您的数据在眼前渐具雏形。柱状图看起来会好一些吗?
Kibana Lens
中的智能建议能够基于您所选的字段,指导您制作可视化,让您最有效地展示数据。发现有趣的趋势,并在此基础上迸发出另一个想法?没有问题。随时更换数据源进行即兴分析,从而轻松地凭借直觉创建出仪表板,并进行持续监测,而且还是免费且开放的。 - 定制,通过
Kibana
中的Canvas
,发挥无限创意:不受条条框框的限制。通过徽标、颜色和能够突出贵公司品牌特色的设计元素将自己的品牌和风格融入到数据中,讲述独属于您的故事。Canvas
是Kibana
中一项免费且开放的功能,能够让您基于实时数据发挥无限创意,而且还支持SQL
。 - 创作和探索,仪表板助您获得深入洞见并采取行动:快速创建仪表板,将图表、地图和筛选功能有机整合,从而展示数据的全景。跨仪表板打造定制的深入分析内容,以实现更深层次的分析。通过允许用户直接从
Kibana
仪表板转到任何Web
应用程序或URL
,实现从洞见到行动的顺利转变。 - 分享与合作,让每个人都感受到
Kibana
的便利:只需选择适合您的分享选项,即可轻松地将Kibana
可视化分享给您选择的任何人:您的团队成员、您的老板、老板的老板、您的客户、合规经理或承包商。嵌入仪表板,分享链接,或者导出为PDF
、PNG
或CSV
文件并作为附件发送给别人。 - 控制访问权限,超级安全:通过
Kibana Spaces
整理您的仪表板和可视化。通过基于角色的访问控制,邀请用户访问某些空间(但不允许访问其他空间),让他们能够查看特定内容并使用特定功能。 - 构建告警以触发定制行动:随时了解关键变更,以避免出现紧急危机。创建告警,让系统使用基于索引/指标的阈值来执行下列操作:发送邮件、创建
Slack
通知、激活PagerDuty
工作流,或者任何数量的其他第三方集成。在具体应用(例如SIEM
、APM
、Uptime
或Metrics
)中定义特有告警,然后在“管理”标签页中进行统一监测。
本篇博客只会介绍ElasticSearch
和Kibana
的部署(单机),它们的概念、特性、原理以及实践将在以后进行介绍。
- 下载地址
Kibana
的版本要和ElasticSearch
对应。
使用Xftp
将Kibana
压缩包上传到虚拟机中(/usr/local/
,Kibana
和ElasticSearch
不在同一个主机上部署),再进行解压:
[root@MiWiFi-R1CM-srv ~]# cd /usr/local/
[root@MiWiFi-R1CM-srv local]# ll
总用量 608836
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 2 root root 6 4月 11 2018 include
-rw-r--r--. 1 root root 280641324 12月 10 15:15 kibana-7.16.0-linux-x86_64.tar.gz
drwxr-xr-x. 2 root root 6 4月 11 2018 lib
drwxr-xr-x. 2 root root 6 4月 11 2018 lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 libexec
drwxr-xr-x. 2 root root 6 4月 11 2018 sbin
drwxr-xr-x. 5 root root 49 11月 10 16:17 share
drwxr-xr-x. 2 root root 40 11月 11 10:33 src
[root@MiWiFi-R1CM-srv local]# tar -zxvf kibana-7.16.0-linux-x86_64.tar.gz
修改Kibana
的配置。
[root@MiWiFi-R1CM-srv local]# cd kibana-7.16.0-linux-x86_64
[root@MiWiFi-R1CM-srv kibana-7.16.0-linux-x86_64]# ll
总用量 1436
drwxr-xr-x. 2 root root 94 12月 3 00:17 bin
drwxr-xr-x. 2 root root 44 12月 3 00:16 config
drwxr-xr-x. 2 root root 6 12月 3 00:16 data
-rw-r--r--. 1 root root 3860 12月 3 00:16 LICENSE.txt
drwxr-xr-x. 6 root root 108 12月 3 00:16 node
drwxr-xr-x. 827 root root 24576 12月 3 00:16 node_modules
-rw-r--r--. 1 root root 1415880 12月 3 00:16 NOTICE.txt
-rw-r--r--. 1 root root 740 12月 3 00:16 package.json
drwxr-xr-x. 2 root root 6 12月 3 00:16 plugins
-rw-r--r--. 1 root root 3970 12月 3 00:16 README.txt
drwxr-xr-x. 9 root root 131 12月 3 00:16 src
drwxr-xr-x. 3 root root 79 12月 3 00:16 x-pack
[root@MiWiFi-R1CM-srv kibana-7.16.0-linux-x86_64]# cd config
[root@MiWiFi-R1CM-srv config]# ll
总用量 12
-rw-r--r--. 1 root root 5243 12月 3 00:16 kibana.yml
-rw-r--r--. 1 root root 305 12月 3 00:16 node.options
[root@MiWiFi-R1CM-srv config]# vim kibana.yml
启动Kibana
,和启动ElasticSearch
类似,不能使用root
用户启动,还是需要创建用户来启动Kibana
,还需要关闭防火墙,以便本地浏览器能够访问Kibana
服务。
[root@MiWiFi-R1CM-srv config]# cd ../bin
[root@MiWiFi-R1CM-srv bin]# ll
总用量 16
-rwxr-xr-x. 1 root root 850 12月 3 00:16 kibana
-rwxr-xr-x. 1 root root 783 12月 3 00:16 kibana-encryption-keys
-rwxr-xr-x. 1 root root 776 12月 3 00:16 kibana-keystore
-rwxr-xr-x. 1 root root 813 12月 3 00:16 kibana-plugin
[root@MiWiFi-R1CM-srv bin]# pwd
/usr/local/kibana-7.16.0-linux-x86_64/bin
[root@MiWiFi-R1CM-srv bin]# adduser kaven
[root@MiWiFi-R1CM-srv bin]# chown -R kaven:kaven /usr/local/kibana-7.16.0-linux-x86_64
[root@MiWiFi-R1CM-srv bin]# systemctl stop firewalld
[root@MiWiFi-R1CM-srv bin]# su kaven
[kaven@MiWiFi-R1CM-srv bin]$ ./kibana
本地成功访问Kibana
服务,说明Kibana
启动成功了。
ElasticSearch
和Kibana
的部署就介绍到这里,之后博主还会介绍它们的概念、特性、原理以及实践。如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。