断网、断电,不断数据——LoongCollector 极限边缘场景可靠采集方案
作者:林润骑(太业) 在云计算和物联网快速发展的今天,越来越多的业务场景将计算和数据采集能力推向了边缘侧。从智能制造的产线设备、新能源汽车的车载系统,到遍布各地的零售终端和智能家居设备,这些终端设备产生的可观测数据(日志、指标、追踪)对于业务运营、故障诊断和用户体验优化至关重要。 然而,终端设备的环境极其复杂: 在这种极限条件下的可观测数据采集面临极大的挑战。比如车辆在偏远地区行驶时,长时间处于弱网或断网状态,网络信号时断时续,车辆熄火断电时,内存中缓存的监控数据全部丢失;在隧道、地下停车场等场景下,数据采集中断,关键的故障诊断数据无法回传。 本文将详细介绍 LoongCollector 如何针对弱网、断电等边缘场景,提供完整的可靠采集解决方案。 终端设备运行环境的网络条件远比数据中心复杂: 比如车载终端设备在偏远地区运输途中,可能很长时间都处于弱网或断网状态,网络正常的状态很少;在车辆熄火或者维修的情况下,车载终端设备也会断电。 在弱网、断电等不稳定环境下,保证数据的可靠交付和一致性是最大的挑战: 终端设备的网络带宽通常受到严格限制: 在这样的环境下,如何高效压缩数据、智能控制发送速率、避免带宽被采集流量占满,成为必须解决的问题。 LoongCollector 是阿里云开源的高性能、高可靠可观测性数据采集器,在支撑阿里云内部千万级规模部署的同时,针对边缘场景进行了深度优化。 LoongCollector 提供了完整的可观测数据采集能力: 针对资源受限的终端设备,LoongCollector 进行了极致的性能优化: 这意味着在相同的硬件条件下,LoongCollector 可以支持更多的采集任务,或者在资源更受限的设备上稳定运行。 针对弱网、断电、断网等边缘场景,LoongCollector 采用了“数据持久化 + 异步发送 + 智能重试”的核心架构设计。 分离采集与发送:将数据采集和网络发送完全解耦,采集过程不受网络状态影响。 本地持久化:日志数据天然具备本地持久化的能力。此处主要指指标等无持久化能力的数据,此方案会将所有采集到的指标,先写入本地文件,确保断电、重启也不丢失。 异步消费:独立的发送线程从持久化文件中读取数据并发送,失败时自动重试。 智能反压:网络异常时,自动控制数据读取速度,避免内存占用过高。 传统的指标采集方案(如 Telegraf、Prometheus Pushgateway)通常将采集到的指标数据直接发送到服务端。这种架构在稳定网络环境下工作良好,但在边缘场景下存在致命缺陷: LoongCollector 创新性地将主机监控指标和 Prometheus 指标进行本地文件持久化,实现了指标数据的可靠存储: 在持久化指标数据后,如何高效、可靠地将数据发送到服务端是下一个关键问题。传统方案面临的挑战包括: LoongCollector 采用了文件采集的方式来异步消费持久化的指标数据,关键技术点如下: 文件顺序保证:通过文件轮转顺序,确保按采集时间顺序发送数据: 在弱网环境下,如果不加控制地读取和发送数据,会导致: LoongCollector 实现了多层次的智能反压机制: 发送并发度自适应:借鉴 TCP 拥塞控制算法,LoongCollector 根据网络状态动态调整发送并发度,这种自适应机制确保了: 这里以主机监控+一个应用的 Prometheus 采集为例。 在 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 在 /etc/ilogtail/config/local 目录下创建例如 input_host_monitor.yaml 文件,将主机指标首先采集到本地文件路径下,例如 /usr/local/ilogtail/metrics/host.log。 在 /etc/ilogtail/config/local 目录下创建例如 input_prometheus.yaml 文件,将主机指标首先采集到本地文件路径下,例如 /usr/local/ilogtail/metrics/metric.log。 input_prometheus.yaml a. 压缩前:平均 12.99KB/s,峰值 13.13KB/s b. 实际发送:平均 1.07KB/s,峰值 1.10KB/s 边缘场景的可观测数据采集,是一个长期被低估的技术挑战。网络的不稳定性、电源的不可靠性、数据一致性的复杂性,让传统的采集方案在边缘环境下频繁失效。LoongCollector 通过“数据持久化 + 异步发送 + 智能重试”的创新架构,系统性地解决了这些问题: 保证了可观测数据可靠交付 有效地进行了流量控制 但是,LoongCollector 的采集方案还有更多的优化空间:背景
终端设备可观测数据采集的三大挑战

挑战一:复杂的网络环境
挑战二:可观测数据可靠交付
挑战三:网络带宽限制
LoongCollector:为边缘场景优化的可靠采集方案
核心能力概览
统一的可观测数据采集
超低资源消耗


企业级稳定性保障
解决方案架构:数据持久化 + 异步发送 + 智能重试

指标数据落盘持久化

文件采集异步消费机制
智能反压与流量控制

{
"max_bytes_per_sec": 1048576 # 限制最大发送速率为 10MB/s
}LoongCollector 终端部署最佳实践
LoongCollector 启动参数建议
/usr/local/ilogtail 目录下修改 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
}采集配置
本地配置-主机监控采集配置
enable: true
inputs:
- Type: input_host_monitor
Interval: 15
flushers:
- Type: flusher_file
MaxFileSize: 104857600
MaxFiles: 10
FilePath: /usr/local/ilogtail/metrics/host.log本地配置-自定义指标采集配置
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服务端管控配置-文件采集配置
{
"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
}
]
}注意事项
LoongCollector 资源监控测试报告
CPU:平均 0.02 核,峰值 0.028 核

内存:平均 31.5MB,峰值 35MB

网络:平均 1.07KB/s,峰值 1.10KB/s

磁盘:平均 6.07KB/s,峰值 13.03KB/s

总结与展望