为何单个文件不支持上报至多个 topic?
LogListener 采集程序的策略是,单个文件,只能上传至一个 topic。
例如,您有 topicA 和 topicB 两个文件,并对这两个文件进行如下设置。
设置 topicA 的采集路径为:
/data/log/**/*.log
设置 topicB 的采集路径为:
/data/log/test/**/*.log
、/data/log/**/test*.log
、/data/log/**/*.log
,或者其他与 topicA 采集路径类似的路径。此场景的配置,虽对应到两条采集路径交集的文件,但只会将数据上传至其中一个 topic 中。因此,我们建议针对不同的日志主题,应承载不同业务类型的日志,并在设置采集配置路径时,尽量精确配置信息。如果仍需要将某一个文件上传至不同的 topic,可使用软链接实现。对同一个采集目标创建不同的软链接,不同的 topic 分别采集不同的软链接路径/文件。
如何进行采集路径的设置?
目前采集路径的配置为:路径前缀+ “/**/”+通配文件名的形式。例如:
/data/log
+ /**/
+ *.log
==> /data/log/**/*.log
。由于设置通配采集路径时,需要将采集路径(前缀部分)设置的尽量准确,从而使采集器能够更有效率地提供服务。
注意:
如果采集路径前缀部分设置不准确,可能会导致采集路径匹配到的路径数量巨大,从而造成采集器进入异常状态,无法工作。
例如,采集路径设置为://**/*.log,其前缀部分为"/",这种情况下采集程序会扫描整个根目录,导致采集程序无法工作。
推荐的日志轮转方案是什么?
对于日志的轮转,推荐方式为轮转后的文件名,不要被采集通配路径覆盖到。
例如,配置的采集路径是
/var/log/xxxx/**/*.log
,需要采集的日志是 test.log
。当 test.log
轮转成 test.2021-07-13.4.log
时,LogListener 能够识别 test.2021-07-13.4.log
是 test.log
的轮转文件,对它仍按照 test.log
来标记。因此,LogListener 保存的位点文件中,没有 test.2021-07-13.4.log
这个文件的采集记录。而当 LogListener 重启后,LogListener 会按照
/var/log/xxxx/**/*.log
去扫描文件,并发现 test.2021-07-13.4.log
文件符合匹配规则,且没有采集记录,是一个新文件,然后重新采集。所以建议,采集通配路径不要匹配到轮转文件,避免造成重启后重新采集轮转文件。
我们推荐的日志轮转方案是,如果您需要采集
test.log
,建议将轮转后的文件名命名为 test.log.2021-07-13.xxx
,可以有效不被 *.log
覆盖到。LogListener 升级说明?
在 LogListener 迭代过程中,采集路径的接口参数做过变更,比较老的版本(ver< 2.2.8)设置的采集路径,在新版本中不再被支持。
因此,如需对存量老版本(ver < 2.2.8)进行升级,在采集程序升级之后,需要在控制台重新以通配路径的方式,再次设置采集路径。
LogListener 采集配置如何使用正则采集模式?
在控制台设置采集配置时,如果选择正则相关的采集模式,控制台虽提供正则 kv 提取小工具,但此工具暂不提供对中文内容的正则自动生成功能。如需对中文文本进行正则提取,可以自行编写正则表达式,在控制台进行验证,或者使用其他第三方工具进行验证。
初次使用 LogListener 采集器接入时,发现无日志上传,怎么办?
可能是采集器配置不正确导致,常见情况如下:
配置的服务端域名不匹配,采集器拉取不到当前地域的采集配置,无采集业务进行。
采集器加入了 IP 机器组,但是采集器中又配置了标签 label 信息,导致在当前地域拉取不到采集配置,无采集业务进行。
采集器中配置的 secret ID/KEY 不正确,或者权限不足,导致无法上传日志。
环境问题(如 VPC 子网内,外网未开启),如果配置了跨地域上传,是不生效的,采集器实际上还是与本地域服务端进行通信。
通常这种情况下,可以登录采集器所在机器,进入采集器安装目录,并执行
./bin/check
命令,检查如下内容:域名是否正确。
心跳上报是否正常。
采集配置是否正确拉取。
机器组使用混用,导致采集不采集,怎么办?
目前机器组分为两类,其使用方法相互独立:
IP 机器组,机器 IP 需要在控制台上手动加入机器组,对应机器上 loglistener.conf 的group_label 需为空。
标签机器组,控制台设置机器组标签,对应机器上 loglistener.conf的group_label 需要设置为相同的标签。
如上两种用法不兼容,如果混合使用,采集机器将拉取不到正确的采集配置,造成不采集的现象。
LogListener 的采集策略是什么?
一堆文件排队进行 LogListener 采集时,队首文件先采集,且要求其在某个时刻读取到文件尾才会让出队首位置。即:不是每个文件在单位时间内,都能均等的享受采集资源。
当单个文件始终写入大于采集速度,且采集速度慢导致始终消费不到文件最新位置时,会出现某个文件长时间或一直霸占采集资源,从而导致其他的文件无法进入采集流程。
Topic 采集阻塞严重怎么办?
在某段时间内,如果单个文件的产生速度大于采集速度,LogListener 会持续一直在采集这一个文件,陷入了对其他文件的采集阻塞场景。
过滤器的规则是什么?
过滤器的规则是匹配后采集,而不是匹配后丢弃。对于未能匹配的日志,LogListener 将不会进行采集。
如何使用非 root 权限启动 LogListener?
如何对 LogListener 的进程进行绑核?
使用 taskset 工具进行绑核,
taskset -cp ${cpu number} ${pid>}
。如何处理 LogListener 占用内存过高,控制资源的使用?
建议升级到最新 LogListener 版本 ,并设置
memory_tight_mode = true
。使用 CGroup 限制 CPU 和内存使用。
LogListener 是否支持软链接方式采集?
LogListener 低于2.3.0版本不支持监听软连接方式的日志文件和 NFS、CIFS 等共享文件目录上的日志文件,以上版本均可支持。
LogListener 可以向多个日志主题上传数据吗?
LogListener 可以为同地域的多个日志主题采集数据,但不支持为异地多个日志主题采集。
同一个日志文件只支持采集到一个主题。
LogListener 初始化的时候是否可以自动加入机器组?
LogListener 日志上传策略是什么?
缓存的日志量超过4M。
缓存的日志条数超过10000条。
读到文件末尾。
LogListener 支持的最大性能是多少?
单行全文日志最大处理能力为115MB/s。
多行全文日志最大处理能力为40MB/s。
JSON 格式日志最大处理能力为25MB/s。
CSV 格式日志最大处理能力为50MB/s。
完全正则格式日志最大处理能力为18MB/s (和正则的复杂度有关)。
服务器更换 IP 地址后,LogListener 应该如何适配?
若服务器通过机器标识绑定机器组,用户无需变更 LogListener 配置。若服务器 IP 需要频繁变更,建议用户使用 机器标识 配置机器组。
若服务器通过 IP 地址绑定机器组,用户需要完成以下配置变更:
a. 修改配置文件中 group_ip 选项,填入变更后的 IP 地址,例如:
sed -i '' "s/group_ip *=.*/group_ip = ${group_ip}/" etc/loglistener.conf
b. 重启 LogListener。
/etc/init.d/loglistenerd restart