项目简介
项目上线后,我们经常需要关注线上日志,如关注下当前访问量,哪些服务经常被访问,哪些IP比较可疑,可能是爬虫或恶意访问,哪些地区访问人较多,哪些服务访问较慢等,无侵入的日志采集目前市面上解决方法比较多,本文使用logstash,使用filebeatagent收集日志,一个好的日志采集方案应满足:
轻量级:agent应该尽可能不占用服务器内存和CPU资源,如本文的filebeat只占用10M内存;
无侵入:agent的日志采集对程序是无侵入的,如filebeat可指定收集某个目录下的日志文件,它可以是log4xx生成的,或应用本身自带的log目录下收集,如nginx的access.log和error.log等;
流量控制:可有效控制流量,阻止大量垃圾无用日志发往日志中心,这个可以通过对外提供服务的日志中心nginx来限流;
可扩展性:agent的日志收集定义应该是足够灵活的,如filebeat可通过定义input,filter
一对多:通过agent采集过来的日志在服务端中可发往多个分析中心进行日志分析处理,一般接住MQ,如本文通过kafka;
最终的日志采集中心架构图如下:
FileBeat:监控应用的日志文件,收集日志
Logstash for filebeat:接收filebeat的发送过来的日志,并发送到Kafka MQ
Kafka:是一个高性能MQ,用来缓存日志信息,减少后端Logstash的压力
Logstash for MQ: 从Kafka MQ消费日志消息,并解析日志成结构化数据,并把数据发送到ElasticSearch集群
ElasticSearch集群:出来存储日志信息,并提供计算能力
ElasticSearch中的数据市面上有很多展现工具,这里使用kibana
支撑中间件
elasticsearch cluster
elasticsearch-head
kibana
zk cluster
kafaka
logstash-filebeat-receiver
logstash-kafaka-consummer
日志采集
FileBeat介绍
Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。
FileBeat优势
FileBeat出现之前,使用Logstash来收集日志的。那为什么要使用filebeat呢?因为logstash是jvm跑的,资源消耗比较大,启动一个logstash就需要消耗500M左右的内存,而filebeat只需要10来M内存资源。
安装部署
下载filebeat
访问 https://www.elastic.co/downloads/beats/filebeat
选择适合自己需求的版本
这里以filebeat-6.1.1-x86_64.rpm为例
安装
编辑配置文件
定义日志文件的路径
监控 目录下的日志文件。
这里需要注意这个配置项。
:表示忽略多少时间之前的日志
如果设置10h,表示忽略10个小时之前的日志。这样会让加载过多日志而占用内存太大,造成启动失败。
设置日志来源
这样设置的话,filebeat会为每条日志增加一个log_source字段,字段的值是inner-commission。
通过这样的方式,可以区分不同应用的日志。
设置日志输出目的地(logstash)
output.logstash:
设置证书为了加密
启动filebeat
至此,收集过来的日志,会发送到一个logstash(logstash-filebeat-receiver)
日志展现
以采集nginx日志为例,按我们定义的nginx logformat采集日志,并将log结构化后存入es,并利用kibana做数据报表和展现,如下图:
日志明细
日志TOPN
区域分析
响应时间
以上报表都可以在kibana上定义完成。
领取专属 10元无门槛券
私享最新 技术干货