什么是日志
提到日志,不少人的第一印象就是系统打到本地的Log文件,出问题的时候看一下这个Log文件,用来排查问题。更进一步能够根据这个Log文件作实时的监控、第三方审计、入侵检测、行为分析、数据大盘制做等等。mysql
马老师说过:阿里巴巴不是零售,咱们是一家数据公司,为了数据才作电商、作物流、卖东西。咱们认为日志是记录世间人和物全部行为的一种方式,是数据中极其重要又极其庞大的一个组成部分。会产生日志的设备有:服务器、交换机、手机、传感器、IOT设备、智能设备...产生的日志类型有:网络的七层日志、OS日志、订单日志、支持日志、GPS定位日志、用户点击日志...产生的日志形式有:文本文件、二进制文件、syslog、udp日志...如何充分利用这些日志资源才是咱们的核心技术和竞争力。sql
数据的价值是什么?数据的价值在于把数据变成行动。这里一个很是重要的过程是数据分析。提到数据分析,大部分人首先想到的都是Hadoop、流计算、机器学习等数据加工的方式。若是从整个过程来看,数据分析其实包含了4个过程:采集,存储,计算和理解四个主要步骤:docker
数据的采集是一门很大的范畴,从实时性上和每次传输数据规模上分,通常能够分为3类:服务器
线下导数据:例如邮寄硬盘、AWS Snowmobile 卡车、阿里云的闪电立方等
从数据的价值以及体量上而言,实时数据采集毫无疑问最重要的,而其中最大的部分就是日志实时采集。
为什么使用Agent
实现日志的实时采集通常有2种方式:网络
下面咱们来详细剖析一下两者区别:app
从以上分析来看,两种采集方式各有优缺点、也有各自适应的场景:负载均衡
直采:适用于对性能/资源要求较高的场景,例如IOT/智能设备等对于资源要求极高,没有额外的资源独立部署采集Agent;例如负载均衡设备、CDN节点等日志产生量极高(每秒数百MB或者数GB的日志),只有直接上传方能知足性能要求
Agent采集:只要应用能够将日志输出(以文件形式保存到磁盘、syslog等)或者支持通用的接口拉取,Agent便可将日志采集到。大部分场景下松耦合、可扩展性、可维护性相比Agent额外开销更具优点
为什么选用Logtail
日志采集Agent有不少,例如Logstash、Fluentd、Beats系列(FileBeats、MetricBeats、Packetbeat、Winlogbeat、Auditbeat、Heartbeat)、Nxlog、Telegraf、Heka、Nifi、Logspout、Datadog agent、Sematext agent、Splunk addon系列、Sumologic collector。。。框架
业界有那么多的Agent,每一个Agent各类各样的功能和特性看起来让人眼花缭乱。但围绕日志采集这个最原始的需求展开,无非也就是功能、性能、稳定性、运维代价这4个方面:运维
功能:做为选择Agent最基本需求,主要分为输入源、数据处理(除日志解析外,还包括过滤、压缩等)、数据输出。
性能:不一样类型Agent之间会有数十倍的性能差距。当日志产生速率较低且资源充足时,此项能够忽略;但大部分状况下采集Agent是做为整个集群的基础软件,在集群规模庞大的状况下,即便每台机器节省1%的CPU、10MB的内存也是很大一笔资金节省。
稳定性:稳定的重要性无需多言,除保证自身运行的稳定外,Agent还需保证不能超出限定的资源使用Quota,以避免对应用产生影响。
运维代价:日志采集的运维主要包括:Agent部署、动态伸缩、配置管理、Agent升级、Agent异常监控。当只有数台主机时,Agent可使用人肉的方式进行管理,但当集群规模扩大到数百及以上时,运维必须依赖有效的机制。
阿里云日志服务也有本身的采集Agent--Logtail。目前logtail已承载阿里云全站、全部云产品服务、全球各Region部署、阿里巴巴集团(淘宝、天猫、菜鸟等)上重要服务的数据采集。天天采集接近百万服务器上数PB的实时数据,对接数千个应用与消费者。之因此使用Logtail做为采集Agent也是通过上述四个方面的综合考虑。因为采集Agent数量众多,这里咱们选择目前最主流的3款Agent进行对比:机器学习
相对主流的采集Agent,Logtail在采集功能上有必定的不足,对于输入源、处理方式等支持没有开源软件的多,但从目前的功能来看,能够知足95%以上的日志采集需求。但日志采集并非可以采集到就能够。相对开源软件,Logtail的优点是有集团百万服务器、上万应用的练兵环境,不少问题纯粹从Agent和开源社区的角度并不会考虑到。所以经历了数年的迭代优化,在性能、稳定性、运维代价上,Logtail相对更加成熟,在性价比上具备绝对的优点。
详情请阅读原文