日志agent解决方案

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

 其中,

  •  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源码,供参考~

 

猜你喜欢

转载自luoshi0801.iteye.com/blog/2252452
今日推荐