ELK实战学习之环境搭建

in ELK with 0 comment

一、简介

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是
迄今为止最先进、性能最好的、功能最全的搜索引擎库。

但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

ElasticSearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

Elasticsearch的中文网址:https://www.elastic.co/cn/products/elasticsearch

1.1 正向索引与倒排索引

正向索引与倒排索引,这是在搜索领域中非常重要的两个名词,正向索引通常用于数据库中,在搜索引擎领域使用
的最多的就是倒排索引,我们根据如下两个网页来对这两个概念进行阐述:

html1:

我爱我的祖国,我爱编程

html2:

我爱编程,我是个快乐的小码农

正向索引: 假设我们使用mysql的全文检索,会对如上两句话分别进行分词处理,那么预计得到的结果如下:

我 爱 爱我 祖国 我的祖国 编程 爱编程 我爱编程
我 我爱 爱 编程 爱编程 我爱编程 快乐 码农 小码农

假设我们现在使用正向索引搜索 编程这个词,那么会到第一句话中去查找是否包含有编程这个关键词。如果有则加入到结果集中;第二句话也是如此。假设现在有成千上百个网页,每个网页非常非常的分词,那么搜索的效率
将会非常非常低些。

倒排索引: 按照分词与文档进行映射,我们来看看如果按照倒排索引的效果如下:

关键词文档名
html1,html2
html1,html2
爱我html1
我爱html2
祖国html1
我的祖国html1
编程html1,html2
我爱编程html1,html2
爱编程html1,html2
快乐html2
码农html2
小码农html2

如果采用倒排索引的方式搜索编程这个词,那么会直接找到关键词中查找到编程,然后查找到对应的文档,这就是所谓的倒排索引。

1.2 Elasticsearch概念以及产品

Elasticsearch中的索引的概念与数据库中索引的概念是完全不一样的,Elasticsearch中索引如果类比到数据库,那就是一个数据库名。
文档在Elasticsearch中就是具体的数据,类比到数据库中那就是一条记录。

二、ElasticSearch环境搭建

下载

官网下载地址:https://www.elastic.co/cn/start

在下载页面我们需要下载 Elasticsearch和Kibana.

因为某些原因,下载速度会非常慢。我们可以去国内的镜像站下载。

华为镜像站:https://mirrors.huaweicloud.com

华为镜像站

我用的是阿里云ECS服务器,Linux系统。后续都是以linux版本软件为演示。并使Elasticsearch和Kibana的版本号(7.4.2)保持一致。

wget http://xxx.xxx.xxx

安装

我们先将下载后的ElasticSearch和Kibana进行解压

tar -xvf xxxx.tar.gz

进入ElasticSearch/bin目录,使用后台方式(参数:-d)启动elasticsearch

./elasticsearch -d

ElasticSearch的默认http端口是9200,我们使用curl测试,是否可以访问。

curl http://localhost:9200

就会看到下面的输出:

输出

可能遇到的问题

有的同学在root用户中,执行./elasticsearch ,会报错 can not run elasticsearch as root

因为为了安全不允许使用root用户启动,而且es5之后,都不能使用添加启动参数或者修改配置文件等方法启动了,必须需要创建用户。那我们只要新建一个用户,并把对应的文件夹权限赋给该用户。

# 创建用户:wenwen
root@iZuakkxd8bctzgZ:~# adduser wenwen
# 创建用户密码,需要输入两次
root@iZuakkxd8bctzgZ:~# passwd wenwen
# 将对应的文件夹权限赋给wenwen用户
root@iZuakkxd8bctzgZ:~# chown -R wenwen:wenwen elasticsearch-7.4.2
# 切换至wenwen用户
root@iZuakkxd8bctzgZ:~# su wenwen
# 进入到bin目录,启动elasticsearch
wenwen@iZuakkxd8bctzgZ:~/elasticsearch-7.4.2/bin$ ./elasticsearch -d
# 如果返回一个json数据,说明启动成功
wenwen@iZuakkxd8bctzgZ:~/elasticsearch-7.4.2/bin$ curl http://localhost:9200

三、Kibana环境搭建

Kibana是世界上最受欢迎的开源日志分析平台ELK Stack中的“K”,它为用户提供了一个工具,用于在存储于Elasticsearch集群中的日志数据进行检索,可视化和构建仪表板。
Kibana的核心功能是数据查询和分析。使用各种方法,用户可以搜索Elasticsearch中索引的数据,以查找其数据中的特定事件或字符串,以进行根本原因分析和诊断。基于这些查询,用户可以使用Kibana的可视化功能,允许用户使用图表,表格,地理图和其他类型的可视化以各种不同的方式可视化数据。

继续使用wget下载Kibana安装包

wget http://xxxx

解压安装包

tar -xvf kibana_xxx_xxx.tar.gz

切换到kibana/config目录,修改kibana配置文件

cd kibana/config
vim kibana.yml
# 需要修改的配置项
#kibana服务端口
server.port: 5601
# 内网ip
server.host: "172.17.98.46"
# elasticsearch访问url
elasticsearch.hosts: ["http://localhost:9200"]

我在安装的时候,报了以下错误。

Error registering Kibana Privileges with Elasticsearch for kibana-.kibana

爬了一些帖子,也没有找到头绪。只是让关闭kibana的xpack。如果有大佬也遇到这种情况,麻烦指导一下小睿。

kibana报错

# 继续在kibana.yml中,添加如下配置。
# 禁用X-Pack图形功能
xpack.graph.enabled: false
# 禁用X-Pack机器学习功能
xpack.ml.enabled: false
# 禁用X-Pack监视功能
xpack.monitoring.enabled: false
# 禁用X-Pack报告功能
xpack.reporting.enabled: false
# 禁用X-Pack安全功能
xpack.security.enabled: false
# 禁用X-Pack观察器功能
xpack.watcher.enabled: false

切换到kibana/bin目录,启动kibana(./kibana)。

看到控制台输出如下:

输出

因为我的Linux系统没有可视化界面,所以我使用Nginx将kibana服务转发到80端口。就可以使用浏览器访问http://外网ip,达到访问kibana Web界面的需求了。

kibana界面

kibana界面

四、LogStash环境安装

同样使用wget下载logstash,然后解压logstash。

Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。

Logstash

下载预先准备的测试数据集。(公众号内回复movies.csv)

将下载的movies.csv,放到logstash目录下的logstash-datas中,如果没有logstash-datas文件夹,我们可以新建后再放入。

然后将操作数据的脚本logstash.conf下载后(公众号内回复logstash.conf),放到config目录中。

操作数据集

因为每台机器的安装目录可能不一致,所以需要对脚本内容进行一些修改。

vim logstash.conf
input {
  file {
    # 数据集
    path => "/home/xiaowen/logstash-7.4.2/logstash-datas/movies.csv"
    start_position => "beginning"
    # 数据集导入日志存储地址
    sincedb_path => "/home/xiaowen/logstash-7.4.2/logstash-datas/db_path.log"
  }
  ...

执行脚本导入数据

./logstash -f ../config/logstash.conf

回车后,我们会看到屏幕哗哗哗的输出很多json数据集。如果数据集比较庞大,我们需要稍等一会。如果看到屏幕不再输出字符了,我们使用ctrl+c结束脚本。

控制台输出

然后打开Kibana控制面板,进入Management。

Management

这里就可以看到我们导入的数据集。

导入的数据集

Responses