【最佳实践】主机场景下如何使用ilogtail采集超大规模文件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 目标读者数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。使用场景客户的某些场景下,业务拆分的比较细,每个业务会定时输出一个日志文件(比如每小时输出一个文件),那么在一台机器上,可能会产生大量的日志文件。由于某些原因,用户不想在业务服务器上安装采集端,因此采用比...

目标读者

数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。

使用场景

客户的某些场景下,业务拆分的比较细,每个业务会定时输出一个日志文件(比如每小时输出一个文件),那么在一台机器上,可能会产生大量的日志文件。由于某些原因,用户不想在业务服务器上安装采集端,因此采用比如Rsync的方式把日志文件同步到一台日志服务器上,那么这台日志服务器上的文件数量会非常大。Logtail由于采用的是注册事件监听以及定期轮询机制进行文件发现,对于采集文件/文件夹的数量有一定的限制,参考文档

相关概念

Logtail

Logtail是日志服务提供的日志采集Agent,用于采集阿里云ECS、自建IDC、其他云厂商等服务器上的日志。本文介绍Logtail的功能、优势、使用限制及配置流程等信息。

方案架构

单个Logtail实例的对于采集文件/文件夹的数量有一定的限制,参考文档, 内存2G的情况下

  • 最大监控目录总数:10W(目录不包含Logtail采集配置中指定的目录黑名单)。

  • 最大监控目录和文件总数:100W(目录不包含Logtail采集配置中指定的目录黑名单,文件包含未被Logtail采集配置匹配的文件)。

  • 单个采集配置监控目录和文件总数:10W(目录不包含Logtail采集配置中指定的目录黑名单,文件包含未被Logtail采集配置匹配的文件)。

  • 单个目录中被监控的子目录和文件总数:10W(目录包含Logtail采集配置中指定的目录黑名单,文件包含未被Logtail采集配置匹配的文件)。

因此考虑使用多实例的方式,来进行能力拓展,具体架构如下:image.png

  • 将要采集的文件划分在不同的文件夹下

  • 在一台服务器上,启动多个logtail实例

  • 通过自定义机器组标识的方式,区分多个实例

  • 针对不同的实例,配置不同的采集配置,分别采集不同的文件夹(不通采集配置之间要采集的文件路径不要有重叠)

方案实施

下面我们模拟一个场景:

  • 一台机器上共有40w个文件需要采集

前提条件

  • 机器拥有足够的资源配置

    • 内存2G可以支持10w个文件采集,40w个文件就需要启动4个Logtail实例,一共需要8G内存(业务进程所需的资源不包含在内)

    • 参考文档,除去文件数量的限制,CPU和内存还需要根据采集速率进行一定的预估,比如每个实例的采集速率都达到了40MB/s,那么4个logtail实例就一共需要16G内存+16核CPU

    • 机器的open files的设置要足够大,查看命令是: ulimit -a

  • 开通阿里云日志服务

操作步骤

1. 在日志服务器上划分好文件夹,满足logtail采集限制

由于Logtail的采集配置可以通过文件路径来划定采集单个采集配置的采集范围,因此,在日志文件生成的时候,需要有一定的规划。本案例中,40w个文件,以最简单的方式,划分了4个文件夹。

/root/test_log/
├── dir1
│   ├── 1.log
│   ├── ...
│   └── 100000.log
├── dir2
│   ├── 100001.log
│   ├── ...
│   └── 200000.log
├── dir3
│   ├── 200001.log
│   ├── ...
│   └── 300000.log
└── dir4
    ├── 300001.log
│   ├── ...
    └── 400000.log

2. 启动多个logtail实例

ilogtail正常安装部署命令分为三部分(下面的安装命令以中国香港地域为例,用户操作的时候,需要替换成自己的地域)

// 1. 下载安装脚本
wget http://logtail-release-cn-hongkong.oss-cn-hongkong-internal.aliyuncs.com/linux64/logtail.sh -O logtail.sh
// 2. 给脚本授权
chmod 755 logtail.sh
// 3. 执行安装命令
./logtail.sh install cn-hongkong

为了启动多个logtail实例,其中第三步的安装命令需要添加如下参数

./logtail.sh install cn-hongkong -s ${自定义后缀名}

为了启动4个Logtail实例,我们将自定义后缀名分别指定为1,2,3,4

./logtail.sh install cn-hongkong -s 1
./logtail.sh install cn-hongkong -s 2
./logtail.sh install cn-hongkong -s 3
./logtail.sh install cn-hongkong -s 4

然后查看进程我们会发现有8个进程启动起来(每个Logtail实例包含一个守护进程和一个主进程)

# ps -ef | grep logtail
root     1935015       1  0 Feb13 ?        00:00:00 /usr/local/ilogtail1/ilogtail
root     1935017 1935015  0 Feb13 ?        00:16:23 /usr/local/ilogtail1/ilogtail
root     1935823       1  0 Feb13 ?        00:00:00 /usr/local/ilogtail2/ilogtail
root     1935825 1935823  0 Feb13 ?        00:16:15 /usr/local/ilogtail2/ilogtail
root     1936165       1  0 Feb13 ?        00:00:00 /usr/local/ilogtail3/ilogtail
root     1936166 1936165  0 Feb13 ?        00:16:14 /usr/local/ilogtail3/ilogtail
root     2007431       1  0 20:32 ?        00:00:00 /usr/local/ilogtail4/ilogtail
root     2007432 2007431  1 20:32 ?        00:00:03 /usr/local/ilogtail4/ilogtail

每个实例的运行目录分别在/usr/local/ilogtail1,/usr/local/ilogtail2,/usr/local/ilogtail3,/usr/local/ilogtail4目录下

Logtail的相关的目录也分别对应了4个实例:

控制命令目录(对应原来的/etc/init.d/ilogtaild):

# ll /etc/init.d/
-rwxr-xr-x  1 root root  4564 Feb 13 20:32 ilogtaild1
-rwxr-xr-x  1 root root  4564 Feb 13 20:32 ilogtaild2
-rwxr-xr-x  1 root root  4564 Feb 13 20:32 ilogtaild3
-rwxr-xr-x  1 root root  4564 Feb 14 20:32 ilogtaild4

标识文件目录(对应原来的/etc/logtail):

# ll /etc/
drwxr-xr-x   8 root root     4096 Feb 13 20:32 ilogtail1
drwxr-xr-x   8 root root     4096 Feb 13 20:32 ilogtail2
drwxr-xr-x   8 root root     4096 Feb 13 20:32 ilogtail3
drwxr-xr-x   8 root root     4096 Feb 14 20:32 ilogtail4

记录文件目录(对应原来的/tmp/logtail_check_point):

# ll /tmp/
-rw-r--r-- 1 root root 1494166 Feb 14 20:47 logtail_check_point1
-rw-r--r-- 1 root root 1484264 Feb 14 20:48 logtail_check_point2
-rw-r--r-- 1 root root 1484264 Feb 14 20:48 logtail_check_point3
-rw-r--r-- 1 root root 1484264 Feb 14 20:47 logtail_check_point4

到这里,4个Logtail实例就启动好了

3. 对每个logtail实例配置自定义机器组标识以及创建机器组

正常情况下,主机场景,Logtail通常使用IP型机器组来进行统一的配置管理。但是现在的场景下,IP型机器组显然无法使用,因此需要使用标识型机器组

为Logtail1创建自定义标识:taiye_1

# touch /etc/ilogtail1/user_defined_id
# echo "taiye_1" >> /etc/ilogtail1/user_defined_id
# cat /etc/ilogtail1/user_defined_id
taiye_1

为Logtail2,Logtail3,Logtail4也分别创建自定义标识taiye_2, taiye_3, taiye_4创建好之后,我们在SLS的页面上,分别创建4个机器组image.png

创建好之后,分别查看每个机器组的状态,可以看到机器组的心跳已经正常了image.png

4. 对每个实例配置采集配置

image.png如图所示,采集配置test_log1,只使用taiye_1的机器组(里面只包含了Logtail1的实例),采集的日志路径里,也只配置了/root/test_log/dir1的路径。以此类比,创建采集配置test_log2,test_log3,test_log4。

5. 验证配置效果

通过查看每个Logtail实例下的user_log_config.json文件,可以确认采集配置被正确下发了。image.png

通过日志查询,可以看到每个实例下的日志都被采集上来了。image.png

注意事项

  1. 采用本方案启动多个Logtail实例,不能使用IP型机器组,否则相同的采集配置会下发到每个实例中,浪费资源。

  2. 如果该主机之前已经有过Logtail实例,且为IP型机器组,那么需要把原来的IP型机器组删除,确保没有之前的采集配置遗留。

参考

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
|
消息中间件 存储 数据采集
iLogtail社区版使用入门 - 主机环境采集业务日志到SLS
本文将会详细介绍如何使用社区版iLogtail,并结合SLS云服务快速构建出一套高可用、高性能的日志采集分析系统
1273 0
|
9月前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
6月前
|
存储 Prometheus 监控
Prometheus 存储方案与优化
【8月更文第29天】Prometheus 是一个流行的开源监控系统,它使用时间序列数据库来存储监控数据。Prometheus 的时间序列数据库是基于本地文件系统的,这种设计提供了高吞吐量的读写能力,但同时也带来了存储方面的挑战。本文将详细介绍 Prometheus 存储的工作原理,并提出一些优化策略以减少磁盘占用。
437 0
|
数据采集 Java 大数据
大数据数据采集的数据采集(收集/聚合)的Logstash之强大的插件功能
在大数据领域中,Logstash是一款非常流行的数据采集工具。它具有丰富的插件功能,可以完成各种不同数据来源的数据采集任务。本文将介绍Logstash的插件功能,并为大家介绍几款强大的插件。
224 1
|
数据采集 监控 前端开发
LS支持持续性能数据采集与监控
小王所在的公司最近在做降本增效,要求上半年每个人的微服务接口性能提升至少30%。小王思虑很久也没想到优化点,于是开始向ChatGPT寻求帮助。
209 0
LS支持持续性能数据采集与监控
|
数据采集 监控 前端开发
新功能:SLS支持持续性能数据采集与监控
降本增效的背景下,提升资源利用率变得更加重要,SLS 新功能持续性能数据采集与监控助力开发者突破性能瓶颈,定位系统顽疾。
19959 0
新功能:SLS支持持续性能数据采集与监控
|
Prometheus 监控 Kubernetes
《云原生网络数据面可观测性最佳实践》——三、容器网络常见观测工具及特点——2.Net Exporter技术原理
《云原生网络数据面可观测性最佳实践》——三、容器网络常见观测工具及特点——2.Net Exporter技术原理
|
监控 网络协议 Cloud Native
《云原生网络数据面可观测性最佳实践》——三、容器网络常见观测工具及特点——1.常见网络排查工具
《云原生网络数据面可观测性最佳实践》——三、容器网络常见观测工具及特点——1.常见网络排查工具
|
9月前
|
存储 分布式计算 监控
日志数据采集与大数据存储方案实践
互联网及企业客户业务系统有大量的埋点日志数据实时生成,这些日志数据往往需要长期保存并有离线计算或者实时计算的需求。本文为您介绍日志数据采集与大数据存储实践方案。
日志数据采集与大数据存储方案实践