首页 > 其他 > 详细

日志agent解决方案

时间:2015-10-28 02:08:46      阅读:371      评论:0      收藏:0      [点我收藏+]

??????? logagent是部署在每台服务器上的一个deamon进程,起着日志数据的传输通道。对外提供http服务拉取日志,结构如下:
bubuko.com,布布扣
?其中,

  • ?filter:请求过滤器,负责访问源解析统计,权限认证等
  • container:包含了正在访问的文件句柄集合,当日志滚动文件名变更发生时可以防止错误定位
  • handler:获取日志数据的处理器,采用偏移量随机读取的方式
  • storer:保存用户成功获取的文件位点信息

?

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是业务部署在一起的,考虑稳定性做如下限制

  • ?一台线上实体机同时允许的单用户最大访问文件数100
  • 一台线上实体机同时允许的最大链接数200
  • ? 一台线上实体机允许单用户单次拉取日志的最大大小为20M

?? 拉取日志的速度赶不上打日志速度时,须提高限制大小或并发度

?? 如果logagent意外down掉,支持恢复后从上次位点继续获取数据

?

4.性能方案

??? 因为agnt是java编写的,主要考虑满负荷运行下进程gc对宿主业务系统带来的各指标影响,具体以测试为准

?

5.安全策略

  • 访问文件的权限
  • 请求中验证用户和授权密码
  • 连接agent的收集机器白名单授权

6.日志模块设计

  • 编码:统一采用utf-8
  • 内容截取

???? 普通的日志文件是一条条的纪录,以换行符进行分隔,在进行截取时应获取一条完整的日志,即

???? 当前位点+ 单次最大支持传递量= 换行符,按正常截取

???? 当前位点 + 单次最大支持传递量!= 换行符,往前找最近一个换行符截取

???? 当前位点 + 单次最大支持传递量> 文件end,直接截取到文件end

???? 扩展考虑支持用户指定分隔符进行切割

?

  • 位点存取

??????? 按用户存储文件的位点信息,一个文件可以支持多个用户同时拉取数据,即该文件会分别保留这些用户的位点信息,保留路径由logagent默认指定,采用拉取成功后异步更新的策略

?

  • 支持日志滚动

??????? 支持当日志文件发生滚动时,可以定位到未拉取完的旧文件。保留文件的句柄(inode),在每次拉取数据时获取当前文件大小,直到该句柄文件内容被拉取完成

?

7.运维支持

  • 权限:包括机器、文件、白名单
  • 提供获取某应用的所有ip地址等基础服务
  • 装机部署&远程控制?

?附件focus.zip为提供的logagent源码,供参考~

日志agent解决方案

原文:http://luoshi0801.iteye.com/blog/2252452

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!