文章目录
- 背景介绍
-
- 当前日志精简图
- 当前强平流程图
- 当前互斥模块流程图
- 整体需求
-
- 功能需求
- 质量需求
- 整体流程
-
- 日志流程
- 交互时序写入日志
-
- 写入日志文件
- 写入信息队列交互时序
- 查询交互时序的日志
-
- 查询日志从日志文件
- 从ES中查询日志
- 从margin-db中查询日志
- 日志统计和报警交互时间顺序
-
- 在业务代码内自定义metric推送到prometheus
- 通过elasticsearch_export从日志中收集插件metric
- 从日志中收集悟空监控系统metric
- 通过margin-validation从mysql中采集metric
- 数据结构
-
- 强平流程日志表(liq_flow_log)
- 强平要求日志表(liq_request_log)
- 强平步骤日志表(liq_step_log)
- 强平过程中可持续活动订单日志(lip_perp_order_log)
- 在强平过程中,永久仓位日志表(liq_perp_position_log)
- 强平过程中期权活动订单日志(liq_option_order_log)
- 期权仓位日志在强平过程中(liq_option_position_log)
- 强平过程中RPC调用日志表(liq_rpc_invoke_log)
- 强平过程中RPC被调用日志表(liq_rpc_invoked_log)
- 消息队列在强平过程中发送日志(liq_message_send_log)
- 消息队列在强平过程中接收日志(liq_message_receive_log)
- 强平核心法在强平过程中调用日志(liq_method_invoke_log)
- 强平流程统计表(liq_flow_stat)
- 强平请求统计表(liq_request_stat)
- 强平步骤统计表(liq_step_stat)
- 强平过程中永久活动订单丢失统计表(liq_perp_order_stat)
- 强平过程中永久位置丢失统计表(liq_perp_position_stat)
- 期权活动订单在强平过程中丢失统计表(liq_perp_order_stat)
- 期权头寸在强平过程中丢失统计表(liq_perp_position_stat)
- 强平过程中RPC调用统计表(liq_rpc_invoke_stat)
- 强平过程中RPC统计表被调用(liq_rpc_invoked_stat)
- 消息队列在强平过程中发送统计表(liq_message_send_stat)
- 消息队列在强平过程中接收统计表(liq_message_receive_stat)
- 强平核心法在强平过程中调用统计表(liq_method_invoke_stat)
- 强平过程中账户资金损失统计表(liq_account_stat)
- 非强平主流程日志(other_log)
- 模块功能
-
- 日志写入
-
- 强平流程执行前日志
- 强平流程执行后日志更新
- 强制执行前日志
- 执行强强强请求后日志更新
- 强化步骤执行前日志
- 执行强平步骤后,日志更新
- 写入强平过程中可持续活动订单日志
- 写入强平过程中的永久仓位日志
- 写入强平过程中期权活动订单日志
- 强平过程中期权仓位日志写入
- 强平过程中RPC写入调用日志
- 强平过程中RPC写入调用日志
- 消息队列在强平过程中发送日志
- 消息队列接收日志在强平过程中写入
- 强平核心法调用日志
- 在强平过程中,写入接管户资金池日志
- 日志查询
-
- 根据账户id查询有多少强平流程
- 根据强平过程id查询强平步骤
- 根据强平过程id和强平步骤id查询可持续活动订单列表
- 根据强平过程id和强平步骤id查询永久位置列表
- 根据强平过程id和强平步骤id查询期权活动订单列表
- 根据强平过程id和强平步骤id查询永久位置列表
- 根据强平过程id查询有哪些rpc调用
- 根据强平过程id查询发送哪些消息
- 根据强平过程id查询有哪些消息接收
- 根据强平过程id查询调用哪些方法
- 根据强平过程id查询哪些资产或资金转账
- 日志统计
-
- 统计指定时间内有多少用户强平,有多少用户强平成功,有多少用户强平失败
- 统计每秒有多少用户强大?
- 统计指定时间内强平流程的平均处理时间
- 最耗时的统计top10
- 统计比较
- 强平报警
- 流程还原
- 日志清理
- 日志开闭
-
- 强平流程总耗时过长,返回码异常,调用频率异常
- 强平要求总耗时过长,返回码异常,调用频率异常
- 强平每个请求间停留时间太长
- 强平步骤(每个状态)总耗时过长,返回码异常,调用频率异常
- 强平在每一步之间停留时间太长
- 强平过程中RPC调用总耗时过长,返回码异常,调用频率异常
- 强平过程中RPC调用时间过长,返回码异常,调用频率异常
- 强平步骤中强平核心方法总耗时过长,返回码异常,调用频率异常
- 强平路线异常(即状态变化异常)
- 强平用户和接管户资金对账异常
- 价格波动很大(比如一分钟窗口最大值超过1%,或者当前值超过1%)
- 组合保证金模式下,用户下单后立即被强平(暂时无法监控)
- 接管户创建多次异常(暂时无法监控,操作平台可以做幂等。
- 报警收敛
- 智能修复
- 容量估算
- 实施步骤
-
- 写入必备日志和中等日志
- 配置悟空监控
- 配置grafana监控
- 删除以前的日志写作方式
- 写入不必要的日志
- 任务评估
- 编程方式
- FAQ
背景介绍
-
强平无效日志太多
- 强平量大,写入性能损失大,日志存储空间大,机器不堪重负。
- 强平单行日志有很多字段不是必备,或者说跟强平服务没有必然关系,比如已结盈亏,未结盈亏,结算货币。
- 强平产生大量文本和不合理的日志记录,不仅没有带来效率提升,反而是一个阻碍,从几百兆的文本日志里查找有价值的关键错误信息对任何人都是一个很大的挑战,更别说效率了。
强平大部分日志为无效日志,比如检测程序每秒钟每个账户打印一次,循环频率高造成干扰。 -
强平关键日志太少
- 强平有效日志不超过10%,关键信息缺少,开发运维定位排查问题的难度非常大。
- 强平该打印的日志行没有打印,比如缺少强平流程执行前后的仓位状态,缺少流程每个步骤前后的仓位状态。
- 强平该打印的日志字段没有打印,比如缺少强平步骤前后的指数价和标记价。
-
强平对账困难
- 强平日志行缺乏,导致强平账户,接管户,资金池,对账困难。
-
强平很难复现问题
- 强平日志行缺乏,无法找到日志数据,则无法重现当时的场景,难于静态分析代码,无法本地环境debug跟踪,很多隐藏的bug无法找出来,系统隐患无处不在。
-
强平缺乏tracing功能
- 强平日志字段缺乏,无法还原全流程,或者说还原的全流程是错误的,定位排查问题非常耗时,比如没有指明这行日志属于哪个流程哪个步骤,在同一用户多次强平情况下,无法确认这行日志属于什么时候什么状态下发生的。
-
强平缺乏统计报表
- 强平日志行缺乏,引发无法完整统计指标或统计出错问题,比如开发不知道每个方法的性能,平均耗时,tp99%,一天有多少个异常,耗时大于1秒的调用一天有多少个。问题反馈到开发的时候,开发毫无准备,毫无安全感,不说疲于奔命,离从容应对还差十万八千里。
-
强平缺乏监控报警
- 强平日志行缺乏,日志字段缺乏,以及统计指标缺失,进而引发了监控报警不全或监控报警出错问题。从lark群消息可以看出,无法做到先于用户发现问题,发现问题的时间点严重滞后于端用户。开发运维无法第一时间感知情况下,又会导致信息流转,沟通不畅等成本。
-
强平缺乏自动修复策略
- 强平日志行缺乏,和监控报警缺失,导致系统无法根据异常码,自动尝试启动修复策略。
-
强平日志格式缺乏规范化
- 强平日志格式不统一,有些使用csv风格逗号分割,有些使用json格式,有些使用java方式,还有些通过log4j2提供的占位符方式随意定制格式。
- 强平日志格式不统一,对使用者阅读习惯造成困扰,开发运维提取关键信息困难,搜索效率极其低下,这,比如csv格式要先看代码才知道要找的那个值在第几个分隔符之间,看到一个值后也要查阅对应代码才能知道那个值代表什么。
- 强平日志格式不统一,导致搜索效率极低,比如日志中间件es查询匹配csv格式的账户余额字段困难,不好使,而es查询匹配json格式的账户余额字段则容易清晰很多。
-
强平日志分散
- 强平日志分散,强平服务依赖jraft,切主的时候会把不同流程的日志分散到不同的机器,甚至同一个强平流程的日志也可能分散到不同的机器,查询的时候先去jraft查找,再去对应的机器查找,查询效率低下。
-
强平日志逻辑错误
- 强平日志逻辑错误,日志埋点位置错误,一般是程序上设计的问题,比如程序上有throw new Exception,导致后面的日志无法打印,是不是在throw new Exception的前一行就应当详细记录现场呢?
-
强平太多无效日志问题
- https://confluence.yijin.io/pages/viewpage.action?pageId=71367702
-
强平日志指标缺乏,对账困难,还原生命周期图困难等问题
- https://c1ey4wdv9g.larksuite.com/wiki/wikusJzQYZ8Ag3YwWezvzQOhmCb?wiki_all_space_view_source=space_sidebar
当前日志精简图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-77WRiKFU-1656267188054)(C:/D/workspace/trade/doc/%E6%A6%82%E8%A6%81%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3/5.png)]