一、简单介绍
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页面配置
来源:CSDN
作者:syztoo
链接:https://blog.csdn.net/weixin_42595012/article/details/90054021