前言
社会在不断发展,科技日益更新迭代,改变了传统的衣食住行,各种各样的APP成为当代年轻人的手机必备,这背后是无数的服务器在提供着技术服务,导致服务器每时每刻都会产生各种类型的日志,当业务出现问题时,运维人员需要在海量的日志中查找需要的信息,给工作带来巨大挑战。
日志入湖后,运维人员可以利用湖上的生态对日志作各种处理,如搜索、离线分析,其他使用者分析师、运营,也能合理的利用数据湖中的数据,来进行多需求的计算分析,如机器学习、实时计算、离线分析、数据下载、搜索等。
阿里云提供的企业级数据湖解决方案,存储层基于阿里云对象存储 OSS 构建,本文主要介绍服务器日志如何快速入湖
服务器日志入湖解决方案
1.开源方案
通过开源的采集器 Flume/Logstash/Beats 等,将服务器日志摄入OSS,插件多,生态广泛,缺点是可靠性、性能表现一般
2.SLS 快速入湖
日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。
通过logtail(阿里千万实例可观测采集器,已开源 https://github.com/alibaba/ilogtail)采集服务器日志到SLS,SLS将日志投递到OSS,简单,可靠
流存储:弹性、高可靠
实际业务场景如出行打车遇到节假日,出现高峰用车场景,会导致峰值流量远超过数据存储服务器上限,打爆网关,导致业务不可用。
SLS 通过流存储做高可靠的缓冲,数据存储分区(shard)自动伸缩,抗住峰值写入流量;按量付费,0预留成本;存储3备份冗余,数据安全可靠。
采集:高性能、高质量
开源采集器如Flume官方性能报告如下图所示,性能表现一般:
Logtail采集性能可以达到单核100MB/s,相比开源采集Agent有5-10倍性能优势,能节省服务器的cpu/mem开销,避免影响服务器上核心业务,具体报告可见https://ata.alibaba-inc.com/articles/224523?spm=ata.25287382.0.0.36c97536irIv46
采集:运维负担低
开源的采集器如Flume等,采集配置需要在每台机器上手动配置,当集群过大时运维难度大,手动运维更容易产生问题,如配置遗漏,导致集群配置不一致;agent要重加载配置,流程复杂,agent crash等质量问题。
logtail 安装方便(控制台自助安装),配置中心化,通过机器组管理(可以服务端统一配置管理,不需要在机器上散落在各地手动运维配置管理)
投递:全托管、模板化
投递配置简单,全托管模式,方便快捷,按量付费,提供丰富的入湖模板,方便用户灵活使用,提供整个数据链路的仪表盘和告警
SLS助服务器日志快速入湖实践
1.开通SLS服务并创建project
- 开通日志服务(SLS)(https://www.aliyun.com/product/sls),创建一个属于自己的project,填写project名称,全局唯一,选择所属地域(如果要采集的机器组为阿里云ECS,地域选择ECS所在地域),服务日志为用户在当前project操作记录,可以按需开通
2.创建logstore
- 进入对应的project,创建一个logstore(logstore是日志服务中日志数据的采集、存储和查询单元),你可以将一类日志存储在一个logstore中,填写logstore名称,其他默认即可,点击确定
3.Logtail采集
Step1:创建配置
- 点击对应的logstore,点击数据接入,增加logtail配置,根据业务需求选择logtail的方式,本文以单行-文本日志为例
Step2:创建机器组
- 根据你的机器类型进行机器组配置,如ECS,自建机器,本文以ECS为例,阿里云ECS在对应机器上默认安装logtail客户端,自建机器参考相关文档,点进去有相关介绍
- 选择实例,logtail提供多种实例选取方式,可以根据业务实际业务来选择,本文手动选择实例,可以通过关键词,如ip地址来搜索,找到对应机器,勾选上,可以同时勾选多台机器,高级选项,可以忽略
- 点击立即执行,等待执行成功后,点击确认安装完毕
- 设置机器组名称,点击下一步, 机器组Topic默认为空,不设置,如业务需要,可参考下面帮助信息进行设置
Step3:机器组配置
- 选择源机器组(上一步配置完毕的机器组),可以选择多个源,让其成为应用机器组,点击下一步
Step4:logtail配置
- 日志路径:对应机器组中机器要采集的文件路径,可以用*来表示一类的采集文件,上方右图为ECS日志所在路径,/home/oss_test/test.txt 和/home/oss_test/oss1/test2.txt,只需在日志路径中配置上方左图所示配置,最上层的采集根目录/home/oss_test/,需要采集的文件类型*.txt,即可采集该目录下所有文件后缀.txt的文件
- 设计采集黑名单:可以设置忽略的目录和文件
- 是否为Docker文件:当被采集的机器为容器时,需要打开该配置
- 模式:可以选择日志被采集的模式,如单行,多行,正则匹配
- 丢弃解析失败日志:选择解析失败的日志是否被采集
- 最大监控目录深度:采集目录被监控的深度
- 高级选项:可以参考官方文档
- 除日志路径外其他选项可以默认不配置,更详细的用法可以参考官方文档:https://help.aliyun.com/document_detail/65018.html
Step5:查询分析配置默认即可,点击完成,点击查询日志,进入查询界面
Step6:查询,点击查询按钮,查询结果有数据,代表日志采集到logstore,可以开始投递
4.OSS投递
数据投递提供全托管服务,方便快捷,按量付费,投递不收取读取 SLS 流量费用,提供多个入湖模板,让存储更好匹配计算
Step1:填写基本目标信息
- OSS Bucket:填写目标的OSS Bucket
- 文件投递目录:数据将会放置在目标Bucket的文件目录下,也可以理解是一个文件路径的前缀。可不配置,将按分区格式配置动态生成目录
- 文件后缀(可选):以此为后缀或由存储格式和压缩类型自动生成。
- 分区格式:对于计算引擎Spark、Flink等了解的同学对数据分区(partition)的概念不会陌生。目前SLS的OSS投递功能支持用户使用自定义的时间格式来按照时间生成分区(业务时间或者其他自定义字段规划中)
Step2 :配置权限
- 使用RAM角色来配置好Logstore的读取权限和OSS的写权限,用户还可以通过自定义角色配置粒度更细(如特定Bucket的写权限,特定Logstore的读权限等)。
Step3:配置输出格式
- 投递大小:代表着会收集投递大小的日志数据量进行投递,无特意需求,默认就好
- 是否压缩: 可以降低用户成本,默认就好
- 存储格式: 文件在oss存储的格式,无特殊需求默认json,不投递tag字段,减少日志大小,特殊需求可以参考oss投递详细文档
Step4:配置时间选项
- 投递时间:决定任务的生成间隔,投递大小或者投递时间满足任一条件会完成一次投递,所以用户可以根据自己使用场景配置合理的投递时间,比如在用户流量较小的情况下,可选择偏长的投递时间,防止出现过多小文件。
- 开始时间:为开始投递的起始日志收集的时间,可选择ttl-now任意的时间。
- 时区选择:时区选择会影响到最后具体的分区partition路径
Step5:确认,启动
Step6:投递概览和任务管理
在配置结束后会跳转到数据投递概览页面,也可以在 作业 - 数据投递(新版)中找到创建的任务
可以在数据投递概述页面查看投递任务信息,包含基础信息和统计报表,可以修改任务配置和查看任务运行情况
更详细的细节可以参考官方文档:https://help.aliyun.com/document_detail/371924.html
总结
SLS提供logtial采集+OSS投递入湖快速解决方案,logtail采集可靠性强,性能优越,运维成本低廉,极大降低了用户的成本。数据通过SLS作为缓冲,更能抵御数据洪峰。OSS投递开箱即用,全托管服务,丰富的存储格式,可视化观察投递任务进展,带给用户更好的体验。SLS还提供更丰富采集方式,如数据导入,云产品日志采集,SDK采集等,详情请参考https://help.aliyun.com/document_detail/128134.html。希望SLS能帮助用户实现日志价值,助力业务发展。
若有收获,就点个赞吧