|
一、搜索引擎
海量日志如何分析,需要搜索引擎(这只是其中的一种解决方案)
索引引擎全文搜索依赖全文索引
搜索引擎一般由两部分组成:
索引组件:存储数据并构建索引
原始内容 --> 获取 --> 构建文档 --> 文档分析(切词)--> 创建索引
搜索组件:
UI --> 构建查询 --> 运行查询 (结果返回给UI) 索引
UI(搜索接口):提供用户接口,例如google的输入框
搜索引擎的索引一般都是倒排索引
倒排索引: 使用字段搜索文档
正排索引:使用文档搜索字段
二、lucene
提供索引链功能,是一个开发库
文档:Document
包含了一个或多个域的容器
field:value
域有很多选项:
索引选项:用于通过倒排索引来控制文本是否可被搜索
Index.ANALYZED
分析(切词)并单独作为索引项
Index.Not_ANALYZED
不分析(不切词),把整个内容当作一个索引项
Index.ANALYZED_NORMS
类似于Index:ANALYZED,但不存储token的Norms(加权基准)信息
Index.NOT_ANALYZED_NORMS
类似于Index.Not_ANALYZED_NORMS,但不存储token的Norms(加权基准)信息
Index.NO:不对此域的值作索引,不可被搜索
存储选项:是否需要存储域的分析前的真实值
store.YES:存储真实值
store.NO:不存储真实值
域向量使用选项:用于在搜索期间控制该文档所有的唯一项都能完全从文档中检索时使用
文档和域的加权操作:
默认都没有加权值(或都为1),加权计算标准
搜索:
查询lucene索引时,它返回的是一个有序的scoreDoc对象,查询时,lucene会为每个文档计算出其score,
lucene提供大量的API:
IndexSearcher:搜索索引入口
Query及其子类:
QueryParser:查询分析器
TopDocs:保存某一次查询操作当中score较高的前10个值
ScoreDoc:
Lucene支持多样化查询:
IndexSearch中的search方法:
TermQuery:对索引中的特定项进行搜索;Term是索引中最小片段,每个Term包含了一个域名和一个文本值
TermRangQuery:在索引中的多个特定项中进行搜索,能搜索指定的多个域
NumericRangeQuery:做数值范围搜索
PrefixQuery:用于搜索以指定字符串开头的项
BooleanQuery:用于实现组合查询,组合逻辑有:AND,OR,NO
PhraseQuery:没有分词,根据位置信息对文档进行搜索
WildcardQuery:通配符查询
FuzzyQuery:模糊查询,匹配相似的项(域);Levenshtein,距离算法
三、ElasticSearch
1、ElasticSearch简介
是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统(将1个索引切片成shard实现分布式)。它构建于Apache Lucene搜索引擎库之上。
ElasticSearch是一个基于Lucene实现的开源、分布式、Restful的全文本搜索引擎,此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索;也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点,实时处理PB级的数据。
2、ElasticSearch的基本组件
索引(index):
文档的集合(容器),索引是具有类似属性的文档的集合,类似于表,索引名必须使用小写字母
类型(type):
类型是索引内部的逻辑分区,其意义完全取决于用户需求,一个索引内部可定义一个或多个类型;一般来说,类型就是拥有相同的域的文档的预定义;类似于表的表结构(字段),但没有约束性,
文档(document):
文档是lucene索引和搜索的原子单位,它包含了一个或多个域,是域的容器,基于JSON格式表示。
每个域的组成部分:一个名字和一个或多个值,用于多个值的域,通常称为多值域;文档可以嵌套 映射:
原始内容存储为文档之前需要事先进行分析(例如切词,过滤掉某些词等),映射用于定义此分析机制该如何实现;除此之外,ES还为映射提供了诸如将域中的内容排序等功能,
3、ES的集群组件
Cluster:
ES的集群标识为集群名称,默认为elasticsearch。节点就是靠此名字来决定加入到哪个集群中,一个节点只能属于一个集群
Node:
运行了单个ES实例的主机即为节点,用于存储数据、参与集群索引及搜索操作。
节点的标识靠节点名
Shard:
将索引切割成为物理存储的组件,但每1个shard都是一个独立且完整的索引
创建索引时,ES默认将其分割为5个shard,用户也可以按需自定义,创建完成之后不可修改。
shard有两种类型:
primary shard:每个索引都会被ES切割成5个primary shard
replica shard:每个primary shard都至少应该有一个replica shard
用于数据冗余及查询时的负载均衡(replica shard也可读写),每个primary shard的replica的副本数量可自定义,且可动态更改
4、ES Cluster工作过程
启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其它节点,并与之通信。
集群中所有节点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式。站在用户角度而言,每个节点均可接受并响应用户的各类请求。
四、ElasticSearch安装
项目官网:www.elastic.co
1、elasticsearch的安装
[root@node2 ~]# ls elasticsearch-5.3.0.rpm
elasticsearch-5.3.0.rpm
[root@node2 ~]# yum install elasticsearch-5.3.0.rpm
[root@node2 ~]# rpm -ql elasticsearch
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/jvm.options
/etc/elasticsearch/log4j2.properties
/etc/elasticsearch/scripts
/etc/init.d/elasticsearch
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system/elasticsearch.service
/usr/lib/tmpfiles.d/elasticsearch.conf
/usr/share/elasticsearch/LICENSE.txt
/var/lib/elasticsearch
/var/log/elasticsearch
/var/run/elasticsearch
2、ES的配置
ES节点,拥有相同的集群名即为同一个集群的节点,修改节点名称和对应的IP即可
# ================= Elasticsearch Configuration ===================
# 配置es的集群名称, es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群
cluster.name: RK
# 节点名称
node.name: node2
# 指定该节点是否有资格被选举成为node,默认为true
node.master: true
# 指定该节点是否存储索引数据,默认为true
node.data: true
# 设置绑定的ip地址还有其它节点和该节点交互的ip地址
network.host: 0.0.0.0
# 指定http端口,你使用headkopf等相关插件使用的端口,默认9200
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
一定要添加,否则集群找不到节点
discovery.zen.ping.unicast.hosts: ["192.168.10.2","192.168.10.7:9300”]
# 如果要使用head,那么需要增加新的参数,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"
|
配置项要统一,要么加空格,要么都不加.
3、启动elasticsearch
[root@node2 ~]# service elasticsearch start
Starting elasticsearch: Exception in thread "main" java.lang.NoClassDefFoundError: org.elasticsearch.tools.JavaVersionChecker
at gnu.java.lang.MainThread.run(libgcj.so.10)
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.tools.JavaVersionChecker not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/usr/share/elasticsearch/lib/elasticsearch-5.3.0.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(libgcj.so.10)
at java.lang.ClassLoader.loadClass(libgcj.so.10)
at java.lang.ClassLoader.loadClass(libgcj.so.10)
at gnu.java.lang.MainThread.run(libgcj.so.10)
Elasticsearch requires at least Java 8 but your Java version from /usr/bin/java does not meet this requirement
[FAILED] elasticsearch需要运行于jvm虚拟机上,依赖于java
JDK:
Oracle JDK 更稳定
OpenJDK
这里我们使用openjdk
[root@node2 ~]# yum install java-1.8.0-openjdk
[root@node2 ~]# rpm -ql java-1.8.0-openjdk
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64/jre/bin/policytool
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64/jre/lib/amd64/libawt_xawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64/jre/lib/amd64/libjawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64/jre/lib/amd64/libjsoundalsa.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64/jre/lib/amd64/libsplashscreen.so
/usr/share/applications/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64-policytool.desktop
/usr/share/icons/hicolor/16x16/apps/java-1.8.0.png
/usr/share/icons/hicolor/24x24/apps/java-1.8.0.png
/usr/share/icons/hicolor/32x32/apps/java-1.8.0.png
/usr/share/icons/hicolor/48x48/apps/java-1.8.0.png
[root@node2 ~]# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
[root@node2 ~]# rpm -qa|grep jdk
java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64 # jre环境
java-1.8.0-openjdk-headless-1.8.0.121-1.b13.el6.x86_64 #
[root@node2 alternatives]# ls -l `\which java`
lrwxrwxrwx 1 root root 22 Apr 16 16:28 /usr/bin/java -> /etc/alternatives/java
[root@node2 alternatives]# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Apr 16 16:28 /etc/alternatives/java -> /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
[root@node2 alternatives]# ls -l /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
-rwxr-xr-x 1 root root 5128 Mar 23 00:19 /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
[root@sb java]# rpm -qi java-1.8.0-openjdk-devel # 开发环境
Name : java-1.8.0-openjdk-devel Relocations: (not relocatable)
Version : 1.8.0.121 Vendor: CentOS
Release : 1.b13.el6 Build Date: Thu 23 Mar 2017 12:43:05 AM CST
Install Date: Sun 16 Apr 2017 04:47:46 PM CST Build Host: c1bm.rdu2.centos.org
Group : Development/Tools Source RPM: java-1.8.0-openjdk-1.8.0.121-1.b13.el6.src.rpm
Size : 42048087 License: ASL 1.1 and ASL 2.0 and GPL+ and GPLv2 and GPLv2 with exceptions and LGPL+ and LGPLv2 and MPLv1.0 and MPLv1.1 and Public Domain and W3C
Signature : RSA/SHA1, Thu 23 Mar 2017 10:59:19 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem
URL : http://openjdk.java.net/
Summary : OpenJDK Development Environment
Description :
The OpenJDK development tools.
[root@sb java]# rpm -qi java-1.8.0-openjdk # 运行环境,其实这里只要运行环境就可以了
Name : java-1.8.0-openjdk Relocations: (not relocatable)
Version : 1.8.0.121 Vendor: CentOS
Release : 1.b13.el6 Build Date: Thu 23 Mar 2017 12:43:05 AM CST
Install Date: Sun 16 Apr 2017 04:47:43 PM CST Build Host: c1bm.rdu2.centos.org
Group : Development/Languages Source RPM: java-1.8.0-openjdk-1.8.0.121-1.b13.el6.src.rpm
Size : 502173 License: ASL 1.1 and ASL 2.0 and GPL+ and GPLv2 and GPLv2 with exceptions and LGPL+ and LGPLv2 and MPLv1.0 and MPLv1.1 and Public Domain and W3C
Signature : RSA/SHA1, Thu 23 Mar 2017 11:02:09 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem
URL : http://openjdk.java.net/
Summary : OpenJDK Runtime Environment
Description :
The OpenJDK runtime environment. 启动elasticsearch:
[root@node2 ~]# service elasticsearch start
tcp 0 0 ::ffff:127.0.0.1:9200 :::* LISTEN
tcp 0 0 ::1:9200 :::* LISTEN
tcp 0 0 ::ffff:127.0.0.1:9300 :::* LISTEN
tcp 0 0 ::1:9300 :::* LISTEN 参与集群选举时所使用的端口 transport.tcp.port:9300
工作时的端口 http.port:9200
五、ElasticSearch使用
1、Restful风格API
四类API:
检查集群、节点、索引等是否健康一级获取其相应状态
管理集群,节点、索引及元数据
执行CRUD操作
执行高级操作,例如paging,filtering等
ES访问接口:9200/tcp 基于http协议工作
访问格式:
curl -X '://HOST:PORT/?' -d ''
VERB:GET,PUT,DELETE等
PROTOCOL:http,https
QUERY_STRING:查询参数、例如:?pretty表示使用易读的JSON格式输出
BODY:请求的主体
[root@node2 ~]# curl localhost:9200
{
"name" : "VfX5IAN",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "dkcXcQERQkyBcmMTe2svtQ",
"version" : {
"number" : "5.3.0",
"build_hash" : "3adb13b",
"build_date" : "2017-03-23T03:31:50.652Z",
"build_snapshot" : false,
"lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}
2、_cat API
[root@node2 ~]# curl localhost:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
[root@node2 ~]# curl localhost:9200/_cat/nodes
127.0.0.1 5 99 0 0.00 0.03 0.13 mdi * VfX5IAN
[root@node2 ~]# curl localhost:9200/_cat/health
1492335961 17:46:01 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
[root@node2 ~]# curl localhost:9200/_cat/nodes?v # ?v表示显示详细信息
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 5 99 0 0.00 0.02 0.10 mdi * VfX5IAN
VfX5IAN9QVOXJVr-P5GR0w 127.0.0.1 127.0.0.1 VfX5IAN
[root@node2 ~]# curl localhost:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1492336105 17:48:25 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
3、_Cluster API
查看集群信息
health:健康信息
curl 'localhost:9200/_cluster/health?pretty'
state:状态信息
curl 'localhost:9200/_cluster/state/?pretty'
stats:统计信息
curl 'localhost:9200/_cluster/stats'
节点的统计信息:
curl 'localhost:9200/_nodes/stats'
详见官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
[root@Node2 ~]# curl localhost:9200/_cluster/health
{"cluster_name":"rk","status":"green","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":0,"active_shards":0,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}[root@Node2 ~]#
[root@Node2 ~]# curl localhost:9200/_cluster/health?pretty
{
"cluster_name" : "rk",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
[root@Node2 ~]#
[root@Node2 ~]# curl localhost:9200/_cluster/state?pretty
{
"cluster_name" : "rk",
"version" : 2,
"state_uuid" : "cJ859WPFSk-_PoT0Z41UgA",
"master_node" : "VfX5IAN9QVOXJVr-P5GR0w",
"blocks" : { },
"nodes" : {
"VfX5IAN9QVOXJVr-P5GR0w" : {
"name" : "xj",
"ephemeral_id" : "zU4b7O6QR-SRl39YWmcLqA",
"transport_address" : "127.0.0.1:9300",
"attributes" : { }
}
},
"metadata" : {
"cluster_uuid" : "dkcXcQERQkyBcmMTe2svtQ",
"templates" : { },
"indices" : { },
"index-graveyard" : {
"tombstones" : [ ]
}
},
"routing_table" : {
"indices" : { }
},
"routing_nodes" : {
"unassigned" : [ ],
"nodes" : {
"VfX5IAN9QVOXJVr-P5GR0w" : [ ]
}
}
}
六、ES的插件
当前es官方推荐的拓展组件为Kibana和X-Pack,而X-Pack需要依赖于Kibana
通过插件来扩展ES的功能:
添加自定义的映射类型
自定义分析器
自定义发现方式
本地脚本
安装插件的方式:
1) 直接将插件(下载解压后)放置于plugins目录下:/usr/share/elasticsearch/plugins/
2)使用elasticsearch-plugin脚本进行安装
[root@Node2 plugins]# /usr/share/elasticsearch/bin/elasticsearch-plugin -h
A tool for managing installed elasticsearch plugins
Commands
--------
list - Lists installed elasticsearch plugins
install - Install a plugin
remove - Removes a plugin from elasticsearch
Non-option arguments:
command
Option Description
------ -----------
-h, --help show help
-s, --silent show minimal output
-v, --verbose show verbose output
1、安装X-Pack
X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中。在Elasticsearch 5.0.0之前,您必须安装单独的Shield,Watcher,Marve,Graph, Reportingl插件才能获得在X-Pack中所有的功能。
安装前提:
Elasticsearch 5.0.2
Kibana 5.0.2
在Es的根目录(每个节点),运行 bin/elasticsearch-plugin install X-Pack进行安装。
[root@Node2 ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack
[root@Node2 ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin list
x-pack
2、安装kibana
Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台。使用kibana可以查询、查看并与存储在elasticsearch索引的数据进行交互操作。使用kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。
kibana使得理解大容量的数据变得非常容易。它非常简单,基于浏览器的接口使我们能够快速的创建和分享显示elasticsearch查询结果实时变化的仪表盘。
在Elasticsearch 5版本之前,一般都是通过安装Kibana,而后将Marvel、Hand等各种功能插件添加到Kibana上使用。在Elasticsearch 5版本之后,一般情况下只需要安装一个官方推荐的X-pack扩展包即可。
注意:
- https://www.elastic.co/downloads/kibana 可以在该地址获取下载链接,一定要选择对于系统和版本。
- 按照文档的要求,一般情况下kibana的版本必须和Elasticsearch安装的版本一致。
[root@Node2 ~]# yum install kibana-5.3.0-x86_64.rpm
[root@Node2 ~]# rpm -ql kibana
/etc/default/kibana
/etc/init.d/kibana
/etc/kibana/kibana.yml
/etc/systemd/system/kibana.service
/usr/share/kibana/LICENSE.txt
/usr/share/kibana/NOTICE.txt
/usr/share/kibana/README.txt
/usr/share/kibana/bin/kibana
/usr/share/kibana/bin/kibana-plugin
/usr/share/kibana/node/CHANGELOG.md
/usr/share/kibana/node/LICENSE
/usr/share/kibana/node/README.md
/usr/share/kibana/node/bin/node
/usr/share/kibana/node/bin/npm修改配置文件
$ vim config/kibana.yml
server.port: 5601
server.host: "192.168.10.2"
elasticsearch.url: "http://192.168.10.2:9200"
| 暂时先不启动
marvel
Marvel是Elastic公司推出的商业监控方案,是用来监控Elasticsearch集群,历史状态的有力工具,便于性能优化以及故障诊断。监控主要分为六个层面,分别是集群层、节点层、索引层、分片层、事件层、Sense。
Marvel是以Elasticsearch插件的形式存在的。在最新版本中Marvel有两个组件,一个是代理,需要安装在Elasticsearch集群中,一个是Kibana的插件,需要安装在Kibana中。
从ES 5开始,Marvel被集成至X-Pack
Marvel插件:在簇中从每个节点汇集数据。这个插件必须每个节点都得安装。
Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。它包含了Sense。
Sense
交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。
kibana安装x-pack插件
[root@Node2 ~]# /usr/share/kibana/bin/kibana-plugin install x-pack
[root@Node2 ~]# /usr/share/kibana/bin/kibana-plugin list
x-pack@5.3.0 安装过程比较久,耐心等待
运行kibana
启动之前需要禁用X-Pack 插件 security
vim config/kibana.yml
vim config/elasticsearch.yml
添加以下内容
xpack.security.enabled: false
|
先启动es节点,再启动Kibana
[root@Node2 kibana]# service kibana start
这里可能会因为权限问题导致kibana启动不了:
[root@Node2 kibana]# cat kibana.stderr
FATAL { Error: EACCES: permission denied, open '/usr/share/kibana/optimize/bundles/graph.entry.js'
at Error (native)
cause:
{ Error: EACCES: permission denied, open '/usr/share/kibana/optimize/bundles/graph.entry.js'
at Error (native)
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/usr/share/kibana/optimize/bundles/graph.entry.js' },
isOperational: true,
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/usr/share/kibana/optimize/bundles/graph.entry.js' }
[root@Node2 kibana]# ls -l /usr/share/kibana/optimize/bundles/graph.entry.js
-rw-r--r-- 1 root root 1555 Apr 18 08:17 /usr/share/kibana/optimize/bundles/graph.entry.js
[root@Node2 kibana]# ls -l /usr/share/kibana/
total 704
drwxr-xr-x 2 root root 4096 Apr 18 07:26 bin
-rw-rw-r-- 1 root root 562 Mar 23 11:47 LICENSE.txt
drwxr-xr-x 6 root root 4096 Apr 18 07:26 node
drwxr-xr-x 480 root root 20480 Apr 18 07:26 node_modules
-rw-rw-r-- 1 root root 652779 Mar 23 11:47 NOTICE.txt
drwxr-xr-x 3 kibana kibana 4096 Apr 18 07:26 optimize
-rw-rw-r-- 1 root root 701 Mar 23 11:47 package.json
drwxrwxr-x 3 kibana kibana 4096 Apr 18 08:16 plugins
-rw-rw-r-- 1 root root 4963 Mar 23 11:47 README.txt
drwxr-xr-x 10 root root 4096 Apr 18 07:26 src
drwxr-xr-x 3 root root 4096 Apr 18 07:26 ui_framework
drwxr-xr-x 2 root root 4096 Apr 18 07:26 webpackShims
### 更改相应文件的权限即可
[root@Node2 kibana]# chown kibana. -R /usr/share/kibana/
验证X-Pack
在浏览器上输入: http://localhost:5601,可以打开Kibana,此时需要输入用户名和密码登录,默认分别是 elastic 和 changeme。(如果上面禁用了x-pack的security功能就不需要认证)
3、安装head插件
需要先安装node,grunt
elasticsearch 5+ 不能直接安装head插件
由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。
1)安装node
[root@Node2 ~]# ls node-v6.10.2-linux-x64.tar.xz
node-v6.10.2-linux-x64.tar.xz
[root@Node2 ~]# tar xf node-v6.10.2-linux-x64.tar.xz
[root@Node2 ~]# ls node-v6.10.2-linux-x64
bin CHANGELOG.md include lib LICENSE README.md share
[root@Node2 ~]# ls node-v6.10.2-linux-x64/bin/ -l
total 29792
-rwxrwxr-x 1 help help 30503659 Apr 4 17:01 node
lrwxrwxrwx 1 help help 38 Apr 19 16:33 npm -> ../lib/node_modules/npm/bin/npm-cli.js
# 设置软链
[root@Node2 ~]# ln -sv /root/node-v6.10.2-linux-x64/bin/node /usr/local/bin/node
`/usr/local/bin/node' -> `/root/node-v6.10.2-linux-x64/bin/node'
[root@Node2 ~]# ln -sv /root/node-v6.10.2-linux-x64/bin/npm /usr/local/bin/npm
`/usr/local/bin/npm' -> `/root/node-v6.10.2-linux-x64/bin/npm'
# 设置npm代理镜像
[root@Node2 ~]# npm config set registry https://registry.npm.taobao.org
# 安装、配置grunt
[root@Node2 ~]# npm install -g grunt
[root@Node2 ~]# ln -s /root/node-v6.10.2-linux-x64/lib/node_modules/grunt/bin/grunt /usr/local/bin/grunt
[root@Node2 ~]# grunt --version
grunt-cli v1.2.0 grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,ES 5+ 里的head插件就是通过grunt启动的。
2)安装head
[root@Node2 ~]# git clone git://github.com/mobz/elasticsearch-head.git
[root@Node2 ~]# cd elasticsearch-head/
[root@Node2 elasticsearch-head]# ls
Dockerfile Gruntfile.js LICENCE proxy src
Dockerfile-alpine grunt_fileSets.js package.json README.textile test
elasticsearch-head.sublime-project index.html plugin-descriptor.properties _site
[root@Node2 elasticsearch-head]# npm install
### 将elasticsearch-head直接移到ES的plugins目录下应该也可以(没测试) 修改_site/app.js
// 把localhost改为ip
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.10.2:9200";修改Gruntfile.js
connect: {
server: {
options: {
hostname: "0.0.0.0", #这里
port: 9100, base: '.',
keepalive: true
}
}
}
启动grunt
[root@Node2 elasticsearch-head]# nohup grunt server &
[2] 6719
[root@Node2 elasticsearch-head]# nohup: ignoring input and appending output to `nohup.out'
七、ElasticSearch配置安装中遇到的问题
安装后,默认启动没问题,但配置es监听在别的ip上再启动就会报错(默认只监听在127.0.0.1)
0、启动elasticSearch
这里需要注意的是,es规定 root用户不能启动 es,所以需要创建一个用户来启动 es(源码安装)
# 创建用户名为 es 的用户
useradd es -p
# 设置 es 用户的密码
passwd es
# 将 /usr/local/elasticsearch-5.2.0 的拥有者设置为 es
chown -R es:es /usr/local/elasticsearch-5.2.0# 创建 es 的 data 和 logs 目录
mkdir -p /data/elasticsearch/data /data/elasticsearch/logs
chown -R es:es /data/elasticsearch编辑配置文件config/elasticsearch.yml
network.host: 你自己的服务器ip
http.port: 9200切换到 es 用户,启动 es
bin/elasticsearch
可能会出现如下两个错误:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]第一个问题解决方法:
#切换到root用户修改
vim /etc/security/limits.conf
# 在最后面追加下面内容
es hard nofile 65536
es soft nofile 65536修改后重新登录 es 用户,使用如下命令查看是否修改成功
ulimit -Hn 65536
第二个问题解决方法 提高vm.max_map_count 的大小
# 切换到root用户
vim /etc/sysctl.conf
# 在最后面追加下面内容
vm.max_map_count=262144# 使用 sysctl -p 查看修改后的结果
sysctl -p在阿里云上可能出现的问题:
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk解决方法:在es配置中加入下面命令即可
bootstrap.system_call_filter: false
以root身份运行
root@yxjay:/opt/elasticsearch-2.3.5/bin# ./elasticsearch
Exception in thread "main" Java.lang.RuntimeException: don't run elasticsearch as root..
解决方法1:
在执行elasticSearch时加上参数-Des.insecure.allow.root=true,完整命令如下
./elasticsearch -Des.insecure.allow.root=true
| 解决办法2:
用vi打开elasicsearch执行文件,在变量ES_JAVA_OPTS使用前添加以下命令
ES_JAVA_OPTS="-Des.insecure.allow.root=true"
| 这个方法的好处是以后不用添加参数就能以root身份执行.
|
|
|