Decenas de millones de recopiladores de datos observables: código iLogtail completo y de código abierto

Introducción: el 29 de junio de 2022, Alibaba Cloud iLogtail marcó el comienzo de su primera actualización importante después de ser de código abierto y lanzó oficialmente la iLogtail Community Edition totalmente funcional. En esta actualización, todos los códigos principales de C++ son de código abierto. Esta versión es la primera en alinearse con la versión empresarial en términos de capacidades del kernel. Los desarrolladores pueden crear recopiladores de datos de observabilidad nativos en la nube de iLogtail con un rendimiento comparable al de la versión empresarial. Esta versión agrega muchas funciones importantes, como la recopilación de archivos de registro, la recopilación de archivos de contenedor, el procesamiento de eventos sin bloqueo, el aislamiento de múltiples inquilinos y un nuevo método de configuración basado en Pipeline, que mejora de manera integral la usabilidad y el rendimiento de la edición de la comunidad. prestar atención , Co-construcción.

imagen.png

Autor | Xunfei, Ye Mo
Fuente | Cuenta pública del desarrollador de Ali

El 29 de junio de 2022, Alibaba Cloud iLogtail marcó el comienzo de su primera actualización importante después de ser de código abierto y lanzó oficialmente una versión comunitaria de iLogtail totalmente funcional. En esta actualización, todos los códigos principales de C++ son de código abierto. Esta versión es la primera en alinearse con la versión empresarial en términos de capacidades del kernel. Los desarrolladores pueden crear recopiladores de datos de observabilidad nativos en la nube de iLogtail con un rendimiento comparable al de la versión empresarial. Esta versión agrega muchas funciones importantes, como la recopilación de archivos de registro, la recopilación de archivos de contenedor, el procesamiento de eventos sin bloqueo, el aislamiento de múltiples inquilinos y un nuevo método de configuración basado en Pipeline, que mejora de manera integral la usabilidad y el rendimiento de la edición de la comunidad. prestar atención , Co-construcción.

Desafíos de recopilación de datos de observabilidad

imagen.png
imagen.png

La observabilidad es la capacidad de medir el estado interno de un sistema examinando sus salidas. El término se originó en la teoría del control hace décadas y fue propuesto por primera vez por el ingeniero húngaro Rudolf Kalman. En los sistemas de TI distribuidos, la observabilidad generalmente usa varios tipos de datos de telemetría (registros, métricas y seguimientos) para medir la infraestructura, las plataformas y las aplicaciones para comprender su estado operativo y sus procesos. La recopilación de estos datos generalmente la completa un agente de recopilación que se ejecuta junto con el objeto observado. Bajo la arquitectura del sistema moderno basado en microservicios y nativos en la nube, estos objetos de observación están más dispersos, son más numerosos y cambian más rápido que antes, lo que hace que el agente de recolección enfrente los siguientes desafíos:

  1. Alto rendimiento, poca sobrecarga: las aplicaciones modernas generalmente se ejecutan en miles de servidores, máquinas virtuales y contenedores en centros de datos, nubes públicas y en el perímetro, y cada bit de sobrecarga de rendimiento de un agente de recopilación se amplifica por miles. En la actualidad, el diseño de muchos agentes de código abierto se centra más en la función que en el rendimiento. El rendimiento de procesamiento de un solo núcleo es generalmente de alrededor de 2-10 M/s, y esperamos lograr un rendimiento de un solo núcleo de 100 M/s. En el caso de mayores objetivos de recopilación, mayor volumen de datos, demoras en la recopilación y anomalías del servidor, la memoria de los agentes de código abierto mostrará un crecimiento explosivo y esperamos que, incluso en diversos entornos, la memoria pueda tener un nivel bajo de agua.
  2. Adquisición estable y precisa, aislamiento multinivel de fallas: la observabilidad debe ser al menos un orden de magnitud más confiable que el sistema observado. La estabilidad del agente de recopilación de datos, además de garantizar la precisión de la recopilación de datos en sí, también debe garantizar que la aplicación comercial no se vea afectada, de lo contrario, traerá consecuencias catastróficas. Por otro lado, sin importar cómo ocurra el problema, es necesario aislar el problema tanto como sea posible, por ejemplo, hay varias configuraciones de recopilación en un Agente y un problema de configuración no puede afectar a otras configuraciones.
  3. Configuración a gran escala de administración y control a nivel empresarial: los datos observables tienen una amplia gama de aplicaciones. A menudo, hay una gran cantidad de configuraciones dentro de una empresa. Se requieren agentes para admitir capacidades de administración de configuración centralizadas y automatizadas, en lugar de iniciar sesión manualmente. a la máquina para modificar la configuración y para asegurar los datos durante la configuración Recargar No se pierde ni pesa. Cuando el Agente tiene varias configuraciones de recopilación, organice racionalmente los recursos. Es necesario dar prioridad a los recursos, como el ancho de banda de la memoria, para las configuraciones de alta prioridad y asegurarse de que las configuraciones de baja prioridad no se "mueran de hambre". suficientes recursos después del pico Capacidad de ráfaga para ponerse al día rápidamente con los datos.
  4. Soporte K8s más nativo y amigable: K8s proporciona una implementación poderosa de operación y mantenimiento, escalado elástico y capacidades de recuperación de fallas, lo que facilita enormemente el desarrollo y la administración de sistemas distribuidos.Sin embargo, también surge el problema de la recopilación de registros. La diversa salida de datos de K8 hace que el mismo agente necesite admitir la recopilación de registros de host, registros de contenedores, salida estándar de contenedores y otras fuentes de datos al mismo tiempo. La capacidad de escalabilidad elástica de K8s para la implementación comercial requiere que el Agente tenga la capacidad de descubrir y marcar contenedores de forma dinámica, y también presenta requisitos más altos sobre cómo garantizar la integridad de la recopilación de datos.

Dado que no existe un agente de código abierto que resuelva a la perfección los desafíos anteriores, decidimos desarrollar iLogtail nosotros mismos. El posicionamiento central de iLogtail es el recopilador de datos observables, que ayuda a los desarrolladores a crear una capa de recopilación de datos comerciales unificada y ayuda a la plataforma observable a crear varios escenarios de aplicaciones de capa superior.

Introducción a iLogtail

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

imagen.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++核心代码也正式开源了,自此开发者可以基于该版本构建完整的云原生可观测数据采集方案。

imagen.png

iLogtail优势

对于可观测数据的采集,有很多开源的采集器,例如Logstash、Fluentd、Filebeats等。这些采集器的功能非常丰富,但在性能、稳定性、管控能力等关键特性方面iLogtail因其独特设计而具备优势。

imagen.png

C++内核重要特性

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

日志文件采集

C++核心源代码包含了功能完整的文件发现机制,可以支持通配符和多层次目录的动态日志文件监控,并支持日志轮转、日志数、轮转大小设置。iLogtail在Linux下使用inotify作为文件监控的主要手段,提供了毫秒级延时的数据发现能力,同时为了兼顾不同操作系统以及支持各类特殊采集场景,iLogtail同时使用了轮询作为的数据的发现方式。通过使用轮询与事件并存的混合方式,iLogtail打造了一套兼具性能优势同时不失鲁棒性的文件发现机制。

imagen.png

容器文件采集

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

imagen.png

无锁化事件处理

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

多租户隔离

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

imagen.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
复制代码

后续展望

En noviembre de 2021, abrimos el complemento de Golang extensible y con más funciones de iLogtail, y recibimos mucha atención y sugerencias de los desarrolladores. Recopilado más de 600 veces, recibido más de 60 sugerencias y relaciones públicas más de 120 veces. El módulo central de C++ es el factor principal que le da a iLogtail una cierta ventaja sobre otro software de adquisición de código abierto en términos de rendimiento y uso de recursos. Se espera que el código abierto de la parte central de C++ mejore aún más la eficiencia de los recursos para más empresas y enriquezca Capacidades de iLogtail Ecología del producto, atrayendo a más desarrolladores destacados para participar en la construcción de la comunidad.
En la era nativa de la nube actual, creemos firmemente que el código abierto es la mejor estrategia de desarrollo para iLogtail y la forma de desbloquear su mayor valor. Como el software más básico en el campo observable, iLogtail todavía tiene muchos escenarios diferentes por descubrir en todos los ámbitos de la vida. Esperamos construir junto con la comunidad de código abierto, continuar optimizando y esforzarnos por convertirnos en un recopilador de datos observables de clase mundial.

Información relacionada
GitHub: github.com/alibaba/ilo…

Manual de usuario de Community Edition: ilogtail.gitbook.io/ilogtail-do…

Sitio web oficial de Enterprise Edition: help.aliyun.com/document_de…

¿Cómo construyen los técnicos la influencia de la marca personal? ¡Exclusivamente enseñado por cinco de los mejores creadores!

La comunidad de desarrolladores e InfoQ planean especialmente el "Campamento de entrenamiento de creación técnica", 2 tutores de oro + 5 autores destacados enseñan exclusivamente la metodología de escritura, llevándote a abrir el camino hacia la creación técnica de alta calidad.

Haga clic aquí para más detalles.

Enlace original: click.aliyun.com/m/100034877…

Este artículo es el contenido original de Alibaba Cloud y no se puede reproducir sin permiso.

Supongo que te gusta

Origin juejin.im/post/7119793144299782158
Recomendado
Clasificación