关于后端:千万级可观测数据采集器iLogtail代码完整开源

34次阅读

共计 5141 个字符,预计需要花费 13 分钟才能阅读完成。

简介:2022 年 6 月 29 日,阿里云 iLogtail 开源后迎来首次重大更新,正式公布残缺性能的 iLogtail 社区版。本次更新开源全副 C ++ 外围代码,该版本在内核能力上首次对齐企业版,开发者能够构建出与企业版性能相当的 iLogtail 云原生可观测性数据采集器。本次公布新增日志文件采集、容器文件采集、无锁化事件处理、多租户隔离、基于 Pipeline 的新版配置形式等诸多重要个性,全面加强社区版的易用性和性能,欢送宽广开发者关注、共建。
image.png

作者 | 迅飞、烨陌
起源 | 阿里开发者公众号

2022 年 6 月 29 日,阿里云 iLogtail 开源后迎来首次重大更新,正式公布残缺性能的 iLogtail 社区版。本次更新开源全副 C ++ 外围代码,该版本在内核能力上首次对齐企业版,开发者能够构建出与企业版性能相当的 iLogtail 云原生可观测性数据采集器。本次公布新增日志文件采集、容器文件采集、无锁化事件处理、多租户隔离、基于 Pipeline 的新版配置形式等诸多重要个性,全面加强社区版的易用性和性能,欢送宽广开发者关注、共建。

可观测性数据采集挑战
image.png
image.png

可观测性是通过查看其输入来掂量零碎外部状态的能⼒。该术语起源于⼏⼗年前的管制实践,最早是匈牙利裔工程师鲁道夫·卡尔曼提出。在分布式 IT 零碎中,可观测性典型使⽤种类型的遥测数据⸺⽇志、指标和跟踪来度量基础设施、平台和应用程序,以理解他们的运行状态和过程。这些数据的收集通常由一个与被观测对象独特运行的采集 Agent 实现。基于云原生和微服务的古代零碎架构下,这些观测对象比以往散布更加扩散,数量更多且变动更快,使得采集 Agent 面临如下挑战:

高性能,低开销:古代应用程序通常在数据中心、公共云和边缘处会集了数以千计的服务器、虚拟机、容器中运行,采集 Agent 的每一点性能开销都会被数以千计地放大。目前泛滥开源 Agent 的设计更多的是并重性能而非性能,单核解决性能广泛在 2 -10M/ s 左右,而咱们心愿能达到单核 100M/ s 的性能。在采集指标减少、数据量减少、采集提早、服务端异样等状况下,开源 Agent 内存都会出现爆炸式增长,而咱们心愿即便在各种环境下,内存也能处在较低的水位。
采集稳固精确,故障多级隔离:可观测性须要比被观测的零碎至多牢靠一个数量级。数据采集 Agent 的稳定性,除了保证数据自身采集的准确性外,还须要保障不能影响业务利用,否则将带来灾难性的结果。另一方面,无论怎样呈现问题,都须要尽可能的隔离问题,例如一个 Agent 上有多个采集配置,一个配置出问题,不能影响其余配置。
大规模配置企业级管控:可观测数据的利用范畴宽泛,一个企业外部往往存在大量配置,须要 Agent 反对中心化、自动化配置管理能力,代替手工登录机器批改配置的形式,并且可能保障配置 Reload 期间数据不丢不重。当 Agent 有多个采集配置时,合理安排资源,既要优先把内存带宽等资源供应高优先级配置,又要确保低优先级的配置不被“饿死”,其须要在波峰过后有足够的 Burst 能力疾速追齐数据。
更原生敌对的 K8s 反对:K8s 提供了强悍的运维部署、弹性伸缩、故障恢复能力,极大地便当了分布式系统的开发和治理,然而日志采集的问题也随之而来。K8s 多样的数据输入使得同一个 Agent 须要同时反对采集宿主机日志、容器内日志、容器 stdout 等多种数据源。K8s 的对业务部署的弹性伸缩能力,要求 Agent 具备容器动静发现、打标的能力,同时也对如何保证数据采集完整性提出了更高的要求。
因为尚无完满解决以上挑战的开源 Agent,咱们抉择自研 iLogtail。iLogtail 的外围定位就是可观测数据的采集器,帮忙开发者构建对立的业务数据采集层,助力可观测平台打造各种下层的利用场景。

iLogtail 简介
iLogtail 是阿里云日志服务(SLS)团队自研的可观测数据采集 Agent,领有的轻量级、高性能、自动化配置等诸多生产级别个性,能够署于物理机、虚拟机、Kubernetes 等多种环境中来采集遥测数据。iLogtail 在阿里云上服务了数万家客户主机和容器的可观测性采集工作,在阿里巴巴团体的外围产品线,如淘宝、天猫、支付宝、菜鸟、高德地图等也是默认的日志、监控、Trace 等多种可观测数据的采集工具。目前 iLogtail 已有千万级的装置量,每天采集数十 PB 的可观测数据,广泛应用于线上监控、问题剖析 / 定位、经营剖析、平安剖析等多种场景,在实战中验证了其弱小的性能和稳定性。

image.png

iLogtail 倒退历程
iLogtail 的前身源自阿里云的神农我的项目,自从 2013 年正式孵化以来,iLogtail 始终在一直演进。

诞生初期,面对阿里云本身和晚期客户运维和可观测性需求,iLogtail 次要解决的是从单机、小规模集群到大规模的运维监控挑战,此时的 iLogtail 曾经具备了根本的文件发现和轮转解决能力,能够实现日志、监控实时采集,抓取毫秒级提早,单核解决能力约为 10M/s。通过 Web 前端可反对中心化配置文件主动下发,反对 3W+ 部署规模,上千采集配置项,实现日 10TB 数据的高效采集。

2015 年,阿里巴巴开始推动团体和蚂蚁金服业务上云,面对近千个团队、数百万终端、以及双 11、双 12 等超大流量数据采集的挑战,iLogtail 在性能、性能、稳定性和多租户反对方面都须要进行微小的改良。至 2017 年前后,iLogtail 曾经具备了正则、分隔符、JSON 等多个格局日志的解析能力,反对多种日志编码方式,反对数据过滤、脱敏等高级解决能力,单核解决能力极简模式下晋升到 100M/s,正则、分隔符、JSON 等形式 20M/s+。采集可靠性方面,减少文件发现 Polling 形式兜底、轮转队列程序保障、日志清理失落爱护、CheckPoint 加强;过程可靠性方面,减少异样主动复原、Crash 主动上报、守护过程等。通过全流程多租户隔离、多级高下水位队列、配置级 / 过程级流量管制、长期降级等机制,反对百万 + 部署规模,千级别租户,10 万 + 采集配置项,实现日 PB 级数据的稳固采集。

随着阿里推动外围业务全面上云,以及 iLogtail 所属日志服务(SLS)正式在阿里云上商业化,iLogtail 开始全面拥抱云原生。面对多元的云上环境、迅速倒退的开源生态和大量涌入的行业客户需要,iLogtail 的倒退的重心转移到解决如何适应云原生、如何兼容开源协定和如何去解决碎片化需要等问题上。2018 年 iLogtail 正式反对 docker 容器采集,2019 年反对 containerd 容器采集,2020 年全面降级 Metric 采集,2021 年减少 Trace 反对。通过全面反对容器化、K8S Operator 管控和可扩大插件零碎,iLogtail 反对千万部署规模,数万内外部客户,百万 + 采集配置项,实现日数十 PB 数据的稳固采集。

2021 年 11 月 iLogtail 迈出了开源的第一步,将 Golang 插件代码开源。自开源以来,吸引了数百名开发者的关注,并且也有不少开发者奉献了 processor 跟 flusher 插件。明天,C++ 外围代码也正式开源了,自此开发者能够基于该版本构建残缺的云原生可观测数据采集计划。

image.png

iLogtail 劣势
对于可观测数据的采集,有很多开源的采集器,例如 Logstash、Fluentd、Filebeats 等。这些采集器的性能十分丰盛,但在性能、稳定性、管控能力等要害个性方面 iLogtail 因其独特设计而具备劣势。

image.png

C++ 内核重要个性
本次 iLogtail C++ 内核开源全面对齐企业版性能个性,并新增基于 Pipeline 的极简采集配置项晋升社区版易用性。

日志文件采集
C++ 外围源代码蕴含了性能残缺的文件发现机制,能够反对通配符和多层次目录的动静日志文件监控,并反对日志轮转、日志数、轮转大小设置。iLogtail 在 Linux 下应用 inotify 作为文件监控的次要伎俩,提供了毫秒级延时的数据发现能力,同时为了兼顾不同操作系统以及反对各类非凡采集场景,iLogtail 同时应用了轮询作为的数据的发现形式。通过应用轮询与事件并存的混合形式,iLogtail 打造了一套兼具性能劣势同时不失鲁棒性的文件发现机制。

image.png

容器文件采集
iLogtail C++ 内核与插件零碎配合可反对全场景的容器数据采集。iLogtail 通过插件发现节点的容器列表并保护容器和日志采集门路映射,联合 C ++ 内核高效的文件采集能力提供了极致的容器数据采集体验。iLogtail 反对应用容器标签、环境变量、K8s 标签、Pod 名称、命名空间等多种形式进行容器筛选,为用户提供了便当的采集源配置能力。反对 DaemonSet、Sidecar、CRD 等多种部署形式,为应答不同应用场景提供了灵便的部署能力。而 iLogtail 采纳全局容器列表和通过 Kubernetes CRI 协定获取容器信息的设计,使其在权限和组件依赖上相比其余开源更加轻量级,并且领有更高的采集效率。

image.png

无锁化事件处理
iLogtail 实现如此高吞吐的秘诀之一是应用了无锁化事件处理模型。与业界其余开源 Agent 为每个配置调配独立线程 /Goroutine 读取数据不同,iLogtail 数据的读取只配置了一个线程。因为数据读取的瓶颈并不在于计算而是磁盘,单线程足以实现所有配置的事件处理以及数据读取。应用单线程使得 iLogtail 的事件处理和数据读取都能够在无锁环境下运行,数据结构更加轻量化,从而获得了绝对多线程解决更优的性价比。

多租户隔离
在生产环境中,一台服务存在数百个采集配置属于常态,每个配置的优先级、日志产生速度、解决形式、上传目标地址等都有可能不同,因而必须无效解决如何隔离各种自定义配置,保障采集配置 QoS 不因局部配置异样而受到影响的问题。iLogtail 采纳基于工夫片的采集调度、多级高下水位反馈队列、事件非阻塞解决、流控 / 停采策略以及配置动静更新等多项关键技术,交融实现了兼具隔离性、公平性、可靠性、可控性、性价比五大个性的多租户隔离计划。经验了多年双 11 流量高峰期的考验,这套计划曾经被证实相比其余开源具备较大的稳定性和性价比劣势。

image.png

基于 Pipeline 的新版配置形式
简洁直观的配置文件对于 Agent 的应用至关重要,iLogtail 晚期简直全副依赖图形化配置形式,默认的 JSON 配置文件臃肿冗余、难以了解。本次降级应用 YAML 格局,除了人造继承其可读性强、字符串本义少、反对多行文本、可增加正文的长处外,还依据 iLogtail 最近的数据流水线架构,将配置文件从新划分为 inputs、processors、aggregators、flushers 四个局部,重视性能配置淡化实现细节,并对立标准了配置项的命名标准,以进一步升高 iLogtail 的配置门槛。
一个最简配置示例:

enable: true
inputs:

  • Type: file_log
    LogPath: /log
    FilePattern: simple.log

flushers:

  • Type: flusher_stdout

后续瞻望
2021 年 11 月,咱们开源了 iLogtail 性能最丰盛、可扩展性最强的 Golang 插件局部,收到了大量开发者的关注和倡议。累计珍藏 600+ 次,收到倡议 60+ 条,PR 120+ 次。C++ 外围模块是 iLogtail 在性能和资源占用上相比其余开源采集软件具备肯定劣势的次要因素,心愿这次 C ++ 外围局部的开源能为更多的企业带来资源效率的进一步晋升,同时丰盛 iLogtail 的产品生态,吸引更多优良开发者参加社区建设。
在当今云原生的时代,咱们深信开源才是 iLogtail 最优的倒退策略,也是开释其最大价值的办法。iLogtail 作为可观测畛域最根底的软件,在各行各业依然有许多不同场景有待发现。咱们心愿可能和开源社区一起共建,继续优化,争取成为世界一流的可观测数据采集器。

相干材料
GitHub: https://github.com/alibaba/il…

社区版用户手册:https://ilogtail.gitbook.io/i…

企业版官网:https://help.aliyun.com/docum…

技术人如何打造集体品牌影响力?五大顶级创作者独家传授!

开发者社区联结 InfoQ 特地策动《技术创作训练营》,2 位金牌导师 + 5 位顶级作者独家传授写作方法论,带您开启高质量技术创作之路。

点击这里,查看详情。

原文链接:http://click.aliyun.com/m/100…

本文为阿里云原创内容,未经容许不得转载。

正文完
 0