首页 > 其他分享 >支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石

支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石

时间:2024-01-04 23:33:59浏览次数:39  
标签:系统 业务 排查 监控 格式 设计 日志 系统日志 基石

这是《百图解码支付系统设计与实现》专栏系列文章中的第(7)篇。

在一家头部互联网公司发现一些工作多年的同学打印的日志也是乱七八糟的,所以聊聊这个话题。

本文主要讲结构清晰的日志在支付系统中的重要作用,设计日志规范需要遵守的一些基本原则,以及接口摘要日志、业务摘要日志、详细日志、异常日志等常用日志设计的最佳实践。

专栏地址:百图解码支付系统设计与实现


通过这篇文章,你可以了解到:

  1. 我为什么要写这个话题
  2. 什么是日志
  3. 日志对于支付系统运行保障的重要性
  4. 日志设计的常见误区
  5. 设计清晰日志规范的基本原则
  6. 几个最佳实践


1. 我为什么要写这个话题

写过代码的同学,一定打印过日志,但经常发现一些工作多年的同学打印的日志也是乱七八糟的。我曾经在一家头部互联网公司接手过一个上线一年多的业务,相关日志一开始就没有设计好,导致很多监控无法实现,出了线上问题也不知道,最后只能安排同学返工改造相关的日志。所以有必要聊聊这个话题。

2. 什么是日志

写过代码的同学一定再熟悉不过。日志本质就是一种系统记录文件,用于存储发生在操作系统、应用软件、网络和存储设备上的事件,主要用于问题诊断、审计和性能监控。

支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石_错误码

3. 日志对于支付系统运行保障的重要性

日志的重要性相信不必多说,没有日志,系统上线后出问题就等于抓瞎。

在支付系统中,日志不仅用于记录交易详情和系统状态,还起到监控和安全审计的核心作用。它们帮助我们实时监控系统的健康状态,快速排查线上的问题。此外,在支付领域日志对于交易验证和法律合规性文档记录都是不可或缺的。

4. 日志设计的常见误区

设计日志系统时常见的误区包括:

  1. 过度记录:记录大量无用信息,导致重要信息难以识别。
  2. 格式混乱:不统一的日志格式给监控告警、日志分析和问题定位带来困难。
  3. 忽视隐私和安全:未对敏感信息进行脱敏处理,增加数据泄露风险。比如卡号,身份证号,手机号等。

5. 设计清晰日志规范的基本原则

根据这么多年的实践,设计一个清晰的日志系统最少应遵循以下原则:

结构化日志:使用结构化数据格式记录,便于机器解析。这个尤其对监控系统有用

日志分级:合理设置日志级别(如DEBUG、INFO、WARN、ERROR),便于过滤和搜索。

标准化字段:标准化常用字段(如时间戳、日志级别、请求ID等),保持一致性。

上下文信息:确保日志含有足够的上下文信息,方便定位问题。尤其是详细日志,一定要打印上下文信息。

脱敏处理:对于敏感数据,如手机号、卡号等,进行适当的脱敏处理。

分布式追踪ID:引入分布式追踪系统,为跨服务的请求分配唯一的追踪ID。

6. 几个最佳实践

首先我们要明白日志是用来做什么的。只是先弄明白做事的目的,我们才能更好把事情做对。在我看来,日志有两个核心的作用:1)监控,诊断系统或业务是否存在问题;2)排查问题

对于监控而言,我们需要知道几个核心的数据:业务/接口的请求量、成功量、成功率、耗时,系统返回码、业务返回码,异常信息等。对于排查问题而言,我们需要有出入参、中间处理数据的上下文,报错的上下文等。

支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石_错误码_02

接下来,基于上面的分析,我们就清楚我们应该有几种日志:

  1. 接口摘要日志。监控接口的请求量、成功量、耗时、返回码等。使用固定格式,需要打印:时间、接口名称、结果(成功/失败)、返回码、耗时等基本信息就足够。
  2. 业务摘要日志。监控业务的请求量、成功量、核心业务信息、返回码等。使用固定格式,需要打印:时间、业务类型、上一步状态、当前状态、返回码、核心业务信息(不同业务有不同的核心业务信息,比如流入,就有支付金额/退款金额,卡品牌,卡BIN等)。
  3. 详细日志。用于排查问题,不用于监控。格式不固定。主要包括时间、接口、入参、出参,中间处理数据输入,异常的堆栈信息等。
  4. 系统异常日志。同时用于监控。格式固定。需要打印:时间、错误码、错误信息、堆栈信息等。


补充一个典型的支付场景下的业务日志格式如下:

文件名:payment.biz.digest.log

格式规范:

[时间,分布式追踪ID,环境标,压测标,站点标,请求来源系统,上游请求ID,上游支付ID,我方系统业务ID],[交易类型,交易币种,交易金额,上一个状态,当前状态],[渠道名,收单国家,发卡行,卡品牌,风控参数],[我方标准返回码,我方标准返回码描述,渠道返回码,渠道返回码描述]

日志示例:[2024-01-04 20:02:32.239,293242318382329329232,P,0,UK,payment,2024010401203223220001,2024010401203223220001,2024010401203223220003],[pay,USD,2392,INIT,PAYING],[WPG,US,CMB,VISA,2D],[-,-,-,-]

说明:上面的日志使用[]进行了块分隔,第一个[]里面是基础信息,第二个[]里面是交易信息,第三个[]里面是渠道信息,第四个[]里面是返回码信息

使用[]切割的好处是,如果后面要加字段,可以找到对应的位置增加。不影响现有监控。比如我要加个卡BIN,那就可以在风控参数后面加,不影响返回码监控位置。


有几点特别补充说明:

  1. 正常业务和系统异常需要拆分出来。NPE就是系统异常,余额不足就是一个预期内的业务场景,不要打印到异常文件中。
  2. 业务摘要信息需要根据业务不同,设计不同的业务摘要日志格式。比如支付、流出提现的交易,路由、渠道咨询等,监控诉求是不一样的,所以需要单独设计。拿路由举例,需要监控哪些渠道分流了多少,命中了哪个规则等,必然不能直接使用支付、退款的业务摘要日志格式。所以每出现一种新业务,就需要单独设计一种业务日志。
  3. 接口摘要日志,不要打印出入参。因为出入参有可能包含非常多数据,而接口我们只关注请求量、结果、耗时这些就够了,如果想查出入参,就去详细日志里面查。
  4. 系统异常日志一定要有单独的日志文件。因为正常的系统,绝大部分是业务上报错,比如余额不足,而不应该有很多NPE等系统异常。我们需要监控异常日志的行数或特定错误码的频率,比如每分钟有X行或每分钟有Y个特定错误码就需要告警出来。

7. 结束语

日志系统是支付系统关键的支撑组件,一个良好设计的日志系统可以为监控、告警和问题排查提供强有力的支持,反之,对于线上问题简直就是恶梦。

今天主要讲了日志格式规范的设计,对于log4j的配置什么的,网上已经有很多公开资料,这里不再赘述。另外,分布式环境下面还有日志转存、查询等,也是一个很庞大的体系,后面有机会再细聊。


标签:系统,业务,排查,监控,格式,设计,日志,系统日志,基石
From: https://blog.51cto.com/u_16485618/9105837

相关文章

  • 虚机 启动问题排查
    现象解决方法[root@mahuateng/etc/essd.d]$mount-thugetlbfsnone/mnt/huge_2MB_essd[root@mahuateng/etc/essd.d]$umount/mnt/huge_2MB_essd[root@mahuateng/etc/essd.d]$mount|grephugecgroupon/sys/fs/cgroup/hugetlbtypecgroup(rw,nosuid,nodev,noexec......
  • 系统问题排查思路
    系统在运行的过程中往往会出现一些意想不到的问题,例如响应时长突然升高,甚至应用无响应内存使用量突然变大,甚至内存溢出CPU使用率持续增高JVM进程消失面对这些问题,我们往往都需要通过以下的数据来进行分析链路追踪,主要用于识别出各接口或方法的耗时情况JavaCore数据,主要用于分析线......
  • 生产系统cpu飙高问题排查
    现状生产系统CPU占用过高,并且进行了报警排查方法执行top命令,查看是那个进程导致的,可以确定是pid为22168的java应用导致的执行top-Hp命令,查看这个进程的那个线程导致cpu过高,如下图,可以看到是22749线程导致的top-Hp22168由于jstack里面的线程号为16进制,需要转换线程号为......
  • GB28181视频监控平台LiteCVR调用rtsp地址返回的IP不正确原因排查
    RTSP(Real-TimeStreamingProtocol)是一种用于控制实时流媒体传输的应用层协议。它被设计用于建立和管理客户端与媒体服务器之间的连接,以便实现实时音频、视频或其他交互式媒体内容的传输。RTSP允许客户端通过发送命令来控制流媒体服务器的播放、暂停、快进、倒带等操作。RTSP支持多......
  • Linux系统日志文件介绍
    Linux系统文件通常在/var/log中下面,主要有以下日志:/var/log/message---------------------------------------系统启动后的信息和错误日志/var/log/secure------------------------------------------与安全相关的日志信息/var/log/maillog-------------------------------......
  • cpu高的问题排查
    问题背景中小件装卸服务uat时,cpu报99,想到是新接了的mq,于是将接mq改为只打印日志,cpu恢复正常由于业务正在进行uat验证,所以没有办法排查,只能等到夜深人静没人用的时候将逻辑都打开,让机器报警排查问题 一开始是觉得mq的数据太多接不过来,于是给uat的机器进行扩容,发现每个机器的c......
  • 排查oracle日志增速过快记录
    问题产生:最近同事连接开发环境oracle数据报错,一开始简单更加了下归档空间,每次加5G,语句如下:查看归档空间大小:showparameterdb_recovery;查看使用占比:select*fromv$flash_recovery_area_usage;增加归档空间:altersystemsetdb_recovery_file_dest_size=30G; 后来每......
  • Kolla OpenStack yoga 版本部署时 haproxy 无法正常工作的问题排查
    前言这个缺陷很奇怪,仅在使用我的公司自研的操作系统上部署时产生。但是这个由于haproxy的配置缺陷导致的问题确实存在,记录以供后续参考。问题表现在部署过程与部署完成后均出现mysql数据无法连接的问题。导致集群无法工作。问题原因排查进入mysql容器,通过命令行工具指......
  • 博科光交机端口状态和排查
    端口物理上主要有几种状态,分别的含义及异常定位方法如下:No_CardNointerfacecardpresent.No_ModuleNomodule(GBICorother)present.端口没有插入光模块No_LightModuleisnotreceivinglight(8Gbps-capableportsonly).仅在8GB速度的端口上存在,说明光模块没有收到......
  • 无线信号异常排查合集
    重新执行一下测试步骤:新解压一份最新的EVT包,烧录peripheral例程hex,用“BLE调试助手”(各大安卓应用商场搜索下载)或者“lightblue”(IOS应用商店下载)搜索广播,确认一下现象,是无线信号弱,还是完全没有信号。Ⅰ.如果是无线信号弱:①匹配电路有没有产生负面作用,把匹配电路去掉,直接连接......