Logtail从入门到精通(一):日志采集杂谈_weixin_34087307的博客-程序员秘密

技术标签: 运维  人工智能  嵌入式  

什么是日志

提到日志,很多人的第一印象就是系统打到本地的Log文件,出问题的时候看一下这个Log文件,用来排查问题。更进一步可以根据这个Log文件做实时的监控、第三方审计、入侵检测、行为分析、数据大盘制作等等。

image.png

马老师说过:阿里巴巴不是零售,我们是一家数据公司,为了数据才做电商、做物流、卖东西。我们认为日志是记录世间人和物所有行为的一种方式,是数据中极其重要又极其庞大的一个组成部分。会产生日志的设备有:服务器、交换机、手机、传感器、IOT设备、智能设备...产生的日志类型有:网络的七层日志、OS日志、订单日志、支持日志、GPS定位日志、用户点击日志...产生的日志形式有:文本文件、二进制文件、syslog、udp日志...如何充分利用这些日志资源才是我们的核心技术和竞争力。

什么是日志采集

数据的价值是什么?数据的价值在于把数据变成行动。这里一个非常重要的过程是数据分析。提到数据分析,大部分人首先想到的都是Hadoop、流计算、机器学习等数据加工的方式。如果从整个过程来看,数据分析其实包含了4个过程:采集,存储,计算和理解四个主要步骤:

image.png

  • 采集:从各种产生数据的源头,将数据集中到存储系统。包括硬盘上的历史数据、用户网页的点击、传感器等等。
  • 存储:以各种适合计算的模式集中式存储数据,其中既包含大规模的存储系统(例如数仓),也有例如临时的存储(例如Kafka类消息中间件)。
  • 计算:形态多种多样,但大部分计算完成后会将结果再放入存储,而这个过程也可能迭代多次。
  • 理解:利用机器学习、可视化、通知等手段提炼出结论性或具有代表意义的数据并将结果呈现出来。

image.png

数据的采集是一门很大的范畴,从实时性上和每次传输数据规模上分,一般可以分为3类:

  • 实时采集:例如access log、database change log等
  • 定时任务:例如每隔5分钟从FTP或数据源去批量导出数据
  • 线下导数据:例如邮寄硬盘、AWS Snowmobile 卡车、阿里云的闪电立方等
    从数据的价值以及体量上而言,实时数据采集毫无疑问最重要的,而其中最大的部分就是日志实时采集。

为何使用Agent

实现日志的实时采集一般有2种方式:

  • 直接上传:在应用程序(或依赖的框架)中将日志直接上传到服务端。例如各种日志上传的SDK、Log4j的appender、docker driver等
  • 通过Agent采集:应用本身只产生日志,由Agent作为代理采集到服务端。例如将日志打到磁盘、syslog转发、从中间框架(docker engine、mysql、应用自带的monitor模块)中抽取等

下面我们来详细剖析一下二者区别:

对比项 直采 Agent
实现复杂度 高,需要针对不同的应用/设备/日志存储端分别实现 低,无需专门实现
性能开销 低,直接上传,无额外性能开销 较高,需要一层中转,例如本地磁盘、网络等,有一部分额外开销
应用影响 高,由于日志采集和应用在同一进程,隔离性很难保证 较低,日志采集和应用处于不同进程/设备,采集异常对于应用影响较低
耦合度 紧耦合 松耦合
可扩展性 低,如果更换采集协议、采集目的端,代价极高 高,只需更改Agent,无需对应用本身进行改造
可靠性 较低,日志随应用生灭,应用crash时数据可靠性很难保证 较高,通常由磁盘/中间框架实现持久化,具备一定的可靠性

image.png

从以上分析来看,两种采集方式各有优缺点、也有各自适应的场景:

  • 直采:适用于对性能/资源要求较高的场景,例如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进行对比:

Logtail Logstash Fluentd Beats系列
功能 文本文件采集 支持 支持 支持 支持
syslog 支持 支持 支持 不支持
处理方式 正则、anchor、分隔符、json任意组合 插件扩展 插件扩展 只支持multiline
过滤 正则 插件扩展 插件扩展 不支持
压缩 lz4 插件扩展 插件扩展 支持
功能扩展 支持插件 支持插件 支持插件 支持(修改源码)
性能 采集性能 极简单核160M/s、正则20M/s 单核2M/s左右 单核3-5M/s 极简单核15M/s
资源消耗 平均CPU 2%、内存 40M 10倍以上性能消耗 10倍以上性能消耗 内存消耗较低
稳定性 多租户隔离 自实现的隔离 线程级隔离 线程级隔离 goroutine隔离
硬性资源限制 支持 支持 支持 不支持
资源动态调整 支持 不支持 不支持 不支持
数据保存 支持 插件支持 插件支持 不支持
进程守护 支持 辅助软件支持 辅助软件支持 辅助软件支持
采集点位保存 所有均支持 只支持文件 插件支持 只支持文件
运维代价 本地监控 支持 支持 支持
服务端监控 支持 Beta版本支持简单功能 辅助监控软件扩展 不支持
集群自动缩扩容 自定义标识机器组 不支持 不支持 不支持
运行时配置变更 支持 支持 支持 支持
服务端配置管理 支持 Beta版本支持简单功能 辅助软件扩展 不支持
自动升级 支持 辅助软件扩展 辅助软件扩展 不支持

相对主流的采集Agent,Logtail在采集功能上有一定的不足,对于输入源、处理方式等支持没有开源软件的多,但从目前的功能来看,可以满足95%以上的日志采集需求。但日志采集并不是能够采集到就可以。相对开源软件,Logtail的优势是有集团百万服务器、上万应用的练兵环境,很多问题纯粹从Agent和开源社区的角度并不会考虑到。因此经历了数年的迭代优化,在性能、稳定性、运维代价上,Logtail相对更加成熟,在性价比上具有绝对的优势。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34087307/article/details/89720377

智能推荐

linux/目录下文件说明_weixin_33829657的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

PdfParser读取PDF文件内容_Tom不秃的博客-程序员秘密

PdfParser 是一个标准的 PHP 库提供个用于从 PDF 文件中抽取数据的工具。它加载 PDF文件并解析文件中对象、头和元数据,可抽取其中的文本信息,支持压缩的 PDF、MAC OS 罗马字符集编码、8进制和16进制编码。兼容PSR-0 和 PSR-1。官方文档:https://www.pdfparser.org/documentation使用composer安装依赖包:composer require smalot/pdfparser1、获取文件的基本信息,如:制作人、日期、总页数.

groovy学习笔记_秋葵好吃吗的博客-程序员秘密

DSL 领域相关语言(行话)gradle build执行build下所有task(不包括doLast)gradlew -q take名 quite安静 执行该目录下的build.gradle文件中的 take正则$ 用于匹配行结束符 it$groovy语言4.times方法 循环4次task intro(dependsOn: hello) intro依赖hello任务未定义依

Dev中GridControl的导出Excel设置_PM2241858886的博客-程序员秘密

接上篇 Dev中GridControl的GridView 基本样式设置上图: 导出部分的代码: 1 /// <summary> 2 /// 导出excel 3 /// </summary> 4 /...

C++ 学习笔记之---类继承_dfgdfg7909的博客-程序员秘密

参考自《C++ Primer Plus 6th Edition》除了修改代码外,有两种方法能够用来扩展类的定义,一个是组合,另一个就是继承组合: 使用类型为别类的成员变量继承: 从已有的类派生出新类,在新类中加入新的成员本文仅讨论继承中的公有继承 (class derivedClass : public baseClass)分为三部分...

telnetd的小问题_Templar1000的博客-程序员秘密

把/etc/inetd.conf文件中的Telnet项中在最后的telnetd改成telnetd -k180 -K5 -N3。意思为该telnet 连接在闲置180秒后,每隔5秒钟发一次在线查询信号给终端,如发三次后,每次均无应答,则断开此telnet  连接,并删除相对应的进程。这样即使不正常关机    也不会留下多余的进程。

随便推点

Windows x64下提权Exploit整理_weixin_33757911的博客-程序员秘密

0x00 前言在CVE-2014-4113出来后,x64环境下的提权又是一片短暂的光明.在此漏洞披露前,PR/IIS溢出/LPK劫持等对64位版本都无效果,网上公开曾有一个Exp有效,代号为MS10048x64.本文谨记录x64下可提权的Exp与测试过程.暂不考虑依赖第三方服务(如MSSQL/MYSQL)等的提权测试环境:WindowsServer2003Ent...

2014ACM/ICPC亚洲区域赛牡丹江站现场赛-D ( ZOJ 3822 ) Domonation_sxk_sxy的博客-程序员秘密

题目链接:DominationTime Limit: 8 Seconds      Memory Limit: 131072 KB      Special JudgeEdward is the headmaster of Marjar University. He is enthusiastic about chess and often plays

第十周【项目1 - 二叉树算法验证】之层次遍历算法的验证_层次遍历的算法与验证分析_ff2333的博客-程序员秘密

Copyright(c) 2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:text.cpp 作者:黄潇慧 完成日期:2017年11月2日 版本:vc6.0 问题描述:实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试 输入描述: 输出描述: 代

tarjan算法与有向图的连通性_「已注销」的博客-程序员秘密

tarjan算法:将强连通分量缩成一个点,形成一个新的有向图学习这个算法是通过解一个题目,看题目意思很明朗,看起来很简单,只是看起来-_-但是现在我学了这个算法,就不怕了。问题题出:题目链接  有个大佬,啥都会,萌新们纷纷跑来向大佬学习,但是大佬觉得萌新们太多(sha)了,只想教一部分,然后让那些人再去教别的萌新,如果萌新A会教萌新B,萌新B又会教萌新C,这样,大佬只要教会萌新A,萌新...

单学C语言对于程序员够不够,怎么才能成为程序员 我已经过了国家计算机二级(C)..._互联网有记忆的博客-程序员秘密

数据结构、操作系统、编译原理、软件工程先学好这些课再说吧选好复习用书在复习应考时,大家要根据自己的具体情况,制定一套完整的复习计划。不要拘泥于某种特定的方法,某种方法对别人很合适,但不一定适合你。在参考书的使用上,我向大家推荐两本参考书,一本是清华大学出版社出版的《程序设计》,另一本是大连理工大学出版社出版的《全真试题精解》。在看《程序设计》这本书时,不一定非要按顺序从第一页看到最后一页,可以从中...

使用Web前端技术开发桌面应用---Electron简介_CreatorRay的博客-程序员秘密

码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取。Electron是什么?你只要记住下面这两句话就可以对Electron有个基本了解:Electron 是由 Github开发的开源框架它允许开发者使用Web技术构建跨平台的桌面应用Electron = Chromium + Node.js + Native APIChromium : 为Electron提供了强大的UI能力,可以不考虑兼容性的情况下,利用强大的Web生态来开发界面。Node.

推荐文章

热门文章

相关标签