序言:Lucene和Solr和Elasticsearch的区别

Lucene

Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。官网地址:https://lucene.apache.org/

Solr

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。官网地址:http://lucene.apache.org/solr/

Elasticsearch
Elasticsearch跟Solr一样,也是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。官网地址:https://www.elastic.co/products/elasticsearch

原文:https://blog.csdn.net/ms_lang/article/details/83215015

1、Elasticsearch的优缺点:
优点:

1.Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。

2.Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。

3.处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。

4.Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。

5.各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。

缺点:

1.只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)

2.还不够自动(不适合当前新的Index Warmup API)

2、Solr的优缺点:
优点

1.Solr有一个更大、更成熟的用户、开发和贡献者社区。

2.支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。

3.Solr比较成熟、稳定。

4.不考虑建索引的同时进行搜索,速度更快。

缺点

1.建立索引时,搜索效率下降,实时索引搜索效率不高。

3、Elasticsearch 与 Solr 的比较:

1.二者安装都很简单;

2.Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;

3.Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;

4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;

5.Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

6.Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

使用案例:

1.维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。

2.英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。

3.StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。

4.GitHub使用Elasticsearch来检索超过1300亿行代码。

5.每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

优点:

1.Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。

2.Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。

3.处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。

4.Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。

5.各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。

缺点:

1.只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)

2.还不够自动(不适合当前新的Index Warmup API)

2、Solr的优缺点:
优点

1.Solr有一个更大、更成熟的用户、开发和贡献者社区。

2.支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。

3.Solr比较成熟、稳定。

4.不考虑建索引的同时进行搜索,速度更快。

缺点

1.建立索引时,搜索效率下降,实时索引搜索效率不高。

3、Elasticsearch 与 Solr 的比较:

1.二者安装都很简单;

2.Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;

3.Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;

4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;

5.Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

6.Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

使用案例:

1.维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。

2.英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。

3.StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。

4.GitHub使用Elasticsearch来检索超过1300亿行代码。

5.每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

安装ELK-Elasticsearch

https://www.jianshu.com/p/f53da7e6469c

首先elkuser用户登录:
启动顺序:
(1)cd elasticsearch-6.1.0
bin/elasticsearch -d
(2)cd elasticsearch-head
grunt server &
(3)cd kibana-6.6.1
bin/kibana &

web界面查看:
http://192.168.100.200:9100/
http://192.168.100.200:9200/
http://192.168.100.200:5601/

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。要负责数据存储与搜索。

1、Elasticsearch安装所需环境

Elasticsearch对于JAVA JDK环境有要求,需要JDK1.8或以上的支持
先查看 `rpm -qa | grep java`,如果openjdk,则可使用yum remove来删除
[root@localhost /]# `rpm -qa | grep java`
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
[root@localhost /]#`yum -y remove java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5`下载JDK之后,解压文件,并设置PATH、JAVA_HOME既可以配置完成。

2、Elasticsearch下载安装及配置

[root@localhost local]# `tar -zxvf elasticsearch-6.1.0.tar.gz`
[root@localhost elasticsearch-6.1.0]# pwd
/usr/local/elasticsearch-6.1.0

(1)Elasticsearch配置文件
现在我们来配置config/elasticsearch.yml文件,

cluster.name: jun-application
node.name: centOS7
node.attr.rack: r1
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.100.200
http.port: 9200
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
discovery.zen.minimum_master_nodes:
gateway.recover_after_nodes: 3
action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"置文件注释. cluster.name: kencery 配置Elasticsearch的集群名称,默认是elasticsearch,Elasticsearch会自动发现在同一网段下的es集群,如果在同一个网段下有多个集群,可以利用这个属性来区分不同的集群。
. node.name : "kencery-node1" 集群的节点名称,Elasticsearch启动的时候会自动创建节点名称,但是你也可以进行配置。
. node.rack: r1 每个节点都可以定义一些与之关联的通用属性,用于后期集群进行碎片分配时的过滤。
. path.data: /path/to/data 设置索引数据的存储路径,默认是Elasticsearch根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,是的数据在文件级别跨域位置,这样在创建时就有更多的自由路径,如:path.data: /path/to/data1,/path/to/data2
. path.logs: /path/to/logs 设置日志文件的存储路径,默认是Elasticsearch根目录下的logs文件夹。
. bootstrap.mlockall: true 设置为true来锁住内存,因为当JVM开始swapping的时候Elasticsearch的效率会降低,所以要保证他不被swap,可以吧ES_MIN_MEN和ES_MAX_MEN两个环境变量设置为同一个值,并且保证机器有足够的内存分配给Elasticsearch,同时也要允许Elasticsearch的进程可以锁住内存,Linux下可以通过`ulimit -l unlimited`命令。
. network.host: 192.168.37.133 设置绑定的IP地址,可以是ipv4或者ipv5,默认使用0.0.0.0地址,并为http传输开启9200、9300端口,为节点到节点的通信开启9300-9400端口,也可以自行设置IP地址。
. http.port: 9200 设置对外服务的Http端口,默认是9200
. discovery.zen.ping.unicast.hosts: ["192.168.37.133", "192.168.37.137"] 设置集群中master节点的初始化列表,可以通过这些节点来自动发现新加入集群的节点(主要用于不同网段机器连接)。
. discovery.zen.minimum_master_nodes: 3 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点,默认为1,当集群多余三个节点时,可以设置大一点的值(2-4)
. gateway.recover_after_nodes: 3 设置集群中国N个节点启动时进行数据恢复,默认是1
. node.max_local_storage_nodes: 1 默认情况下,多个节点可以在同一个安装路径启动,如果你想让你的Elasticsearch只启动一个节点,在这合理设置。
. action.destructive_requires_name: true 设置是否可以通过正则或者_all删除或者关闭索引。
具体修改如下:cluster.name: my-application
node.name: node-1
path.data: /usr/local/elastic/data
path.logs: /usr/local/elastic/logs
bootstrap.system_call_filter: false
network.host: 192.168.1.20
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.11"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
action.auto_create_index: true
增加用户:useradd -d /usr/username -m username
为用户增加密码:passwd username
新建工作组:groupadd groupname
将用户添加进工作组:usermod -G groupname username
删除用户:userdel username

(2)Elasticsearch创建普通用户
[root@localhost /]# useradd elkuser
#elasticsearch 只能用非 root 启动
[root@localhost /]# chown -R elkuser.elkuser elasticsearch-6.1.0

(3)Elasticsearch文件打开数及堆大小检测
1.max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

修改/etc/security/limits.conf文件,添加或修改如下行:

 *        hard    nofile           65536*        soft    nofile           65536

2.max virtual memory areas vm.max……

修改 /etc/sysctl.conf 文件,添加如下行:
vm.max_map_count=262144
修改好了以后,运行/sbin/sysctl -p

重启以后,再启动es即可,就可以通过主机ip访问。

3.如果是内存不足就需要调整内存大小了或者调整config/jvm.options的参数

在elasticsearch-6.1.0/config目录中有jvm.options文件,可以设置JVM大小
[root@localhost config]# pwd
/usr/local/elasticsearch-6.1.0/config
[root@localhost config]# ls
elasticsearch.yml jvm.options log4j2.properties
[root@localhost config]# vi jvm.options
-Xms2g
-Xmx2g

(4)启动Elasticsearch
前序工作全部准备完成后,即可在elasticsearch-6.1.0目录中的bin目录下执行elasticsearch-6.1.0文件:
[root@localhost bin]# ./elasticsearch
[root@localhost bin]# ./elasticsearch -d 可以使其在后台运行

(5)浏览器访问 http://localhost:9200 ,可以查看到对应的节点信息,如下显示则说明启动正常:

如果集群启动出现问题:

1. 修改/etc/security/limits.conf在最后添加
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 40962. 切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
vm.max_map_count=6553603.删除 elasticsearch-6.1.0/data目录下的所有文件4. /sbin/sysctl -p
5. 然后重启

ELK的安装配置启动

1)安装kibana
tar -zxf kibana-5.3.0-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/; mv kibana-5.3.0-linux-x86_64.tar.gz kibana
vim kibana/config/kibana.yml
具体修改如下:

server.port: 5601
server.host: "192.168.1.20"
elasticsearch.url: "http://192.168.1.20:9200"
kibana.index: "kibana"

2)安装logstash
tar -zxf logstash-5.3.0.tar.gz -C /usr/local
cd /usr/local;mv logstash-5.3.0.tar.gz logstash

编辑logstash.conf配置文件

input {file {type => "logstash-log"path => "/usr/local/logstash/logs/logstash-plain.log"  #定义数据源}}output {elasticsearch {hosts => ["http://192.168.1.20:9200"]index => "logstash20_%{+YYYY-MM-dd}"  #定义数据的格式}
}

3)IK分词器安装:

第一步:
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip
第二步:
cp elasticsearch-analysis-ik-6.6.1.zip ./elasticsearch-6.6.1/plugins/
第三步:
unzip elasticsearch-analysis-ik-6.6.1.zip -d ik-analyzer

4)jieba分词插件安装
https://blog.csdn.net/tingkr/article/details/84029738#24_jieba_213

1>:jieba分词插件下载: https://github.com/sing1ee/elasticsearch-jieba-plugin/releases
2>:gradle工具下载: http://services.gradle.org/distributions/
3>:gradle安装
第一步:下载某版本的gradle工具后,解压到某路径。

第二步:添加gradle路径。通过修改/etc/profile文件,在文件末尾添以下语句,并通过语句source /etc/profile使修改生效。

export GRADLE_HOME=/usr/local/gradle-5.0 #gradle 路径
export PATH=$GRADLE_HOME/bin:$PATH
export GRADLE_USER_HOME=$GRADLE_HOME/.gradle #gradle的配置文件位置,该目录下的init.gradle指定了远程库路径

在命令行窗口输入gradle -version,若显示正确的gradle版本信息,则表示安装成功。

在使用gradle pz编译jieba插件时,从国外镜像下载相关资源一般会失败,需要添加国内的阿里云镜像。

对单个项目生效,则修改该项目路径下的build.gradle的内容,修改对应buildscriptallprojects项的内容如下

buildscript {repositories {maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}}dependencies {#建议注释该项内容,在使用gradle pz时易报错classpath 'com.android.tools.build:gradle:2.2.3' }
}allprojects {repositories {maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}}
}

修改完后,在使用语句gradle pz在Linux环境下编译jieba插件时一般不会报错。接下来就可以进入到编译jieba插件阶段。
而本人在服务器上编译时遇到如下问题,怀疑是和网络连接限制的相关问题。网上很少资料涉及到这个问题,做了基本能做的尝试,都没法解决此问题,如果有人遇到类似问题也解决了,请不要吝啬来告诉我方法吧。

FAILUER: Build failed with an exception.

  • What went wrong:
    Execution failed for task ‘:compileJava’.

Could not resolve all files for configuration ‘:compileClasspath’.
Could not resolve com.huaban:jieba-analysis:1.0.2.
Required by:
project :
Could not resolve com.huaban:jieba-analysis:1.0.2.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
maven.aliyun.com
Could not resolve com.huaban:jieba-analysis:1.0.2.
Could not get resource ‘https://jcenter.bintray.com/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
Could not GET ‘https://jcenter.bintray.com/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
jcenter.bintray.com
Could not resolve org.elasticsearch:elasticsearch:6.4.0.
Required by:
project :
Could not resolve org.elasticsearch:elasticsearch:6.4.0.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
maven.aliyun.com
Could not resolve org.elasticsearch:elasticsearch:6.4.0.
Could not get resource ‘https://jcenter.bintray.com/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
Could not GET ‘https://jcenter.bintray.com/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
jcenter.bintray.com
Could not resolve org.apache.logging.log4j:log4j-api:2.7.
Required by:
project :
Could not resolve org.apache.logging.log4j:log4j-api:2.7.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
maven.aliyun.com
Could not resolve org.apache.logging.log4j:log4j-api:2.7.
Could not get resource ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
Could not GET ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
jcenter.bintray.com
Could not resolve org.apache.logging.log4j:log4j-core:2.7.
Required by:
project :
Could not resolve org.apache.logging.log4j:log4j-core:2.7.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
maven.aliyun.com
Could not resolve org.apache.logging.log4j:log4j-core:2.7.
Could not get resource ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
Could not GET ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
jcenter.bintray.com

jieba插件安装
和windows环境下几乎相同。

下载和es版本相同版本的jieba分词插件,解压,运行gradle pz。
在运行gradle pz时可能会提示没有操作权限,则需查看当前文件夹是否可执行,可用chmod -R 777 .修改当前用户对整个文件夹的操作权限。

第一步:从命令行窗口进入jieba分词插件解压路径,运行gradle pz。编译成功,将会在./build/distributions/目录下生成一个压缩包。第二步:将压缩包解压,拷贝到${elasticsearch_home}/plugins路径下,可删除压缩包文件。

编译成功,在./build/distributions/目录下生成一个压缩包,拷贝到${elasticsearch_home}/plugins路径下并解压,可删除压缩包文件。

验证jieba分词是否安装成功同windows环境。略微差异在于,如果是服务器,在局域网的其它机器的浏览器输入内容时,localhost替换成浏览器的ip地址,

在浏览器中输入  http://localhost:9200/_analyze?analyzer=jieba_index&pretty=true&text=输入要分词的句子,浏览器返回分词后的结果,则说明jieba分词安装成功。

logstash配置文件具体可参考
https://blog.csdn.net/gamer_gyt/article/details/59077189
http://www.51niux.com/?id=201
https://blog.csdn.net/qq_21383435/article/details/79367821
http://www.cnblogs.com/yincheng/p/logstash.html
https://blog.csdn.net/weixin_41047933/article/details/82699823

然后依次启动elasticsearch、kibana、logstash

/usr/local/elasticsearch/bin/elasticserch -d

/usr/local/kibana/bin/kibana &

/usr/local/logstash/bin/lostash -f /usr/local/logstash/conf/logstash.conf &

3、Elasticsearch安装Head插件

Elasticsearch-head是一个界面化的集群操作和管理工具,可以对集群进行傻瓜式操作。你可以通过插件把它集成到es(首选方式),也可以安装成一个独立webapp。
  ES-head主要有四个方面的操作:

显示集群的拓扑,并且能够执行索引和节点级别操作
搜索接口能够查询集群中原始json或表格格式的检索数据
能够快速访问并显示集群的状态
有一个输入窗口,允许任意调用RESTful API。这个接口包含几个选项,可以组合在一起以产生有趣的结果;
 - 请求方法(get、put、post、delete),查询json数据,节点和路径
 - 支持JSON验证器
 - 支持重复请求计时器
 - 支持使用javascript表达式变换结果
 - 收集结果的能力随着时间的推移(使用定时器),或比较的结果
 - 能力图表转换后的结果在一个简单的条形图(包括时间序列)

(1)安装git

yum install git

(2)Nodejs安装

[root@localhost local]#tar -xvf node-v8.9.0-linux-x64.tar.xz
[root@localhost node-v8.9.0]# pwd
/usr/local/node-v8.9.0

配置NODE_HOME,进入profile编辑环境变量

vim /etc/profile
设置nodejs环境变量

 #set for nodejsexport NODE_HOME=/usr/local/node-v8.9.03export PATH=$NODE_HOME/bin:$PATH

source /etc/profile
验证是否安装配置成功
node -v

(3)Grunt安装

npm install -g grunt-cli
grunt -version – 安装后 ,查看 grunt版本。

(4)下载 head 插件的源码并安装

git clone git://github.com/mobz/elasticsearch-head.git

第一步:elasticsearch-head/Gruntfile.js,增加hostname属性

 connect: {server: {options: {port: 9100,hostname: '0.0.0.0',base: '.',keepalive: true}}}

第二步:
elasticsearch-head/_site/app.js。修改head的连接地址

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
把localhost修改成你es的服务器地址,如:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.100.200:9200";

第三步:然后在elasticsearch-head源码目录中,执行npm install:
npm install -g
npm install grunt --save-dev
执行 npm run start

(需要下面这些依赖):
npm install grunt-contrib-clean --registry=https://registry.npm.taobao.org
npm install grunt-contrib-concat --registry=https://registry.npm.taobao.org
npm install grunt-contrib-watch --registry=https://registry.npm.taobao.org
npm install grunt-contrib-connect --registry=https://registry.npm.taobao.org
npm install grunt-contrib-copy --registry=https://registry.npm.taobao.org
npm install grunt-contrib-jasmine --registry=https://registry.npm.taobao.org

原文:https://blog.csdn.net/laotoumo/article/details/53890279

第四步:在elasticsearch-head源代码目录下启动nodejs,
运行grunt server
运行成功后,访问 http://localhost:9100 网站,即可看到elasticsearch的相关信息

4、Linux安装Kibana

地址:https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651853123&idx=1&sn=4060d547481b4ea23982228ab97fcdce&chksm=8049540ab73edd1c171a0655154c723a70dcc9f88de1591b1192db75323354ab8dd29fe9bbcb&xtrack=1&scene=0&subscene=131&clicktime=1552135310&ascene=7&devicetype=android-22&version=2700033b&nettype=WIFI&abtest_cookie=BQABAAgACgALABIAEwAGAJ6GHgAjlx4AVpkeAL2ZHgDSmR4A3JkeAAAA&lang=en&pass_ticket=NCLi2F0HmXz7hbfNnB89%2FgSBEXLELurZZwA8Nlf%2FzzTFOVYdy%2BB7YDSFWUAuof%2B9&wx_header=1

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。

Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。
一、安装kibana6.0
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz
tar -zxvf kibana-6.0.0-linux-x86_64.tar.gz -C /opt/modules/
mv /opt/modules/kibana-6.0.0-linux-x86_64 /opt/modules/kibana
cd /opt/modules/kibana

二、配制文件
mkdir -p /opt/data/logs/kibana
chmod 777 /opt/data/logs/kibana
vi /opt/modules/kibana/config/kibana.yml
kibana.yml内容

server.name: "MyKibana"
server.host: "192.168.46.132"
server.port: 5601
#可通过 http://192.168.46.132:5601 在浏览器访问
server.name: "MyKibana"
server.host: "192.168.100.200"
server.port: 5601
#指定elasticsearch节点
elasticsearch.url: "http://192.168.46.132:9200"
pid.file: /var/run/kibana.pid
# 日志目录
logging.dest: /opt/data/logs/kibana/kibana.log
# 间隔多少毫秒,最小是100ms,默认是5000ms即5秒
ops.interval: 5000

修改好配置文件后,就可以启动Kibana服务了。
/opt/modules/kibana/bin/kibana

在浏览器访问:http://192.168.46.132:5601
初次进入需要至少创建一个索引模板,这个是对应elasticsearch中的索引;
默认给的是logstash-*,由于在es中我已经有test索引了,所以我直接在这里输入test然后点创建就可以了。
创建好索引模板后,在Discover(发现),左边选择test,右上角选择时间,就可以看到es中的数据了,左边可以选择要显示的

5、安装Logstash

https://www.cnblogs.com/blogjun/articles/8064646.html
一、什么是Logstash
Logstash是一个开源的、接受来自多种数据源(input)、过滤你想要的数据(filter)、存储到其他设备的日志管理程序。Logstash包含三个基本插件input\filter\output,一个基本的logstash服务必须包含input和output.

Logstash如何工作:

Logstash数据处理有三个阶段,input–>filter–>output.input生产数据,filter根据定义的规则修改数据,output将数据输出到你定义的存储位置。


Inputs:

数据生产商,包含以下几个常用输出:

file: 从文件系统中读取文件,类似使用tail -0F

syslog: syslog服务,监听在514端口使用RFC3164格式

redis: 从redis服务读取,使用redis管道和列表。

beats: 一种代理,自己负责收集好数据然后转发给Logstash,常用的如filebeat.

Filters:

filters相当一个加工管道,它会一条一条过滤数据根据你定义的规则,常用的filters如下:

grok: 解析无规则的文字并转化为有结构的格式。

mutate: 丰富的基础类型处理,包括类型转换、字符串处理、字段处理等。

drop: 丢弃一部分events不进行处理,例如: debug events

clone: 负责一个event,这个过程中可以添加或删除字段。

geoip: 添加地理信息(为前台kibana图形化展示使用)

Outputs:

elasticserache elasticserache接收并保存数据,并将数据给kibana前端展示。

output 标准输出,直接打印在屏幕上。

二、Logstash的安装配置
Logstash运行仅仅依赖java运行环境(jre),JDK版本1.8以上即可。直接从ELK官网下载Logstash:https://www.elastic.co/cn/products

1 # tar -zxvf logstash-6.1.0.tar.gz
2 # cd logstash-6.1.0
现在我们来运行一下一个简单的例子:

1 # bin/logstash -e 'input { stdin { } } output { stdout {} }'
我们现在可以在命令行下输入一些字符,然后我们将看到logstash的输出内容:

1 hello world
2 2017-11-21T01:22:14.405+0000 0.0.0.0 hello world

Ok,还挺有意思的吧… 以上例子我们在运行logstash中,定义了一个叫”stdin”的input还有一个”stdout”的output,无论我们输入什么字符,Logstash都会按照某种格式来返回我们输入的字符。这里注意我们在命令行中使用了-e参数,该参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。
让我们再试个更有意思的例子。首先我们在命令行下使用CTRL-C命令退出之前运行的Logstash。现在我们重新运行Logstash使用下面的命令:

1 # bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'

我们再输入一些字符,这次我们输入”hello world ”:

1 hello world2 {
3   "message" => "hello world",
4   "@timestamp" => "2017-11-20T23:48:05.335Z",
5   "@version" => "1",
6   "host" => "node1"
7 }

以上示例通过重新设置了叫”stdout”的output(添加了”codec”参数),我们就可以改变Logstash的输出表现。类似的我们可以通过在你的配置文件中添加或者修改inputs、outputs、filters,就可以使随意的格式化日志数据成为可能,从而订制更合理的存储格式为查询提供便利。

前面已经说过Logstash必须有一个输入和一个输出,上面的例子表示从终端上输入并输出到终端。

数据在线程之间以事件的形式流传。不要叫行,因为Logstash可以处理多行事件。

input {# 输入域,可以使用上面提到的几种输入方式。stdin{} 表示标准输入,file{} 表示从文件读取。input的各种插件:     https://www.elastic.co/guide/en/logstash/current/input-plugins.html}output {#Logstash的功能就是对数据进行加工,上述例子就是Logstash的格式化输出,当然这是最简单的。output的各种插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html}

Logstash配置文件和命令:

Logstash的默认配置已经够我们使用了,从5.0后使用logstash.yml文件,可以将一些命令行参数直接写到YAML文件即可。

–configtest 或 -t 用于测试Logstash的配置语法是否正确,非常好的一个参数。

–log 或 -l Logstash默认输出日志到标准输出,指定Logstash的日志存放位置

–pipeline-workers 或 -w 指定运行filter和output的pipeline线程数量,使用默认就好。

-f 指定规则文件,可以将自己的文件放在同一个路径下,使用-f 即可运行。

一个简单的Logstash从文件中读取配置

 1 vim file.conf  #file.conf可以放在任意位置2 input {3         stdin {4         }5 }6 output {7         stdout {8                 codec=>rubydebug9         }
10 }
12  bin/logstash -f /root/conf/file.conf  #启动即可

三、一些常用的插件
1、grok插件

Grok是Logstash最重要的插件,你可以在grok里自定义好命名规则,然后在grok参数或者其他正则表达式中引用它。

官方给出了120个左右默认的模式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

1 USERNAME [a-zA-Z0-9._-]+
2 USER %{USERNAME}
第一行,用普通的正则表达式来定义一个grok表达式;第二行,通过打印赋值格式,用前面定义好的grok表达式来定义里一个grok表达式。

正则表达式引格式:

1 %{SYNTAX:SEMANTIC}
SYNTAX:表示你的规则是如何被匹配的,比如3.14将会被NUMBER模式匹配,55.1.1.2将会被IP模式匹配。SEMANTIC:表示被匹配到的唯一标识符,比如3.14被匹配到了后,SEMANTIC就当是3.14。

匹配到的数据默认是strings类型,当然你也可以装换你匹配到的数据,类似这样:

%{NUMBER:num:int}
当前只支持装换为int和float。

例如:

1 filter {
2     grok {
3         match => {
4             "message" => "%{WORD} %{NUMBER:request_time:float} %{WORD}"
5         }
6     }
7 }
1 jasi 12.12 asioa
2 {
3       "@timestamp" => 2017-02-08T05:55:18.460Z,
4     "request_time" => 12.12,
5         "@version" => "1",
6             "host" => "0.0.0.0",
7          "message" => "jasi 12.12 asioa"
8 }

这个我们就匹配到我们想要的值了,并将名字命名为:request_time

在实际生产中为了方便我们不可能在配置文件中一行一行的写表达式,建议把所有的grok表达式统一写到一个地方,使用patterns_dir选项来引用。

1 grok {
2        patterns_dir => "/root/conf/nginx"  #这是你定义的grok表达式文件
3        match => { "message" => "%{CDN_FORMAT}" }
4        add_tag => ["CDN"]
5 }

事实上,我们收集的日志也有很多不需要的地方,我们可以删除一部分field信息,保留我们想要的那一部分。

 1 grok {2        match => {3                 "message" => "%{WORD} %{NUMBER:request_time:float} %{WORD}"4         }5         remove_field => [ "request_time" ]6         overwrite => [ "message" ]7         }8 as 12 as9 {
10     "@timestamp" => 2017-02-08T06:39:07.921Z,
11       "@version" => "1",
12           "host" => "0.0.0.0",
13        "message" => "as 12 as"
14 }

已经没有request_time这个field啦~

更多关于grok的用户看官方文档:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

最重要的一点:我强烈建议每个人都要使用 Grok Debugger 来调试自己的 grok 表达式。

2、kv插件

在很多的情况下,日志类容本身就是类似于key-value的格式,kv插件就是自动处理类似于key=value样式的数据。

kv {source => "request"  #数据来源,默认是messagefield_split => "&" # 用于分割键值对value_split => "="  # 识别键值对的关系,如 k1:v1 k2:v2 ":"即为键值对关系连接符
}

3、geoip插件

geoip主要是查询IP地址归属地,用来判断访问网站的来源地。
1         geoip {
2                 source => "clientip"
3                 fields => [ "ip","city_name","country_name","location" ]  #fields包含信息太多,可以自定义
4         }

Logstash还有许多比较常用的插件,如json\multiline等,可以到官方文档查看。

ElasticSearch及插件安装相关推荐

  1. elasticsearch的插件安装

    目前使用的是2.4.5版本的es 安装的时候注意以下几点 : 1.如果想所有的ip都能访问es,需要修改config下的elasticsearch.yml.修改如下 network.host=0.0. ...

  2. ElasticSearch sql 插件安装

    PS:6.3 开始 ElasticSearch 自身已经支持SQL查询. github地址:https://github.com/NLPchina/elasticsearch-sql 一.在线安装 直 ...

  3. 分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)

    在安装插件的过程中,尤其是安装Marvel插件遇到了很多问题,要下载license.Marvel-agent,又要下载安装Kibana 版本需求 Java 7 or later Elasticsear ...

  4. Elasticsearch之kopf插件安装之后的浏览详解

    前提, Elasticsearch之插件介绍及安装 https://i.cnblogs.com/posts?categoryid=950999&page=2  (强烈建议,从头开始看) 比如, ...

  5. Elasticsearch之插件介绍及安装

    ES站点插件(以网页形式展现) 1.BigDesk Plugin (作者 Lukáš Vlček) 简介:监控es状态的插件,推荐![目前不支持2.x] 2.Elasticsearch Head Pl ...

  6. Elasticsearch集群监控工具bigdesk插件安装

    bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况,http连接数等. 项目git地址: https://g ...

  7. ES | CentOS下基于ElasticSearch的head插件安装

    文章目录: ▶ 环境要求 ▶ node下载 ▶ node安装 ▶ head插件下载 ▶ head插件安装 ▶ 启动ElasticSearch-head ▶ 访问验证ElasticSearch-head ...

  8. ELK日志分析平台(一)—elasticsearch安装及配置、elasticsearch图形化插件安装

    1.elasticsearch简介 elastic官网 2.安装及配置 官方下载网站 本次实验版本用7.6 [root@foundation50 ~]# cd /mnt/pub/docs/elk/7. ...

  9. elasticsearch插件一——-head插件安装详解

    一.elasticsearch-head插件介绍 elasticsearch-head是一个用来浏览.与Elastic Search簇进行交互的web前端展示插件. elasticsearch-hea ...

最新文章

  1. d029: 求出2-100之间的所有质数(素数)
  2. 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?
  3. java zip malformed_关于Java解压文件的一些坑及经验分享(MALFORMED异常)
  4. MariaDB架构图与执行流程概述
  5. 15.concurrent-control并发控制
  6. js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品
  7. 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC
  8. 010 、JVM实战总结: 动手实验:亲自感受一下线上系统部署时如何设置JVM内存大小
  9. Spring Boot 解决方案 - 会话
  10. windows上传文件到linux乱码解决
  11. 如何识别媒体偏见_面部识别软件:宝贵资产,还是社会偏见的体现?
  12. 0514JS函数练习
  13. 怎么使用水经注万能地图下载器制作百度个性化地图-人造区域篇
  14. Ubuntu(debian) 程序 dep 打包
  15. 容器学习笔记之CPU Cgroup
  16. jQuery源码中的“new jQuery.fn.init()”什么意思?
  17. 谷歌浏览器下载速度很慢,怎么解决?
  18. 问题 A: 循环吧,太一!
  19. 如何在五分钟让你的应用拥有高精度定位功能
  20. 给discuz x增加后台菜单管理功能

热门文章

  1. Win10 + GTX1650显卡 安装 Cuda-10.1 + CuDNN-7.6 + Tensorflow-gpu-1.15.0 一步到位
  2. 怎么样才能买到廉价机票
  3. HEVC学习(三十四) —— 去方块滤波之五
  4. 图学习——04.HAN(异构图注意力网络)
  5. Linux 文件属性与权限
  6. 1130. 【NOIP2005PJ】循环
  7. 基于深度学习的医学图像分割(一)
  8. c语言windows画五角星,C/C++画一个巨型五角星
  9. 萌新小白学3D建模需要什么软件,十年经验建模师为你解答,速看
  10. python代码风格指南_记录Python代码:完整指南