目录

一、什么是Elk?

ELK分别代表:

Elasticsearch:负责日志检索和存储

Logstash:负责日志的收集分析,处理

Kibana:负责日志的可视化

Filebeat隶属于Beats。

二、Elk可以做什么?

三、ELK架构:

架构一:Elasticsearch + Logstash + Kibana

架构二:Elasticsearch + Logstash + Filebeat + Kibana

架构三:Elasticsearch + Logstash + Filebeat + Kibana + Redis

架构四:Elasticsearch + Fluentd + Filebeat + Kibana

四、Elk的部署之部署ElasticSearch集群环境

(1)ELK安装jdk

(2)部署ElasticSearch集群环境

(3)配置ElasticSearch集群:

(4)安装head插件:

  (5)  安装Bigdesk插件

(6)安装cerebro插件

(7)配置开机自启动

(8)安装:node02和node03节点上elasticsearch的配置  

(9)检查Elasticsearch集群


一、什么是Elk?

ELK是一整套解决方案,是三个软件产品的首字母缩写。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

ELK分别代表:

Elasticsearch:负责日志检索和存储

特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash:负责日志的收集分析,处理

一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

Kibana:负责日志的可视化

Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat隶属于Beats。

目前Beats包含四种工具:

  1. Packetbeat(搜集网络流量数据)
  2. Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
  3. Filebeat(搜集文件数据)
  4. Winlogbeat(搜集 Windows 事件日志数据)

二、Elk可以做什么?

ELK组件在海量日志系统的运维中,可用于解决:

                                                     1,分布式日志数据集中式查询和管理

                                                     2,系统监控,包含系统硬件和应用各个组件的监控

                                                     3,故障排查

                                                     4,安全信息和事件管理

ELK主要解决:开发人员不能登录线上服务器查看详细日志、各个系统虽都有日志,但日志数据分散难以查找、日志数据量大,查询速度慢,或者数据不够实时等问题。

三、ELK架构:

架构一:Elasticsearch + Logstash + Kibana

通过 logstash 收集日志, elasticsearch 分析日志,然后再 kibana 中展示。


ELK集群搭建和使用 elk集群架构_elasticsearch

架构二:Elasticsearch + Logstash + Filebeat + Kibana


      增加了 filebeat 模块,它是一个轻量级的日志收集处理工具 (Agent) ,部署在客户

端, Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash ,生产中使用较多,但缺 点是logstash 出现故障,会造成日志丢失。



Logstash ---------   
  Elasticsearch  -------  Kibana



架构三:Elasticsearch + Logstash + Filebeat + Kibana + Redis

这种架构,通过增加中间件来避免日志丢失。


redis 
 
 
 

                                      || 
 
 
 
Logstash ---------   
  Elasticsearch  -------  Kibana
 
 
                                   ||    
 
 
                                kafka

基本流程如下:



1 、 Logstash-Shipper 获取日志信息发送到 redis 。



2 、 Redis 在此处的作用是防止 ElasticSearch 服务异常导致丢失日志,提供消息队列的作用



3 、 logstash 是读取 Redis 中的日志信息发送给 ElasticSearch 。



4 、 ElasticSearch 提供日志存储和检索。



5 、 Kibana 是 ElasticSearch 可视化界面插件。





架构四:Elasticsearch + Fluentd + Filebeat + Kibana


   这种使用了 fluentd 代替了 logstash 。当然,我们也可以使用 Fluentd 的插件( fluent-plugin

elasticsearch )直接将日志发送给 Elasticsearch ,可以根据自己的需要替换掉 Filebeat ,从而形成 Fluentd => ElasticSearch => Kibana 的架构,也称作 EFK 。






ELK集群搭建和使用 elk集群架构_Elastic_02


 

四、Elk的部署之部署ElasticSearch集群环境

至少需要三台机器,IP1:192.168.150.15,ip2:192.168.150.16 , ip3:192.168.150.17 ; 内存均在3G之上。

 准备工作:

三台虚拟机均在hosts文件中添加IP地址:

# vim + /etc/hosts
 192.168.150.15 elk-node01
 192.168.150.16 elk-node02
 192.168.150.17 elk-node03

(1)ELK安装jdk

包名:jdk-8u144-linux-x64.rpm 

node01:   xftp上传jdk-8u144-linux-x64.rpm软件包
 查看:#ls 
拷贝到其他两台虚机中:

#scp jdk-8u144-linux-x64.rpm elk-node02:~
 yes
 输入密码
 #scp jdk-8u144-linux-x64.rpm elk-node03:~
 yes
 输入密码

三台虚拟机均要安装:  #yum install jdk-8u144-linux-x64.rpm

安装完毕后检查: # java -version

(2)部署ElasticSearch集群环境

安装elasticsearch-7.2.0-x86_64.rpm

拷贝到其他两台虚机中:

#scp elasticsearch-7.2.0-x86_64.rpm elk-node02:~
 输入密码
 #scp elasticsearch-7.2.0-x86_64.rpm elk-node03:~

输入密码

三台虚拟机均要安装elasticsearch包: # yum install elasticsearch-7.2.0-x86_64.rpm

注意:此时不启动服务

(3)配置ElasticSearch集群:

从node01开始备份:
#cd /etc/elasticsearch/
#ls
#cp elasticsearch.yml{,.bak}
更改配置:

#vim elasticsearch.yml
cluster.name: my-elk //集群的节点
 node.name: elk-node01  // 集群的名字
 path.data: /var/lib/elasticsearch  //集群的存放路径
 path.logs: /var/log/elasticsearch //日志存放路径
 network.host: 192.168.150.15 //网络,写自己的IP地址
 http.port: 9200 //监听的端口
 discovery.seed_hosts:["elk-node01", "elk-node02", "elk-node03"] //集群
 cluster.initial_master_nodes: ["elk-node01"]  
 # 主节点相关配置,加在配置末尾。
 node.master: true
 node.data: false
 node.ingest: false
 node.ml: false
 cluster.remote.connect: false

(4)安装head插件:

在5.0版本之后不支持直接把插件包放入es安装目录的plugin目录下,需要单独安装。

1>安装环境支持,需要安装nodejs

 # yum install -y nodejs npm
注意此处下载不成功则需要配置扩展源。
扩展源:
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
配置完扩展源后,再次下载:
# yum install -y nodejs npm

2>下载head插件

 # cd /var/lib/elasticsearch/
此处直接将master.zip压缩包拖进。

3>安装依赖包

1.#yum install openssl bzip2 unzip -y
2.下载运行head必要的文件(放置在文件夹/tmp下):
# cd /tmp
此处直接将phantomjs-2.1.1-linux-x86_64.tar.bz2包拖进。
3.用以下命令把下载到的包添加到npm cache目录中:
# npm cache add phantomjs
4.# cd /var/lib/elasticsearch/
5.解压master.zip:
# unzip master.zip
6.开始安装依赖:
[root@elk-node01 elasticsearch]# cd elasticsearch-head-master/
7.# npm install  //此时临时下载的包都会放在tmp下。

注意:此处会有报错,提示缺少2.2.16的包,不做处理,忽略。

4>修改配置文件 修改Gruntfile.js

#vim  Gruntfile.js
在该文件中添加如下,务必注意不要漏了添加“,”号,这边的hostname:’*’,表示允许所有IP可以访问

options: {
 port: 9100,
 base: '.',
 keepalive: true,
 hostname: '*'
 }

5> 修改elasticsearch-head默认连接地址,将localhost改为本机IP  

# vim _site/app.js
 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") ||
 "http://192.168.150.15:9200";

6>修改elasticsearch的配置文件elasticsearch.yml,以允许跨域访问,在文末追加如下代码即可。

#vim /etc/elasticsearch/elasticsearch.yml
 http.cors.enabled: true
 http.cors.allow-origin: "*"

 7> 重启elasticsearch.service

#systemctl enable --now elasticsearch.service

8>启动插件

#cd /var/lib/elasticsearchelasticsearch-head-master/
 # nohup ./node_modules/grunt/bin/grunt server &

日志信息:
#tail -f nohup.out

浏览器访问192.168.150.15:9100就能看到我们集群信息  

ELK集群搭建和使用 elk集群架构_Elastic_03

 (5)  安装Bigdesk插件

1>下载bigdesk-master.zip

上传bigdesk-master.zip并解压
1.进入到绝对路径

# cd /var/lib/elasticsearch/bigdesk-master/_site/

2.用python启动web服务

# nohup python -m SimpleHTTPServer &

此时通过访问web界面来监控我们的集群状态。
http://IP:8000

(6)安装cerebro插件

1>下载cerebro-0.8.3.tgz

1.将cerebro-0.8.3.tgz包拖进去解压
2.解压:# tar xf cerebro-0.8.3.tgz -C /var/lib/elasticsearch
3.#ln -sv cerebro-0.8.3 cerebro

2>启动

# cd /var/lib/elasticsearch/cerebro
 # nohup ./bin/cerebro &

3>浏览器访问IP:9000 就能看到数据分片信息。

(7)配置开机自启动

# vim /etc/rc.d/rc.local 添加以下内容:
 cd /var/lib/elasticsearch/elasticsearch-head-master/ && /usr/bin/nohup
 ./node_modules/grunt/bin/grunt server &
 cd /var/lib/elasticsearch/bigdesk/_site && /usr/bin/nohup python -m
 SimpleHTTPServer &
 cd /var/lib/elasticsearch/cerebro && /usr/bin/nohup ./bin/cerebro &
 chmod +x /etc/rc.d/rc.loca#scp /etc/elasticsearch/elasticsearch.yml elk-node02:/etcelasticsearch/
#scp /etc/elasticsearch/elasticsearch.yml elk-node03:/etcelasticsearch/
最后重启:
 #systemctl restart elasticsearch.service
 #systemctl enable elasticsearch.service

(8)安装:node02和node03节点上elasticsearch的配置  

 node02:

#vim /etc/elasticsearch/elasticsearch.yml
更改如下:
节点名字:elk-node02
网络IP:192.168.150.16
node.master: false
node.data: true

最后重启:
#systemctl restart elasticsearch.service
#systemctl enable elasticsearch.service

 node03:

#vim /etc/elasticsearch/elasticsearch.yml
更改如下:
节点名字:elk-node03
网络IP:192.168.150.17
node.master: ture
node.data: false

最后重启:
#systemctl restart elasticsearch.service
#systemctl enable elasticsearch.service

(9)检查Elasticsearch集群

1>查看集群状态(任意节点执行)

[root@elk-node01 ~]# curl -XGET '192.168.150.15:9200/_cluster/health?pretty'

ELK集群搭建和使用 elk集群架构_搜索引擎_04