目录
1、Elasticsearch + Logstash + Kibana
2、Elasticsearch + Logstash + Filebeat + Kibana
3、Elasticsearch + Logstash + Filebeat + Kibana + Redis
4、Elasticsearch + Fluentd + Filebeat + Kibana
一、ELK/EFK简介
1.1 什么是ELK/EFK?
ELK 是三个开源软件的缩写,分别表示: Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat ,它是一个轻量级的日志收集处理工具 (Agent) , Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给Logstash ,官方也推荐此工具。Elasticsearch 是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s 架构, client 端安装在需要收集日志的主机上, server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch 上去。Kibana 也是一个开源和免费的工具, Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。从 ELK 到 EFK:由于logstash 内存占用较大,灵活性相对没那么好, ELK 正在被 EFK 逐步替代 . 其中本文所讲的 EFK 是Elasticsearch+Fluentd+Kafka。Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch 、 Fluentd 和 Kibana ( EFK )技术栈,也是官方现在比较推荐的一种方案。Fluentd是一个收集日志文件的开源软件,目前提供数百个插件可用于存储大数据用于日志搜索,数据分析和存储。Fluentd 适用于以下场景。收集多台服务器的访问日志进行可视化在AWS 等云端使用 AutoScaling 时把日志文件收集至 S3( 需要安装插件 )收集客户端的信息并输出至Message Queue ,供其他应用处理
1.2 常见架构
1、Elasticsearch + Logstash + Kibana
2、Elasticsearch + Logstash + Filebeat + Kibana
3、Elasticsearch + Logstash + Filebeat + Kibana + Redis
这种架构,通过增加中间件来避免日志丢失。
4、Elasticsearch + Fluentd + Filebeat + Kibana
1.3 基本流程
下面以第三种架构为例,基本流程如下:
1 、 Logstash-Shipper 获取日志信息发送到 redis 。2 、 Redis 在此处的作用是防止 ElasticSearch 服务异常导致丢失日志,提供消息队列的作用。3 、 logstash 是读取 Redis 中的日志信息发送给 ElasticSearch 。4 、 ElasticSearch 提供日志存储和检索。5 、 Kibana 是 ElasticSearch 可视化界面插件。
二、ELK部署
2.1 环境准备
主机名 | IP地址 | 角色 |
elk-node01 | 192.168.186.161 | es01,redis01 |
elk-node02 | 192.168.186.162 | es02,redis02(vip:192.168.186.100) |
elk-node03 | 192.168.186.163 | es03,kibana,nginx |
1、设置主机名和hosts解析
[root@elk-node01 ~]# cat >> /etc/hosts << EOF
192.168.186.161 elk-node01
192.168.186.162 elk-node02
192.168.186.163 elk-node03
EOF
cat >> /etc/hosts << EOF
192.168.186.161 elk-node01
192.168.186.162 elk-node02
192.168.186.163 elk-node03
EOF
[root@elk-node01 ~]# tail -3 /etc/hosts
192.168.186.161 elk-node01
192.168.186.162 elk-node02
192.168.186.163 elk-node03
2、时间同步
3、部署jdk
三台机器都部署jdk,建议内存3G以上
[root@elk-node01 ~]# rpm -ivh jdk-8u261-linux-x64.rpm
[root@elk-node01 ~]# java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
2.2 部署ElasticSearch集群环境
2.2.1 安装Elasticsearch
三台机器都部署
使用清华镜像源,本文安装7.2.0
# vim /etc/yum.repos.d/elk.repo
[elk]
name=elk 7.x
baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/
gpgcheck=0
安装:# yum install -y elasticsearch-7.2.0
2.2.2 配置Elasticsearch集群
elk-node01节点的配置
root@elk-node01 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-node01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.186.161
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
安装**head插件**,在5.0版本之后不支持直接把插件包放入es安装目录的plugin目录下,需要单独安装。
1>安装环境支持,需要安装nodejs
[root@elk-node01 ~]# yum install -y nodejs npm
2>下载head插件
[root@elk-node01 elasticsearch]# cd /var/lib/elasticsearch/
[root@elk-node01 elasticsearch]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
3>安装依赖包
[root@elk-node01 elasticsearch]# yum install openssl bzip2 unzip -y
下载运行head必要的文件(放置在文件夹/tmp下)
[root@elk-node01 elasticsearch]# cd /tmp
[root@elk-node01 tmp]# wget https://npm.taobao.org/mirrors/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
用以下命令把下载到的包添加到npm cache目录中
\# npm cache add phantomjs
执行npm install,它便会使用本地缓存的xxx.tgz,而跳过下载过程。
npm安装卡时可以打开info level的log,命令如下
#npm config set loglevel info
解压master.zip
\# unzip master.zip
开始安装依赖:
[root@elk-node01 elasticsearch]# cd elasticsearch-head-master/
\# npm install
\# 直接使用npm安装时间久,依赖网络,替换为淘宝的cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
\# 安装依赖
cnpm install
在该文件中添加如下,务必注意不要漏了添加“,”号,这边的hostname:’*’,表示允许所有IP可以访问
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '*'
}
修改elasticsearch-head默认连接地址,将localhost改为本机IP

# vim _site/app.jsthis.base_uri = this.config.base_uri || this.prefs.get( "app-base_uri" ) ||"http://192.168.186.161:9200" ;
5>修改elasticSearch配置文件并启动ElasticSearch
[root@elk-node01 elasticsearch]# vim elasticsearch.yml

重启:
[root@elk-node01 elasticsearch]# systemctl restart elasticsearch
启动插件:# cd /var/lib/elasticsearch/elasticsearch-head-master/# nohup ./node_modules/grunt/bin/grunt server &
访问IP:9100就能看到我们集群信息
安装Bigdesk插件
1>下载
# cd /var/lib/elasticsearch/# yum install git -y# git clone https://github.com/hlstudio/bigdesk
2>启动web服务器,默认监听端口号8000,指定启动端口,并后台启动
# cd /var/lib/elasticsearch/bigdesk/_site# nohup python -m SimpleHTTPServer &此时通过访问 web 界面来监控我们的集群状态。http://IP:8000
安装cerebro插件
1>下载cerebro插件:
git 项目: https://github.com/lmenezes/cerebro/releases# wget https://github.com/lmenezes/cerebro/releases/download/v0.8.3/cerebro- 0.8.3.tgz
2>上传到安装目录、解压:
# tar xf cerebro-0.8.3.tgz -C /var/lib/elasticsearch
# ln -s /var/lib/elasticsearch/cerebro-0.8.3 /var/lib/elasticsearch/cerebro
3>启动cerebro
# cd /var/lib/elasticsearch/cereb