logagent是部署在每台服务器上的一个deamon进程,起着日志数据的传输通道。对外提供http服务拉取日志,结构如下:
1.长链接 vs 短链接 http1.1默认支持长链接,避免重复建立连接带来的性能消耗。但长链接会占用系统资源,在大量请求时存在隐患,故选择短链接方式,即关闭http中的keep-alive
2.请求规范 http://127.0.0.1:8080/get?file=/home/admin/tomcat/logs/catalina.log&user=test&pwd=123456 其中, get:指明是获取日志数据的请求 file:日志文件的全路径,支持通配符*指定某目录下所有的日志文件 user:请求用户 pwd:请求用户的授权密钥,md5加密3.稳定性 logagent是业务部署在一起的,考虑稳定性做如下限制
拉取日志的速度赶不上打日志速度时,须提高限制大小或并发度 如果logagent意外down掉,支持恢复后从上次位点继续获取数据
4.性能方案 因为agnt是java编写的,主要考虑满负荷运行下进程gc对宿主业务系统带来的各指标影响,具体以测试为准
5.安全策略
6.日志模块设计
普通的日志文件是一条条的纪录,以换行符进行分隔,在进行截取时应获取一条完整的日志,即 当前位点+ 单次最大支持传递量= 换行符,按正常截取 当前位点 + 单次最大支持传递量!= 换行符,往前找最近一个换行符截取 当前位点 + 单次最大支持传递量> 文件end,直接截取到文件end 扩展考虑支持用户指定分隔符进行切割
按用户存储文件的位点信息,一个文件可以支持多个用户同时拉取数据,即该文件会分别保留这些用户的位点信息,保留路径由logagent默认指定,采用拉取成功后异步更新的策略
支持当日志文件发生滚动时,可以定位到未拉取完的旧文件。保留文件的句柄(inode),在每次拉取数据时获取当前文件大小,直到该句柄文件内容被拉取完成
7.运维支持
附件focus.zip为提供的logagent源码,供参考~ |
|