EFK 搭建简单的日志分析系统

限于喜欢 提交于 2019-12-03 08:05:20

 

一、简单介绍

 

EFK 不是一个软件,而是一套解决方案。EFK 是三个开源软件的缩写,Elasticsearch,FileBeat,Kibana。其中 ELasticsearch 负责日志分析和存储,FileBeat 负责日志收集,Kibana 负责界面展示。它们之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前主流的一种日志分析系统解决方案。

 

EFK 和 ELK 只有一个区别, 收集日志的组件由 Logstash 替换成了 FileBeat,因为 Filebeat 相对于 Logstash 来说有2个好处:

侵入低,无需修改 elasticsearch 和 kibana 的配置;
性能高,IO 占用率比 logstash 小太多;

 

当然 Logstash 相比于 FileBeat 也有一定的优势,比如 Logstash 对于日志的格式化处理能力,FileBeat 只是将日志从日志文件中读取出来,当然如果收集的日志本身是有一定格式的,FileBeat 也可以格式化,但是相对于Logstash 来说,效果差很多。

 

Elasticsearch 是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。

 

Filebeat 隶属于 Beats。目前 Beats 包含六种工具:

Packetbeat(搜集网络流量数据)
Metricbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集 Windows 事件日志数据)
Auditbeat( 轻量型审计日志采集器)
Heartbeat(轻量级服务器健康采集器)

 

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

 

另外,EFK 系统下的各个组件都非常吃内存,后期根据业务需要,EFK 的架构可进行扩展,当 FileBeat 收集的日志越来越多时,为防止数据丢失,可引入 Redis,而 ElasticSearch 也可扩展为集群,并使用 Head 插件进行管理, 所以要保证服务器有充足的运行内存和磁盘空间。

ps:曾经试图在只有 1 个 G 内存空间的阿里云服务器上搭建 一个最简易的 EFK 日志分析系统,结果是 Kibana 服务开启之后,Elasticsearch 服务就挂了,最后纠结了半天服务也起不起来。

 


 

二、EFK 搭建

模拟在一台虚拟机上搭建一个简单的 EFK 系统来收集 nginx 日志;

 

1、环境准备

[root@elk ~]# ls -l
total 703784
-rw-r--r--. 1 root root 346763683 May  9 22:17 elasticsearch-7.0.1-linux-x86_64.tar.gz
-rw-r--r--. 1 root root  13372514 May  9 22:17 filebeat-7.0.1-linux-x86_64.tar.gz
-rw-r--r--. 1 root root 191817140 May  9 22:17 jdk-8u201-linux-x64.tar.gz
-rw-r--r--. 1 root root 167696220 May  9 22:17 kibana-7.0.1-linux-x86_64.tar.gz
-rw-r--r--. 1 root root   1015384 May  9 22:17 nginx-1.14.2.tar.gz

在 elasticsearch 官网下载 EFK 安装包,Elasticsearch、Kibana、FileBeat一定要使用相同的版本,目前最新版本为 7.0.1;

安装环境:centos 7.6,关闭防火墙,关闭 selinux;

 

2、nginx 部署

 [root@elk ~]# yum -y install glibc-devel gcc-c++ pcre-devel openssl openssl-devel
 [root@elk ~]# tar -zxvf nginx-1.14.2.tar.gz
 [root@elk ~]# cd nginx-1.14.2
 [root@elk nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
 [root@elk nginx-1.14.2]# make && make install
 [root@elk nginx-1.14.2]# cd /usr/local/nginx/sbin
 [root@elk sbin]# ./nginx 

 

3、部署 java 环境

Elasticsearch 的运行需要 java 环境;

 [root@elk ~]# tar -zxvf jdk-8u201-linux-x64.tar.gz  -C /usr/local

编辑 /etc/profile,修改环境变量:

 [root@elk ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_201
export JRE_HOME=/usr/local/jdk1.8.0_201/jre
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
[root@elk ~]# source /etc/profile
[root@elk ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

 

4、部署 elasticsearch

解压:

[root@elk ~]# tar -zxvf elasticsearch-7.0.1-linux-x86_64.tar.gz
[root@elk ~]# mv elasticsearch-7.0.1 /usr/local/elasticsearch

Elasticsearch 使用 root 用户启动会报错,创建一个普通用户来启动 Elasticsearch:

[root@elk ~]# useradd elastic

 修改 elasticsearch 目录的属主和属组:

[root@elk ~]# cd /usr/local
[root@elk local]# chown -R elastic.elastic elasticsearch

修改配置文件:

 [root@elk local]# vim elasticsearch/config/elasticsearch.yml
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

切换为普通用户,尝试启动:

[root@elk ~]# su - elastic
[elastic@elk ~]$ cd /usr/local/elasticsearch/bin
[elastic@elk bin]$ ./elasticsearch

截取部分日志,显示启动成功:

[2019-05-10T03:23:10,056][INFO ][o.e.n.Node               ] [node-1] starting ...
[2019-05-10T03:23:10,215][INFO ][o.e.t.TransportService   ] [node-1] publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
[2019-05-10T03:23:10,228][WARN ][o.e.b.BootstrapChecks    ] [node-1] max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2019-05-10T03:23:10,229][WARN ][o.e.b.BootstrapChecks    ] [node-1] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

 elasticserach部署的时候,经常遇到各种坑,上面日志 WARN 部分显示的警告信息,有时候会升级为 ERROR,然后服务就启不起来;

ERROR:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535];

解决办法:

[root@elk ~]# vim /etc/security/limits.conf 

# 在配置文件中添加如下参数:
* soft nofile 65535 
* hard nofile 65535

ERROR:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决办法:

[root@elk ~]# vim /etc/sysctl.conf

## 在配置文件中添加如下参数:
vm.max_map_count=262144

执行命令:

[root@elk ~]# sysctl -p
vm.max_map_count = 262144

 解决报错时,切换为 root 用户操作;

由于此次搭建日志显示的是警告信息,可暂时不管;

本地测试:

[root@elk ~]# curl '127.0.0.1:9200'
{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "sOyZYk07TnqkX_Bj1vOb1A",
  "version" : {
    "number" : "7.0.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "e4efcb5",
    "build_date" : "2019-04-29T12:56:03.145736Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.7.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 设置 elasticsearch 为后台启动,并指定 PID 文件 :

[elastic@elk bin]$ ./elasticsearch -p ./elasticsearch-pid -d

 

5、部署 kibana

解压:

[root@elk ~]# tar -zxvf kibana-7.0.1-linux-x86_64.tar.gz
[root@elk ~]# mv kibana-7.0.1-linux-x86_64 /usr/local/kibana

修改配置文件:

[root@elk ~]# cd /usr/local/kibana/
[root@elk kibana]# vim config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"

注: kibana.index,Kibana 在 Elasticsearch 中使用一个索引来存储保存的搜索、可视化效果和仪表盘。如果该索引不存在,Kibana会创建一个新的索引,默认 .kibana;

启动 kibana:

[root@elk kibana]# cd bin
[root@elk bin]# ./kibana

 后台启动:

[root@elk bin]# nohup ./kibana &

 

6、部署 filebeat

解压:

[root@elk ~]# tar -zxvf filebeat-7.0.1-linux-x86_64.tar.gz
[root@elk ~]# mv filebeat-7.0.1-linux-x86_64 /usr/local/filebeat

 编辑配置文件:

[root@elk ~]# cd /usr/local/filebeat
[root@elk filebeat]# vim filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/*.log

setup.kibana:
  host: "localhost:5601"

output.elasticsearch:
  hosts: ["localhost:9200"]

 后台启动 filebeat:

[root@elk filebeat]# nohup ./filebeat -c filebeat.yml &

 

 7、kibana页面配置

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!