以前也介绍过 开源组件ELK日志系统配置与管理今天也聊一聊 ELK + Filebeat 搭建日志系统json
分布式搜索和分析引擎。具备高可伸缩、高可靠和易管理等特色。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操做。ruby
日志收集器。搜集各类数据源,并对数据进行过滤、分析、格式化等操做,而后存储到 Elasticsearch。服务器
数据分析和可视化平台。与 Elasticsearch 配合使用,对其中数据进行搜索、分析、图表展现。网络
一个轻量级开源日志文件数据搜集器,Filebeat 读取文件内容,发送到 Logstash 进行解析后进入 Elasticsearch,或直接发送到 Elasticsearch 进行集中式存储和分析。架构
基于ELK的使用方式,Logstash 做为日志搜集器,Elasticsearch 进行日志存储,Kibana做为日志呈现,大体如下几种架构。elasticsearch
图中 Logstash 多个的缘由是考虑到程序是分布式架构的状况,每台机器都须要部署一个 Logstash,若是确实是单服务器的状况部署一个 Logstash 便可。分布式
前面提到 Logstash 会对数据进行分析、过滤、格式化等操做,这一系列操做对服务器的 CPU 和内存资源的消耗都是比较高的,因此这种架构会影响每台服务器的性能,因此并不推荐采用。性能
相比于架构一,增长了一个MQ 和 Logstash, Logstash 的输出和输入支持 Kafka、Redis、RabbitMQ 等常见消息队列, MQ 前的 Logstash 只做为日志收集和传输,并不解析和过滤,先将日志加入队列,由 MQ 后面的 Logstash 继续解析和过滤,这样就不至于每台服务器消耗资源都不少。spa
这种架构是基于架构二简化来的,实际在使用过程当中也是能够采起的,日志直接进入 MQ,Logstash 消费 MQ 数据便可。操作系统
这种架构在日志数据源和 Logstash(或 Elasticsearch) 中增长了 Beats 。Beats 集合了多种单一用途数据采集器,每款采集器都是以用于转发数据的通用库 libbeat 为基石,beat 所占的系统CPU和内存几乎能够忽略不计,libbeat平台还提供了检测机制,当下游服务器负载高或网络拥堵时,会自动下降发生速率。下面的例子咱们使用 Filebeat 来对文件日志的收集,其余的 beat 能够忽略。
架构四相比于架构二,若是将每台服务器上部署的 Logstash 都换成对应的 Beats ,那就是更理想的架构了。
无论怎么样,对于日志解析和过滤的 Logstash 资源消耗仍是比较高的,因此若是须要,能够将 Logstash 的部署使用分布式,Elasticsearch 的部署使用集群来强化整个日志系统。
部署以前须要安装好JDK,Java 8 版本。而后官方下载对应操做系统的安装包,若是采用Docker部署,直接使用提供的镜像便可。
下载包解压后就能够直接启动了。
bin/logstash -f logstash.conf # logstash.conf是须要本身建立的日志处理配置文件
配置文件的基本格式以下:
# 输入 input { } # 分析、过滤 filter { } # 输出 output { }
bin/elasticsearch
启动的时候若是出现不容许root启动,那建立一个新用户:
groupadd elsearch
useradd elsearch -g elsearch -p elsearch
chown -R elsearch:elsearch elasticsearch
Kibana
bin/kibana
Filebeat
filebeat -e -c filebeat.yml
filebeat.yml 关键配置,全部/var/log/的.log文件的日志都会输出到 Logstash 的 5044 端口
filebeat.prospectors: - input_type: log paths: - /var/log/*.log output.logstash: hosts: ["localhost:5044"]
Logstash 例子:
配置文件内容:
input { beats { port => 5044 codec => "json" } } filter{ if [logtype] { mutate { replace => { type => "%{logtype}" }} }else{ mutate { replace => { type => 'unknow' }} } date { match => [ "createTime" , "yyyy-MM-dd HH:mm:ss" ] } } output { elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{type}-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }
配置文件说明:
使用 Filebeat 做为 Logstash 的输入(输入输出能够有多种方式,不太了解的能够先写看看官方文档),Logstash 监听了 5044 端口。这个例子中对接收到的日志进行 json 格式化,若是 json 中包含 logtype,咱们把日志的 type 设置成 logtype,若是不包含,设置成 unknow,而后把日志中的 createTime 格式化成 yyyy-MM-dd HH:mm:ss 的时间格式。最后输出到 elasticsearch,index 是 elasticsearch 的索引名称,咱们根据不一样的 type 建立不一样的索引。
生产环境下 Kibana 使用效果图
出处: http://beckjin.com/2017/12/10...