拓冰建站拓冰建站
首页 / 资讯中心 / 正文

RPC框架的日志设计核心点

标题RPC框架的日志设计核心点概述服务的日志主要用来快速排查各类问题包括框架启动失败、服务运行异常、业务逻辑失败等等因此日志的设计目标就是能否快速解决业务问题同时也要有成本、性能和易用性的考量.主要打法就是框架日志清晰齐全、框架日志固定目录文件、访问日志灵活可控制解决主调、耗时等类型问题、远程日志索引、排序、trace关联、离线日志等从日志处于的位置分为本地日志和远程日志本地日志框架日志日志路径日志根路径/data/app/taf/app_log/app/{app}/app/{servname}/框架日志/data/app/taf/app_log/app/{app}/app/{servname}/framework/{servname}.log设计在框架启动的时候会默认创建框架日志的配置logger和appender同时支持logback和log4j2异步分日志和文件大小滚动固定路径和文件的必要性就在于方便框架类问题的排查.初始化业务日志配置的路径: 框架在服务启动的时候会注入一些业务配置需要的环境变量比如loghome/servname等方便日志配置中引用.框架日志打印规范一些较早执行的逻辑日志需要用replay重放的方式来打印(spirngboot的日志加载逻辑)打印关键日志比如启动时候打印各个步骤的日志配置初始化、tafclient初始化、配置加载、端口监听、tafnode keepalive等等、网络调用异常明细ip-port、耗时、异常类型、服务、接口等等、过载日志等等不要影响服务性能比如过载时候的日志如果过多打印日志反而会让服务性能受到影响可以通过采样打印日志指标上报等观测过载情况; 要用异步可丢弃的日志打印方式框架日志不要多业务默认开启info级别日志即可一天的框架日志量在几百k左右这样能够定位框架类的问题同时不影响性能以及成本.访问日志(accesslog)accesslog在很多框架中都存在的概念比如nginx、dubbo作用是用来分析一些访问的数据比如查询主调信息、请求异常、请求高耗时等问题问题打印逻辑特殊请求全采样框架异常错误码、超过3s的高耗时请求正常请求是万分之五的采样率避免高并发服务的日志爆炸问题参数可控制采样率可以通过tafadmin的指令下发:taf.setAccessLogRatio 0.1(第二个参数为采样率通过环境变量控制ACCESSLOG_RATIO高耗时可以通过代码设置ACCESS_LOG_SLOW_REQ日志打印格式traceId|requestId|主调服务名|主调方ip|接口名|框架状态码|耗时|qps远程日志方案选型方案一进程内上报日志信息到日志服务器方案二通过单独的采集agent采集日志到日志服务器优劣方案一可控制性更强方案二的解耦会更好.我们采用方案一方案一的已知好处可以做到默认日志全部采集开发基本无感知可以上报时间戳给服务器这样服务器可以按照时间去做排序更符合开发的顺序日志的习惯可以上报trace信息给服务器比如traceid和采样信息这样服务器可以打通trace平台去跳转trace明细或者搜索采样trace的日志实现实现一个远程日志的appdener比如叫做TafLogAppender,appender中会将日志丢到内存队列中然后一个线程轮询去获取并上报到日志服务器appender中需要注意处理循环日志的问题就是上报逻辑不断产生新的日志重新进入到appender当中这里是通过日志特殊标签的方式去区分从而不上报.在框架启动的时候去轮询所有的logger然后给logger挂一个taflogappender这样就可以自动上报日志当然appender的配置也可以在日志配置文件中去配置做到个性化配置.离线日志日志服务器除了提供在线的日志搜索功能外还可以提供离线日志查询比如hive表作用一节约成本并且可以查询一个月内的日志作用二可以清洗日志做一些数据统计分析日志告警通过消息队列等消费实时日志去做一些日志告警功能感知系统问题.
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门