无侵入日志采集中心的设计与实现

项目简介

项目上线后,我们经常需要关注线上日志,如关注下当前访问量,哪些服务经常被访问,哪些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上定义完成。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180514G1T55200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区