找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2902

积分

0

好友

376

主题
发表于 7 小时前 | 查看: 1| 回复: 0

在云计算和物联网快速发展的今天,越来越多的业务场景将计算和数据采集能力推向了边缘侧。从智能制造的产线设备、新能源汽车的车载系统,到遍布各地的零售终端和智能家居设备,这些终端设备产生的可观测数据(日志、指标、追踪)对于业务运营、故障诊断和用户体验优化至关重要。

然而,终端设备的运行环境远比数据中心复杂,为数据采集带来了严峻挑战:

  • 网络环境不稳定:终端设备常常运行在弱网、间歇性断网的环境中。移动网络信号波动、WiFi连接不稳定、跨地域网络延迟高等问题普遍存在。
  • 电源供应不保障:许多终端设备依赖电池供电或面临意外断电风险。
  • 资源极度受限:边缘设备的 CPU、内存、存储、网络带宽都极为有限。

在这种极限条件下的可观测数据采集面临极大的挑战。比如车辆在偏远地区行驶时,可能长时间处于弱网或断网状态;车辆熄火断电时,内存中缓存的监控数据可能全部丢失;在隧道、地下停车场等场景下,数据采集中断,关键的故障诊断数据无法回传。

本文将深入剖析边缘场景下的采集难题,并详细介绍阿里云开源的 LoongCollector 如何针对弱网、断电等极限环境,提供一套完整、可靠的边缘可观测数据采集解决方案。

边缘终端可观测数据采集的三大挑战

边缘终端可观测数据采集的三大挑战流程图

挑战一:复杂的网络环境

终端设备运行环境的网络条件远比数据中心复杂:

  • 弱网场景:移动网络信号不稳定、WiFi信号弱、跨地域长链路等导致网络带宽低、延迟高、丢包率高。
  • 间歇性断网:设备移动、网络切换、临时性网络故障导致周期性网络中断。
  • 长时间离线:某些场景下设备需要长时间离线工作,积累大量待上传数据。

例如,车载终端设备在偏远地区运输途中,可能很长时间都处于弱网或断网状态;在车辆熄火或者维修的情况下,车载终端设备也会断电。

挑战二:可观测数据可靠交付

在弱网、断电等不稳定环境下,保证数据的可靠交付和一致性是最大的挑战:

  • 数据丢失风险:网络中断、设备断电、进程异常等都可能导致数据丢失。
  • 顺序性保障:时序数据(如指标、追踪)需要保持采集时的时间顺序。

挑战三:网络带宽限制

终端设备的网络带宽通常受到严格限制:

  • 流量成本高:4G/5G移动网络的流量费用远高于数据中心专线。
  • 带宽竞争:采集数据上传需要与业务数据传输竞争有限的带宽资源。
  • 上传速率限制:某些运营商或网络环境会对上传带宽进行限制。

在这样的环境下,如何高效压缩数据、智能控制发送速率、避免带宽被采集流量占满,成为必须解决的问题。

LoongCollector:为边缘场景优化的可靠采集方案

LoongCollector是阿里云开源的高性能、高可靠可观测性数据采集器,在支撑阿里云内部千万级规模部署的同时,针对边缘场景进行了深度优化。

核心能力概览

统一的可观测数据采集
LoongCollector提供了完整的可观测数据采集能力:

  • 主机监控:实时采集CPU、内存、磁盘、网络等系统指标,支持100+系统指标项。
  • Prometheus协议:完全兼容Prometheus生态,可采集所有支持Prometheus采集的应用指标。
  • 日志采集:高效的文本日志采集能力,支持多种日志格式和解析方式。

超低资源消耗
针对资源受限的终端设备,LoongCollector进行了极致的性能优化。在与主流开源采集器(Fluent Bit, Vector, Filebeat)的性能基准测试中,LoongCollector在CPU和内存消耗上展现出显著优势。

LoongCollector与主流采集器性能对比图表
性能对比详细数据表格

这意味着在相同的硬件条件下,LoongCollector可以支持更多的采集任务,或者在资源更受限的设备上稳定运行。这对于追求稳定与效率的 运维 工作至关重要。

企业级稳定性保障

  • 生产级验证:支撑阿里云内部1000万+实例的可观测数据采集。
  • 高可用性:单实例高可用性,支持故障自恢复。
  • 久经考验:经历多年双11大促、突发流量等极端场景验证。

解决方案架构:数据持久化 + 异步发送 + 智能重试

针对弱网、断电、断网等边缘场景,LoongCollector采用了“数据持久化 + 异步发送 + 智能重试”的核心架构设计。

LoongCollector采集架构图

  • 分离采集与发送:将数据采集和网络发送完全解耦,采集过程不受网络状态影响。
  • 本地持久化:日志数据天然具备本地持久化的能力。此处主要指指标等无持久化能力的数据,此方案会将所有采集到的指标,先写入本地文件,确保断电、重启也不丢失。
  • 异步消费:独立的发送线程从持久化文件中读取数据并发送,失败时自动重试。
  • 智能反压:网络异常时,自动控制数据读取速度,避免内存占用过高。

指标数据落盘持久化
传统的指标采集方案(如Telegraf、Prometheus Pushgateway)通常将采集到的指标数据直接发送到服务端。这种架构在稳定网络环境下工作良好,但在边缘场景下存在致命缺陷:

  • 断网丢数据:网络中断时,新采集的指标数据无法发送,只能丢弃或缓存在内存中。
  • 断电丢数据:设备意外断电时,内存中缓存的数据全部丢失。
  • 内存压力大:长时间断网时,内存缓存会迅速膨胀,最终导致OOM。

LoongCollector创新性地将主机监控指标和Prometheus指标进行本地文件持久化,实现了指标数据的可靠存储:

数据采集流程分层架构图

  • 定时抓取主机和应用指标数据。
  • 文本格式落盘到本地文件系统。
  • 自动轮转机制,支持单文件大小和文件个数配置,保留最近固定格式的文件,自动删除过期文件,避免磁盘空间被历史数据占满。

文件采集异步消费机制
在持久化指标数据后,如何高效、可靠地将数据发送到服务端是下一个关键问题。传统方案面临的挑战包括:

  • 发送阻塞采集:如果发送线程与采集线程耦合,网络慢会拖慢采集速度。
  • 顺序性保证:指标数据通常有时间顺序要求,需要确保按采集时间顺序发送。
  • 断点续传:网络恢复后,需要从断开位置继续发送,不能重复或遗漏。

LoongCollector采用了文件采集的方式来异步消费持久化的指标数据,关键技术点如下:

  • Checkpoint机制:LoongCollector维护了细粒度的checkpoint,记录每个文件的读取位置,这确保了即使在文件读取过程中进程崩溃或断电,重启后也能从断开位置继续读取,不会丢失数据。
  • 文件顺序保证:通过文件轮转顺序,确保按采集时间顺序发送数据:
    • 优先处理时间早的文件
    • 同一时间段的文件按序号递增处理
    • 支持使用原始数据中的时间,避免时间戳乱序导致的数据可视化问题

智能反压与流量控制
在弱网环境下,如果不加控制地读取和发送数据,会导致:

  • 内存占用激增:读取速度远大于发送速度,数据堆积在内存中。
  • 发送队列溢出:队列满后数据被丢弃或进程崩溃。
  • 带宽占满:采集流量占满带宽,影响业务正常通信。

LoongCollector实现了多层次的智能反压机制

发送并发度自适应:借鉴TCP拥塞控制算法,LoongCollector根据网络状态动态调整发送并发度,这种自适应机制确保了:

  • 快速响应:网络正常时充分利用带宽,快速发送数据。
  • 快速收敛:网络异常时迅速降低发送频率,避免无效重试。
  • 自动恢复:网络恢复后自动增加并发,无需人工干预。

发送并发度自适应变化折线图

  • 队列反压:当发送队列积压达到阈值时,LoongCollector会暂停文件读取,这避免了内存无限制增长,确保系统在长时间弱网环境下也能稳定运行。
  • 流量限速:LoongCollector支持配置最大发送速率,避免采集流量影响业务。例如在ilogtail_config.json中配置:
{
  "max_bytes_per_sec": 1048576  # 限制最大发送速率为 10MB/s
}

LoongCollector终端部署最佳实践

这里以主机监控+一个应用的Prometheus采集为例,展示在边缘设备上的配置实践。

LoongCollector启动参数建议

/usr/local/ilogtail目录下修改ilogtail_config.json

a. 关闭丢弃旧数据discard_old_data
b. 调大与服务端断开连接重启的间隔config_server_lost_connection_timeout,建议取604800秒,7天。
c. 调大读取阻塞重启的间隔force_quit_read_timeout,建议取604800秒,7天。
d. 限制最大发送速率max_bytes_per_sec。主机监控+一个Java应用的流量约为0.88KB/s,所以建议取1MB/s,避免异常使用流量。
e. working_ip,在移动终端场景,IP会不断变化,在机器上建议给固定IP。

ilogtail_config.json配置示例:

{
  "discard_old_data": false,
  "config_server_lost_connection_timeout": 604800,
  "force_quit_read_timeout": 604800,
  "max_bytes_per_sec": 1048576,
  "cpu_usage_limit": 0.4,
  "mem_usage_limit": 384,
  "working_ip": "192.168.0.1"
}

采集配置

本地配置-主机监控采集配置
/etc/ilogtail/config/local目录下创建例如input_host_monitor.yaml文件,将主机指标首先采集到本地文件路径下,例如/usr/local/ilogtail/metrics/host.log

enable: true
inputs:
  - Type: input_host_monitor
    Interval: 15
flushers:
  - Type: flusher_file
    MaxFileSize: 104857600
    MaxFiles: 10
    FilePath: /usr/local/ilogtail/metrics/host.log

本地配置-自定义指标采集配置
/etc/ilogtail/config/local目录下创建例如input_prometheus.yaml文件,将Prometheus指标首先采集到本地文件路径下,例如/usr/local/ilogtail/metrics/metric.log

input_prometheus.yaml配置示例:

enable: true
inputs:
  - Type: input_prometheus
    ScrapeConfig:
      job_name: node
      host_only_mode: true
      scrape_interval: 15s
      scrape_timeout: 10s
      static_configs:
        - targets: ["localhost:12345"]
flushers:
  - Type: flusher_file
    MaxFileSize: 524288000
    MaxFiles: 10
    FilePath: /usr/local/ilogtail/metrics/metric.log

服务端管控配置-文件采集配置
最后,需要配置一个服务端下发的Pipeline,用于读取并发送本地持久化的指标文件。

{
    "aggregators": [],
    "global": {},
    "logSample": "",
    "inputs": [
        {
            "Type": "input_file",
            "FilePaths": [
                "/usr/local/ilogtail/metrics/*.log"
            ],
            "MaxDirSearchDepth": 0,
            "FileEncoding": "utf8",
            "EnableContainerDiscovery": false
        }
    ],
    "processors": [
        {
            "Type": "processor_parse_json_native",
            "SourceKey": "content",
            "KeepingSourceWhenParseFail": true
        }
    ]
}

注意事项

  1. 处理插件不要使用拓展插件,因为拓展插件会拉起Golang模块,导致内存占用升高。
  2. 移动终端场景,IP会不断变化,机器组建议使用标识型机器组,而非依赖IP的机器组,这对于管理动态 网络 环境下的设备至关重要。

LoongCollector资源监控测试报告

在实际的边缘模拟场景中(主机监控+一个Java应用Prometheus采集),LoongCollector的资源消耗表现如下:

CPU:平均0.02核,峰值0.028核
CPU使用率监控折线图

内存:平均31.5MB,峰值35MB
内存使用率监控折线图

网络

  • 压缩前:平均12.99KB/s,峰值13.13KB/s
  • 实际发送:平均1.07KB/s,峰值1.10KB/s(压缩效果显著)
    网络发送流量监控折线图

磁盘:平均6.07KB/s,峰值13.03KB/s
磁盘写入流量监控折线图

总结与展望

边缘场景的可观测数据采集,是一个长期被低估的技术挑战。网络的不稳定性、电源的不可靠性、数据一致性的复杂性,让传统的采集方案在边缘环境下频繁失效。LoongCollector通过“数据持久化 + 异步发送 + 智能重试”的创新架构,系统性地解决了这些问题:

  • 保证了可观测数据可靠交付
    • 本地持久化保证断网不丢数据
    • 异步发送机制实现采集与发送解耦
    • 智能重试和反压确保网络恢复后数据完整上传
  • 有效地进行了流量控制
    • 高效压缩减少传输数据量
    • 智能流量控制避免带宽占满,影响业务

但是,LoongCollector的采集方案还有更多的优化空间:

  1. 配置简化:当前的持久化采集方案需要配置两个Pipeline(采集Pipeline + 文件读取Pipeline),虽然灵活但增加了用户的理解和配置成本。LoongCollector正在进行流水线优化,支持单流水线内部持久化能力,方便用户配置。
  2. 安全增强:终端设备对于STS鉴权是强需求,LoongCollector正在适配阿里云STS动态鉴权,支持临时凭证自动刷新,避免终端AccessKey泄露风险。
  3. 极致压缩:在流量成本敏感的场景,每一个百分点的压缩率提升都意味着显著的成本节省,LoongCollector也正在探索更加极致的压缩策略,进一步降低网络流量。

随着边缘计算的普及,可靠、轻量、智能的数据采集方案将成为基础设施的关键一环。希望本文分享的LoongCollector实践,能为面临类似挑战的开发者提供有价值的参考。更多关于系统稳定性与性能优化的讨论,欢迎访问 云栈社区




上一篇:Claude Code Antigravity Skill更新解析:文件夹即技能的新一代AI能力扩展架构
下一篇:Linux面试争议:28K候选人写不出统计Nginx日志Top10 IP命令
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-26 18:42 , Processed in 0.410120 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表