Elastic Stack(01)--Elasticsearch安装

Elastic Stack 简介

如果你没有听说过Elastic Stack,那你一定听说过ELK,实际上ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所以就形成了Elastic Stack。所以说,ELK是旧的称呼,Elastic Stack是新的名字。

  • Beats 采集一切数据
    • Filebeat 日志文件
    • Metricbeat 服务指标
    • Winlogbeat Win事件日志
    • Packetbeat 网络流量
    • 健康检查
  • elasticsearch 核心存储和检索引擎。
    • 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • logstash 高吞吐量数据处理引擎
    • 基于java,是一个开源的用于收集,分析和存储日志的工具。
  • kibana 数据可视化
    • 基于nodejs,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的Web 界面,可以汇总、分析和搜索重要数据日志。

Beats是elastic公司开源的一款采集系统监控数据的代理agent,是在被监控服务器上以客户端形式运行的数据收集器的统称,可以直接把数据发送给Elasticsearch或者通过Logstash发送给Elasticsearch,然后进行后续的数据分析活动。Beats由如下组成:

  • Packetbeat:是一个网络数据包分析器,用于监控、收集网络流量信息,Packetbeat嗅探服务器之间的流量,解析应用层协议,并关联到消息的处理,其支 持ICMP (v4 and v6)、DNS、HTTP、Mysql、PostgreSQL、Redis、MongoDB、Memcache等协议;
  • Filebeat:用于监控、收集服务器日志文件,其已取代 logstash forwarder;
  • Metricbeat:可定期获取外部系统的监控指标信息,其可以监控、收集 Apache、HAProxy、MongoDB MySQL、Nginx、PostgreSQL、Redis、System、Zookeeper等服务;
  • Winlogbeat:用于监控、手机Windows系统的日志信息

Beats和Logstash其实都可以进行数据的采集,但是目前主流的是使用Beats进行数据采集,然后使用 Logstash进行数据的分割处理等,早期没有Beats的时候,使用的就是Logstash进行数据的采集。

Elasticsearch 安装

centos7

云主机先打开9200端口 68端口

单机版安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 添加新用户
useradd elsearch
# 创建一个目录,存放下载的软件
mkdir /itcast
cd /itcast
mkdir es # 将软件安装到这个目录

chown elsearch:elsearch /itcast/ -R
# 进入,然后通过xftp工具,将刚刚下载的文件拖动到该目录下
cd /soft

# 解压缩
tar -zxvf elasticsearch-7.15.0-linux-x86_64.tar.gz -C es

vi config/elasticsearch.yml
network.host: 192.168.0.1 #0.0.0.0

#在Elasticsearch中如果,network.host不是localhost或者127.0.0.1的话,就会认为是生产环境,会对环境的要求比较高,我们的测试环境不一定能够满足,一般情况下需要修改2处配置,如下:
vi config/jvm.options
-Xms256m # 内存128M,根据机器修改
-Xmx256m

vi /etc/sysctl.conf # root用户操作
vm.max_map_count=655360
sysctl -p # root用户下,使生效

su - elsearch # 切换用户
cd bin
./elasticsearch 或 ./elasticsearch -d #后台系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 报错一:
bootstrap check failure [1] of [2]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
## 解决方法
vi /etc/security/limits.conf # root用户修改,且用户退出后重新登录生效
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 65535
# 报错二:
bootstrap check failure [2] of [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /itcast/es/elasticsearch-7.15.0/logs/elasticsearch.log
## 解决方法
vi config/elasticsearch.yml # 取消注释,并保留一个节点
node.name: node-1
cluster.initial_master_nodes: ["node-1]

更多错误参见:

https://gitee.com/moxi159753/LearningNotes/tree/master/ElasticStack/1_ElasticSearch%E4%BB%8B%E7%BB%8D%E4%B8%8E%E5%AE%89%E8%A3%85

成功安装后访问如下地址,如图所示:

elsearchinstalled

ElasticSearchHead可视化工具

由于ES官方没有给ES提供可视化管理工具,仅仅是提供了后台的服务,elasticsearch-head是一个为ES开发的一个页面客户端工具,其源码托管于Github,地址为 传送门

head提供了以下安装方式

  • 源码安装,通过npm run start启动(不推荐)
  • 通过docker安装(推荐)
  • 通过chrome插件安装(推荐, 需翻墙)
  • 通过ES的plugin方式安装(不推荐)

Dcoker方式安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 在另外一台安装docker的云主机部署的,随意哪里都行
#拉取镜像
docker pull mobz/elasticsearch-head:5
#创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

docker network create --subnet=10.0.30.0/24 --opt com.docker.network.driver.mtu=1450 docker-gsz

docker create --name elasticsearch-head --net docker-gsz --ip 10.0.30.11 -p 9100:9100 mobz/elasticsearch-head:5
#启动容器
docker start elasticsearch-head

## 注意: 由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置,如下:

vim elasticsearch.yml

http.cors.enabled: true http.cors.allow-origin: "*"

成功安装并连接如下图所示:

elasticsearchhead

通过Chrome插件安装

打开chrome的应用商店,即可安装(该方法不需要修改配置文件)

https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm

报错问题解决

1. 使用 Elasticsearch Head 查看“数据浏览”时,右侧不出数据,使用浏览器F12查看后,发现 406 Not Acceptable 错误

1
2
3
4
5
6
7
8
cd _site/
vi vendor.js ##修改两处

将 6886行 contentType: "application/x-www-form-urlencoded" 修改为 contentType: "application/json;charset=UTF-8"
然后再将 7574行 var inspectData = s.contentType === "application/x-www-form-urlencoded" && 修改为 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
## 具体步骤,由于容器中安装不了编辑器
sed -i 's#var inspectData = s.contentType === "application/x-www-form-urlencoded"#var inspectData = s.contentType === "application/json;charset=UTF-8"#' vendor.js
sed -i 's#contentType: "application/x-www-form-urlencoded"#contentType: "application/json;charset=UTF-8"#' vendor.js