Flume+ElasticSearch+Kibana实现分布式日志收集

前言

本人小白一枚,第一次分享,想把自己懂的一丢丢东西分享出来,希望可以帮到一些朋友。本人只做了一些浅显的研究,如发现有问题,欢迎指正~

背景

许多项目是需要分布式部署的,日志分布在不同服务器上,查看管理日志比较痛苦。当前已有几种成熟的方案可以实现分布式日志的收集,我们这里介绍Flume1.7.0+Es1.5.0+Kibana4.0.1(版本有点老,后续有时间会研究一下可兼容的最新版本)。

Flume的优缺点

优点

1.安装配置简单
2.兼容性好,可对接很多主流插件,还可组件自定义
3.目录级别的监控,可收集几乎所有类型的日志
4.支持拦截器,可以拆分数据、过滤数据、添加时间戳等操作
5.可靠性好,支持断点续传(1.7以上)

缺点

1.没有日志索引检索功能
2.没有可视化界面
3.没有日志分析功能
(Es+Kibana可以弥补以上缺陷)
4.没有日志定期删除功能

Flume简介

概述

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

核心组件

. event:event将传输的数据进行封装,是flume传输数据的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。

· source:source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括:
avro(级联 接收其他flume服务器的数据)
exec (执行语句)
spooling directory (监控一个目录,无法监控追加文件)
taildir (监控新增及追加文件 断点续传)
netcat (监控网络端口)
kafka (kafka的数据直接传输到 flume中)
http (监控一个地址 用于接收HTTP的Get和Post请求)
自定义 (修改源码实现自己的逻辑)

· channel:source组件把数据收集来以后,临时存放在channel中,即channel组件在agent中是专门用来存放临时数据的,包括:
Memory(event保存在Java Heap中)
Jdbc(event保存在关系数据中,一般不推荐使用)
File(保存在本地文件中,可靠性高,但吞吐量低于Memory)
Kafka(数据写到kafka中 此时可以不需要sink)

· sink:sink组件是用于把数据发送到目的地的组件,只有在sink将channel中的数据成功发送出去之后,channel才会将临时数据进行删除,这种机制保证了数据传输的可靠性与安全性。包括:
Hdfs(数据输出到hdfs)
Logger(数据保存到hdfs日志中)
Avro(级联 发送数据到其他的flume)
File_roll(数据保存到本地磁盘)
Hbase(数据保存到hbase)
自定义 (修改源码实现自己的逻辑)

ES简介

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;Elasticsearch通过简单的RESTful API对Lucene进行了封装,从而让全文搜索变得简单。

可以理解Elasticsearch为一种非关系型数据库,采用键值对的方式存储数据,有良好的性能以及扩展性

Kibana简介

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。 使用Kibana ,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard )实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

环境准备

3台虚拟机:

  • 日志生产服务器a:192.168.78.199
  • 日志生产服务器b:192.168.78.200
  • 日志汇总服务器c:192.168.78.198
    虚拟机安装JDK1.8并配置环境变量、关闭防火墙。

搭建步骤

安装Flume1.7.0

(1)http://archive.apache.org/dist/flume/1.7.0/ 下载压缩包apache-flume-1.7.0-bin.tar.gz
(2)上传至虚拟机199、200、198并解压tar -xvf apache-flume-1.7.0-bin.tar.gz
(3)日志生产服务器199、200上新增配置文件conf/es-flume-conf(实际使用的时候请删除配置后面的注释)

# 指定Agent的组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 指定Flume source(要监听的路径)
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /home/flume/taildir_position.json  #记录上一次采集到了文件的哪个位置的文件
a1.sources.r1.filegroups = f1  #定义文件组的名称
a1.sources.r1.filegroups.f1 = /home/flume/log/.*log.*  #定义对应的文件组监听的目录、文件
a1.sources.r1.batchSize= 100  #定义每批次采集多少数据, 必须<=事务容量大小
# 指定Flume sink
a1.sinks.k1.type = avro  #级联
a1.sinks.k1.hostname = 192.168.78.198  #汇总服务器IP
a1.sinks.k1.port = 4444  #汇总服务器flume的端口
# 指定Flume channel
a1.channels.c1.type = memory  #内存缓存,若需报保证可靠性可采用File持久化缓存
a1.channels.c1.capacity = 100000  #channel的容量大小
a1.channels.c1.transactionCapacity = 1000  #事务容量大小,必须<=capacity
# 绑定source和sink到channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

日志汇总服务器198上新增配置文件conf/es-flume-conf:

# 指定Agent的组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 指定Flume source(要监听的路径)
a1.sources.r1.type = avro  #级联
a1.sources.r1.bind = 192.168.78.198  #服务器自身IP
a1.sources.r1.port = 4444   #服务器flume端口
a1.sources.r1.interceptors = i2   #定义拦截器
a1.sources.r1.interceptors.i2.type = timestamp  #数据添加事件戳
# 指定Flume sink
a1.sinks.k1.type = org.apache.flume.sink.elasticsearch.ElasticSearchSink
a1.sinks.k1.hostNames = 192.168.78.198:9300    #es的jar之间tcp通讯的端口
a1.sinks.k1.clusterName = esCluster   #es定义的集群名称
a1.sinks.k1.batchSize = 100
a1.sinks.k1.indexName = newindex  #指定写入es的索引名称(数据库名)
a1.sinks.k1.indexType = cyw2  #指定写入es的type名称(表名)
a1.sinks.k1.serializer = org.apache.flume.sink.elasticsearch.ElasticSearchLogStashEventSerializer
# 指定Flume channel
a1.channels.c1.type = memory  #内存缓存,若需报保证可靠性可采用File持久化缓存
a1.channels.c1.capacity = 1000000  #channel的容量大小
a1.channels.c1.transactionCapacity = 1000  #事务容量大小,必须<=capacity
# 绑定source和sink到channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1 

安装ES1.5.0

(1)https://www.elastic.co/cn/downloads/past-releases#elasticsearch 下载压缩包elasticsearch-1.5.0.tar.gz
(2)上传至虚拟机198并解压
(3)拷贝lib下的jar包到flume/lib,重名jar不覆盖
(4)修改config/elasticsearch.yml(版本不一样,配置参数可能有差异,具体情况参考yml中的注释配置)

cluster.name: esCluster   #es集群名称,与es-flume-conf中的一样
node.name: esNode1   #es当前节点名称,与es-flume-conf中的一样
path.data: /home/e15/mydata   #数据保存路径
network.host: 192.168.78.198   #当前节点ip
http.port: 7000   #http外部通讯端口,默认9200
discovery.zen.ping.unicast.hosts: ["192.168.78.198"]   #discovery发现模块,定义es集群的所有ip

安装Kibana4.0.1

(1)https://www.elastic.co/cn/downloads/past-releases#kibana
下载压缩包kibana-4.0.1-linux-x64.tar.gz
(2)上传至虚拟机198并解压
(3)修改config/kibana.yml(除以下三个配置其他为默认)

port: 5601   #Kibana访问端口
host: "192.168.78.198"   #Kibana访问IP
elasticsearch_url: "http://192.168.78.198:7000"   #ES的http地址

联调

(1)创建并切换es用户

adduser es 
passwd es 
chown -R es /home/es15  #安装路径赋权
su es

(2)服务器198启动ES

bin/elasticsearch

(3)创建索引newindex-2021-01-26(“newindex”为flume配置文件绑定的索引名称,后跟当天时间)

(4)给索引创建type(cyw2)和fields(@timestamp、@message)

(5)插入测试数据


(6)查询数据


(7)服务器198启动Kibana

bin/kibana

(8)浏览器访问192.168.78.198:5601

  • 勾选以时间作为索引选项
  • 默认是每天都会自动创建索引,故间隔选择Daily
  • 输入通配索引名称:[newindex-]YYYY-MM-DD
  • 选择date格式的字段@timestamp
  • 点击创建

(9) 在discover中查看数据

(10)隐藏或添加要展示的fields


(11)关键字查询

(12)时间过滤查询

(13)设置自动刷新时间

(14)服务器198、199、200启动Flume

bin/flume-ng agent --conf conf --conf-file conf/es-flume-conf --name a1 -Dflume.root.logger=INFO,console

(15)服务器199、200分别在监控路径下插入数据


(16)Kibana上自动刷新出插入的数据

(17)断点续传测试
停掉flume进程

写入日志数据

查看kibana无该日志,重启flume agent后,查看kibana发现日志重新上传

FAQ

1.ES启动报错:bootstrap checks failed

原因:
Linux默认配置的参数过小
解决方法:
/etc/security/limits.conf添加

* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096

/etc/sysctl.conf添加

vm.max_map_count=262144

修改后重新登录

2.Flume启动报错:java.lang.NoClassDefFoundError

原因:
ES版本过高与Flume不匹配。ES2.*把ByteStream的路径修改了。
解决方法:
ES修改为1.*版本
升级Flume版本(待尝试)

3.Flume报错:org.elasticsearch.transport.ReceiveTimeoutTransportException

原因:
Flume配置的ES端口为ES的http对外端口
解决方法:
Flume的配置文件中配置ES的jar之间tcp通讯端口9300

4.ES命令执行报错:indexMissingException

原因:
命令的请求方式错误,比如PUT方法使用GET去访问
解决方法:
使用正确的请求方式

参考文档

分布式日志收集框架Flume
Flume常用Source与Sink类型及参数
flume+es+kibana日志系统
flume+ Elasticsearch +kibana环境搭建及讲解
日志收集组件flume和logstash对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值