介绍
jef-log-tail是一款基于netty实现的日志采集工具,支持指定目录、指定文件、指定后缀的动态持续日志采集,日常使用场景如:集群部署后将多台主机的日志集中存放到一台日志服务器上,或者将日志统一输出到数据库、redis、kafka、es等存储组件上供后续分析查看。
优缺点
jef-log-tail是一款轻量级的日志采集工具,使用简单,对比现有的比较成熟的FileBeat有如下优点:
①、配置文件内容简单,学习成本低
②、支持自定义输出环境,目前支持本地文件、mysql、oracle、redis、Kafka、MQ
③、支持自定义文件拆分规则,比如收集到的文件每100M为一个新文件。
④、由于底层采用java实现,目前绝大部分主机都有java环境,所以不需要额外安装其他环境,启动方式简单使用java -jar即可运行。
⑤、提供agent的方式与java程序紧密结合实现日志实时传输
⑥、保存到数据库时支持自定义插入语句:insert into xxx values(?);
缺点:
①、目前仅笔者自己所在的团队有使用,原因是笔者所在的团队维护一个比较老的项目,项目暂时没有接入公司日志中心,所以日志收集目前依赖jef-log-tail,由于目前使用者少,一些问题可能并未暴露,需日后逐渐完善。
②、jef-log-tail使用长轮询的方式监听文件目录可能会产生一些性能损耗。但是目前使用下来没有发现问题。
Jef-log-tail使用
①、下载代码后使用maven打包log-tail-client和log-tail-server.
②、将log-tail-client做为采集端部署到日志产生源。
③、将log-tail-server做为服务器端部署到任意一台机器。
④、修改配置文件。见下文。
⑤、启动服务
nohup java -Djef.properties=file:///home/acctuser/tools/logTail/config/server.properties -jar -Dorg.slf4j.simpleLogger.defaultLogLevel=debug ./LogTail-server-1.0-SNAPSHOT-start.jar > ./log/logTail.log 2>&1 &
客户端配置如下:
netty.server.ip = 127.0.0.1
# netty.server.ip = fe80::f816:3eff:fe17:bb2e/64
netty.server.port = 9999
# 重连次数
netty.max.retry.count=13
# 连接超时时间
netty.connect.timeout=60
# 心跳间隔时间 单位 秒
netty.heart.interval = 10
# 重连最大间隔时间
netty.connect.retry.intervalue = 7200
# 监听文件的后缀
log.listen.suffix=.sql
# 监听文件夹
log.listen.filepath=D:\test\test1
# 轮询间隔时间 单位s
log.listen.intervalue.time=5
log.file.chatset=UTF-8
# 是否添加ip地址
log.add.address = true
服务端配置如下:
# 服务端口
server.port = 9999
# 心跳超时断开时间,该配置需要大于客户端的心跳间隔时间
server.heart.read.time=20
# 文件全路径
log.filepath = D:\test\all\20221005.txt
# 文件分割原则 单位 M
log.split.size = 10
# 存储方案,目前支持:redis、simpledb、localfile、kafka
save.plan = redis
# 数据库配置,可自定义表,并指定插入语句
db.username=czMysql
db.password=123456
db.url=jdbc:mysql://127.0.0.1/postgirl?
db.driver=com.mysql.jdbc.Driver
# db.insert.sql=insert into test_table(conent) values(?)
# reids配置
redis.host=127.0.0.1
redis.port= 6379
redis.password= czRedis
redis.maxactive= 100
redis.maxwait= 10000
redis.maxidle=40
redis.timeout= 1000
使用效果:
1、将输出指定为本地文件:
2、将输出指定为redis
3、将输出指定为simpledb.
mysql:
-- 建表语句如下:
CREATE TABLE JEF_LOG_TAIL(
so_nbr INT NOT NULL AUTO_INCREMENT COMMENT '流水号',
content TEXT COMMENT '内容',
PRIMARY KEY (so_nbr)
) COMMENT = '日志存储表';
oracle:
-- 建表语句如下:
CREATE TABLE JEF_LOG_TAIL(
so_nbr INT,
content CLOB
);
COMMENT ON TABLE JEF_LOG_TAIL IS '日志存储表';
COMMENT ON COLUMN JEF_LOG_TAIL.so_nbr IS '流水号:';
COMMENT ON COLUMN JEF_LOG_TAIL.content IS '内容:';
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第31天,点击查看活动详情