一、搜索引擎

海量日志如何分析,需要搜索引擎(这只是其中的一种解决方案)

索引引擎全文搜索依赖全文索引

搜索引擎一般由两部分组成:

索引组件:存储数据并构建索引

原始内容 --> 获取 --> 构建文档 --> 文档分析(切词)--> 创建索引

搜索组件:

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.JavaVersionCheckerat 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 <http://bugs.centos.org>
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 <http://bugs.centos.org>
URL         : http://openjdk.java.net/
Summary     : OpenJDK Runtime Environment
Description :
The OpenJDK runtime environment.

启动elasticsearch:

[root@node2 ~]# service elasticsearch starttcp        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  <VERB>  '<protocol>://HOST:PORT/<PATH>?<QUERY_STRING>'  -d  '<body>'

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/<metrics>?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 pluginsCommands
--------
list - Lists installed elasticsearch plugins
install - Install a plugin
remove - Removes a plugin from elasticsearchNon-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身份执行.

转载于:https://blog.51cto.com/xiexiaojun/1916115

【ELK】02、ElasticSearch基础相关推荐

  1. 企业日志分析ELK(Logstash+Elasticsearch+Kibana)介绍及搭建

    目录 一.ELK概述 1.ELK日志分析系统 2.ELK中日志处理步骤 二.Elasticsearch介绍 1.Elasticsearch的基础核心概念 2.分片和副本 三.LogStash概述 1. ...

  2. ElasticSearch基础:从倒排索引说起,快速认知ES

    ElasticSearch基础:从倒排索引说起,快速认知ES 1 ElasticSearch认知 1.1 关于搜索 1.2 倒排索引 1.3 Lucene 1.4 ES基本概念 1.5 ES集群概念 ...

  3. Elasticsearch基础1——搜索引擎发展史和工作流程、es/es-head/kibana的基础安装

    文章目录 一.搜索引擎 1.1 搜索引擎的发展背景 1.2 Lucene和Elasticsearch 1.3 Solr和Elasticsearch对比 1.4 数据搜索方式 1.5 搜索引擎 1.5. ...

  4. ElasticSearch基础学习笔记

    在学习ElasticSearch之前,先简单了解一下Lucene: Doug Cutting开发 是apache软件基金会4 jakarta项目组的一个子项目 是一个开放源代码的全文检索引擎工具包 不 ...

  5. ElasticSearch 基础(四)之 常用 API 测试

    目录 前言 一.查看(Cat) API 1.查看节点信息 2.查看各节点机器存储信息 3.查询索引信息 4.查询分片信息 5.查询集群健康状态 6.查询集群所有的别名索引 7.查询主节点信息 8.查询 ...

  6. ELK日常使用基础篇

    本文字数:11149字 预计阅读时间:28分钟 前 言 在后端开发工程师的日常工作中,在遇到比如定位排查问题或是想要了解系统某些方面的情况时,会遇到以下的场景: 查询某个接口请求的日志. 查询某个服务 ...

  7. 深入浅出Pytorch:02 PyTorch基础知识

    深入浅出Pytorch 02 PyTorch基础知识 内容属性:深度学习(实践)专题 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:叶志雄 航海士:李嘉骐.牛志康.刘洋.陈安东 开源内容:http ...

  8. ElasticSearch基础杂烩-配置-索引-优化

    2019独角兽企业重金招聘Python工程师标准>>> ElasticSearch基础杂烩-配置-索引-优化 博客分类: java 前言 ElasticSearch是一个基于Luce ...

  9. Elasticsearch基础教程ES

    Elasticsearch基础教程     翻译:潘飞(tinylambda@gmail.com) 基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助 ...

  10. Maven-学习笔记02【基础-Maven的安装和仓库种类】

    Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...

最新文章

  1. smarty中的内建函数(二)if、section
  2. JavaSE 国际化 简单例子
  3. html td显示隐藏,显示/隐藏Html TR/TD
  4. PaperNotes(15)-图神经网络、PyG极简版入门笔记
  5. 【LeetCode笔记】69. x 的平方根(Java、二分)
  6. C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
  7. 【C语言期末实训】学生学籍管理系统
  8. MySQL 每秒 570000 的写入,如何实现?
  9. win8.1使用及优化
  10. 20165309 《网络对抗技术》实验二:后门原理与实践
  11. delphi启动ie调用本地html传参数_年轻人不讲武德啊!了解下浏览器如何解析html、css,js
  12. 定义m是第一个数,之后的每个数都是前一个的平方根,一共有n个数,计算总和。
  13. Mongoose -查询条件
  14. AfterEffects CS6安装插件教程
  15. 高性能服务器架构 第四篇
  16. android 老年模式 oppo,善用手机“老人模式”,OPPO这几大核心功能很关键
  17. Linux进程调度器概述--Linux进程的管理与调度(十五)
  18. 马蜂窝毕博:分析完这9点工作原理,我们最终选择了 Apache SeaTunnel!
  19. 重走长征路---OI每周刷题记录---8月16日 2014
  20. vlc for android 不能全屏,或者画面不能铺满的问题。

热门文章

  1. 【转】优秀的JavaScript模块是怎样炼成的
  2. 北京市社会保险个人权益记录(参保人员缴费信息)-社保定制
  3. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...
  4. 史上最经典的K线买入技巧
  5. SVN_Windows安装Subversion(svn 命令行工具)教程
  6. Johnson-Trotter算法求全排列
  7. [渝粤教育] 上海交通大学 流体力学 参考 资料
  8. 零基础零经验自学Python,到精通Python要多久啊?
  9. 什么是Java SDK
  10. java树结构stream工具类