CN116561091A - 一种日志存储方法、装置、设备及可读存储介质 - Google Patents
一种日志存储方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN116561091A CN116561091A CN202310500854.5A CN202310500854A CN116561091A CN 116561091 A CN116561091 A CN 116561091A CN 202310500854 A CN202310500854 A CN 202310500854A CN 116561091 A CN116561091 A CN 116561091A
- Authority
- CN
- China
- Prior art keywords
- log information
- log
- stored
- linked list
- pieces
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 81
- 230000008569 process Effects 0.000 claims abstract description 37
- 238000004590 computer program Methods 0.000 claims description 30
- 230000000694 effects Effects 0.000 abstract description 2
- 238000012545 processing Methods 0.000 description 15
- 238000007639 printing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000003999 initiator Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000013209 evaluation strategy Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000007958 sleep Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了计算机技术领域内的一种日志存储方法、装置、设备及可读存储介质。本申请针对目标程序运行过程中产生的多条日志信息,按其时间戳顺序将多条日志信息添加至第一链表;从第一链表中获取待存日志信息,在待存日志信息的数据量不大于预设缓存区的剩余空间时,将待存日志信息写入预设缓存区,并将预设缓存区中的目标数据量大小的待存日志信息存储至程序的专属日志文件。本申请可循序控制整个存储过程中的各个阶段的数据并发量,同时使目标程序的日志存储在专属日志文件中而不与其他程序的日志混杂在一起,由此可便于目标程序日志的后续调取和查看。本申请提供的一种日志存储装置、设备及可读存储介质,也同样具有上述技术效果。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种日志存储方法、装置、设备及可读存储介质。
背景技术
目前,基于SPDK(Storage Performance Development Kit,存储高性能开发套件)实现的程序(本文简称为SPDK程序)的运行日志和系统中的其他程序的日志均存储在系统日志文件中,导致SPDK程序的日志与其他程序的日志混杂在一起,不利于查看SPDK程序的日志。
因此,如何为SPDK程序的日志提供一种便于查看的存储方案,是本领域技术人员需要解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种日志存储方法、装置、设备及可读存储介质,以为目标程序的日志提供一种便于查看的存储方案。其具体方案如下:
第一方面,本申请提供了一种日志存储方法,包括:
获取目标程序运行过程中产生的多条日志信息;
按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表;
从所述第一链表中获取待存日志信息,并确定所述待存日志信息的数据量;
若所述数据量不大于预设缓存区的剩余空间,则将所述待存日志信息写入所述预设缓存区,并将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件。
可选地,所述按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表,包括:
将所述多条日志信息按时间戳顺序排列,得到日志序列;
按照所述日志序列将所述多条日志信息添加至所述第一链表。
可选地,所述按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表之前,还包括:
对所述多条日志信息添加锁;
相应地,所述按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表之后,还包括:
释放相应锁。
可选地,所述将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件,包括:
按照预设策略确定所述目标数据量大小;
对所述预设缓存区中的所述目标数据量大小的待存日志信息加锁;
将加锁后的待存日志信息存储至所述专属日志文件。
可选地,所述将加锁后的待存日志信息存储至所述专属日志文件之后,还包括:
释放相应锁,并从所述预设缓存区中删除已存储至所述专属日志文件的待存日志信息。
可选地,所述将加锁后的待存日志信息存储至所述专属日志文件,包括:
按照所述目标程序中各线程ID对加锁后的待存日志信息进行分类;
以各线程ID为各分类结果的标记,并将各分类结果存储至所述专属日志文件。
可选地,所述将各分类结果存储至所述专属日志文件之前,还包括:
针对每一分类结果,对其中的每一待存日志信息添加告警等级,并按照预设格式处理添加有告警等级的每一待存日志信息。
可选地,若所述数据量大于所述预设缓存区的剩余空间,则等待预设时长后,再次对比所述数据量与所述预设缓存区的剩余空间的大小。
可选地,所述从所述第一链表中获取待存日志信息,包括:
读取所述第一链表中的预设数量个节点中记录的日志信息;
按照所读取日志信息的时间戳顺序将所读取日志信息添加至第二链表;
从所述第二链表中获取预设数据量大小的待存日志信息。
可选地,所述从所述第二链表中获取预设数据量大小的待存日志信息之后,还包括:
删除所述第一链表中的所述预设数量个节点;
删除所述预设数据量大小的待存日志信息在所述第二链表中占用的节点。
第二方面,本申请提供了一种日志存储装置,包括:
获取模块,用于获取目标程序运行过程中产生的多条日志信息;
暂存模块,用于按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表;
确定模块,用于从所述第一链表中获取待存日志信息,并确定所述待存日志信息的数据量;
存储模块,用于若所述数据量不大于预设缓存区的剩余空间,则将所述待存日志信息写入所述预设缓存区,并将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件。
可选地,所述暂存模块具体用于:
将所述多条日志信息按时间戳顺序排列,得到日志序列;
按照所述日志序列将所述多条日志信息添加至所述第一链表。
可选地,还包括:
锁添加模块,用于对所述多条日志信息添加锁;
相应地,还包括:
锁释放模块,用于释放相应锁。
可选地,所述存储模块具体用于:
按照预设策略确定所述目标数据量大小;
对所述预设缓存区中的所述目标数据量大小的待存日志信息加锁;
将加锁后的待存日志信息存储至所述专属日志文件。
可选地,所述存储模块还用于:
释放相应锁,并从所述预设缓存区中删除已存储至所述专属日志文件的待存日志信息。
可选地,所述存储模块具体用于:
按照所述目标程序中各线程ID对加锁后的待存日志信息进行分类;
以各线程ID为各分类结果的标记,并将各分类结果存储至所述专属日志文件。
可选地,所述存储模块还用于:
针对每一分类结果,对其中的每一待存日志信息添加告警等级,并按照预设格式处理添加有告警等级的每一待存日志信息。
可选地,若所述数据量大于所述预设缓存区的剩余空间,则等待预设时长后,再次对比所述数据量与所述预设缓存区的剩余空间的大小。
可选地,所述确定模块具体用于:
读取所述第一链表中的预设数量个节点中记录的日志信息;
按照所读取日志信息的时间戳顺序将所读取日志信息添加至第二链表;
从所述第二链表中获取预设数据量大小的待存日志信息。
可选地,所述确定模块还用于:
删除所述第一链表中的所述预设数量个节点;
删除所述预设数据量大小的待存日志信息在所述第二链表中占用的节点。
第三方面,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的日志存储方法。
第四方面,本申请提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的日志存储方法。
通过以上方案可知,本申请提供了一种日志存储方法,包括:获取目标程序运行过程中产生的多条日志信息;按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表;从所述第一链表中获取待存日志信息,并确定所述待存日志信息的数据量;若所述数据量不大于预设缓存区的剩余空间,则将所述待存日志信息写入所述预设缓存区,并将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件。
可见,本申请在存储目标程序的日志时,先按照日志时间戳顺序将日志信息存储在第一链表,以使日志按序暂存,也便于后续步骤按序读取日志;之后从第一链表中获取待存日志信息,在待存日志信息的数据量不大于预设缓存区的剩余空间时,将待存日志信息写入预设缓存区进行转存,以免因当前的日志条数过多导致存储过程出错,并将预设缓存区中的目标数据量大小的待存日志信息存储至程序的专属日志文件,由此可循序控制整个存储过程中的各个阶段的数据并发量,避免存储过程报错,可实现日志存储过程的高可靠运行,同时使目标程序的日志存储在专属日志文件中,而不与其他程序的日志混杂在一起,由此可便于目标程序日志的后续调取和查看。
相应地,本申请提供的一种日志存储装置、设备及可读存储介质,也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种日志存储方法流程图;
图2为本申请公开的另一种日志存储方法流程图;
图3为本申请公开的一种日志存储装置示意图;
图4为本申请公开的一种电子设备示意图;
图5为本申请提供的一种服务器结构图;
图6为本申请提供的一种终端结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,SPDK是一套存储开发套件,专用于NVME(Non-Volatile MemoryExpress,非易失性内存主机控制器接口规范)。SPDK提供了一系列的高性能、可扩展、用户态下面的工具和库,用于编写高性能、可伸缩的用户模式存储应用程序。
存储设备的驱动代码运行在用户态,不会运行在内核态,避免了内核的上下文切换节省了大量的处理开销,节省下来的CPU时间片可以用于实际的数据处理,比如重复数据剔除、压缩、加密。SPDK的原则是通过消除每一处额外的软件开销来提供最少的延迟和最高的效率,其提供的轮询模式驱动改变了I/O的基本模型。在传统的I/O模型中,应用程序提交读写请求后睡眠,一旦I/O完成,中断就会将其唤醒。轮询模式驱动的工作方式不同,应用程序提交读写请求后继续执行其他工作,以一定的时间间隔回头检查I/O是否已经完成。这种方式避免了中断带来的延迟和开销,并使得应用程序提高了I/O的效率。
在SPDK中,NVMe驱动是SPDK的基础组件,这个提供优化无锁的驱动能够提供高扩展、高效、高性能。通过提供用户控件访问,减少DMA的数据移动的阈值,允许对小尺寸IO进行更好利用;NVMe over Fabrics(NVMe-oF)initiator允许本地SPDK NVMe驱动和NVMe-oF启动器共享一套共同的接口命令,这样实现本地/远程复制就非常容易实现;Ceph块设备可以作为SPDK的后端设备;Blobstore Block Device是SPDK Blobstore的分配的块设备,是虚拟机或者数据可以交互的虚拟设备,这些设备得到SPDK的基础架构的优势,可以显示零拷贝和有非常高的扩展性;Linux Asynchrounous I/O(AIO),允许SPDK和内核设备(比如机器硬盘)交互;存储服务Blobstore为SPDK实现高精的文件式语义,为数据库、容器、虚拟机或者不依赖POSIX文件系统功能集的工作负载提供高性能基础。
SPDK使用的存储协议有iscsi target、NVMe-Of target和vhost-scsi target,iscsi target建立通过以太网的块流量规范,大约是内核效率的两倍,现在模式是使用TCP/IP协议栈;NVMe-Of target实现新的NVMe-oF规范,这个取决于RDMA的硬件,NVMe-Of的目标是为每个CPU核心提供高达40bps的流量;vhost-scsi target协议利用了SPDK NVMe驱动,能够使得访客虚拟机访问存储设备时延迟更低,使得I/O密集型工作负载的整体CPU负载降低。
目前,基于SPDK(Storage Performance Development Kit,存储高性能开发套件)实现的程序的运行日志和系统中的其他程序的日志均存储在系统日志文件中,导致SPDK程序的日志与其他程序的日志混杂在一起,不利于查看SPDK程序的日志。为此,本申请能够为SPDK程序的日志提供一种便于查看的存储方案,可实现:循序控制整个存储过程中的各个阶段的数据并发量,同时使SPDK程序的日志存储在专属日志文件中而不与其他程序的日志混杂在一起,由此可便于SPDK程序日志的后续调取和查看。
参见图1所示,本申请实施例公开了一种日志存储方法,包括:
S101、获取目标程序运行过程中产生的多条日志信息。
S102、按照多条日志信息的时间戳顺序将多条日志信息添加至第一链表。
在目标程序运行过程中,理论上会按序产生多条日志信息,因此这些日志信息会按照相应时间戳顺序存储在第一链表中。但如若同一时刻产生的日志信息的条数过多,就很可能引发错误。为此,可以先对产生的日志信息进行时间戳排序,再将其存储在第一链表中,第一链表中的每一节点存储一条日志信息,每一条日志信息对应有相应线程ID。目标程序中包括多个线程,每一线程有相应的线程ID。目标程序如:基于SPDK设计实现的SPDK程序。
在一种具体实施方式中,按照多条日志信息的时间戳顺序将多条日志信息添加至第一链表,包括:将多条日志信息按时间戳顺序排列,得到日志序列;按照日志序列将多条日志信息添加至第一链表。第一链表可以为单向链表。
其中,按照多条日志信息的时间戳顺序将多条日志信息添加至第一链表之前,还包括:对多条日志信息添加锁,以免因同一批日志信息被多个程序同时访问而产生错误;相应地,按照多条日志信息的时间戳顺序将多条日志信息添加至第一链表之后,还包括:释放相应锁。
S103、从第一链表中获取待存日志信息,并确定待存日志信息的数据量。
在一种具体实施方式中,从第一链表中获取待存日志信息,包括:读取第一链表中的预设数量个节点中记录的日志信息;按照所读取日志信息的时间戳顺序将所读取日志信息添加至第二链表;从第二链表中获取预设数据量大小的待存日志信息,之后可针对预设数据量大小的待存日志信息执行S104。其中,第二链表可以为单向链表。利用第一链表和第二链表暂存日志信息,有利于实现多条日志信息的按序暂存、按序读取,最终实现按序存储。
在本实施例中,从第一链表中读取预设数量个节点中记录的日志信息,可控制读第一链表的并发量和写第二链表的并发量,由此可降低日志存储过程报错的概率。从第二链表中获取预设数据量大小的待存日志信息,可以控制读第二链表的并发量和写预设缓存区的并发量,可进一步降低日志存储过程报错的概率。而将预设缓存区中的目标数据量大小的待存日志信息存储至目标程序的专属日志文件,可以控制读预设缓存区的并发量和写专属日志文件的并发量,也能够降低日志存储过程报错的概率。可见,本实施例设定了层层关卡来保障存储过程的有序性和可靠性。
在一种具体实施方式中,从第二链表中获取预设数据量大小的待存日志信息之后,还包括:删除第一链表中的预设数量个节点;删除预设数据量大小的待存日志信息在第二链表中占用的节点,以及时清理第一链表和第二链表所占用的内存空间,提高内存空间的利用率。
S104、若数据量不大于预设缓存区的剩余空间,则将待存日志信息写入预设缓存区,并将预设缓存区中的目标数据量大小的待存日志信息存储至目标程序的专属日志文件。
在一种具体实施方式中,若待存日志信息的数据量大于预设缓存区的剩余空间,则等待预设时长后,再次对比数据量与预设缓存区的剩余空间的大小。
在一种具体实施方式中,将预设缓存区中的目标数据量大小的待存日志信息存储至目标程序的专属日志文件,包括:按照预设策略确定目标数据量大小;对预设缓存区中的目标数据量大小的待存日志信息加锁,以免因同一批日志信息被多个程序同时访问而产生错误;将加锁后的待存日志信息存储至专属日志文件。
其中,将加锁后的待存日志信息存储至专属日志文件之后,还包括:释放相应锁,并从预设缓存区中删除已存储至专属日志文件的待存日志信息,以及时清理预设缓存区,提高空间利用率。
在一种示例中,将加锁后的待存日志信息存储至专属日志文件,包括:按照目标程序中各线程ID对加锁后的待存日志信息进行分类;以各线程ID为各分类结果的标记,并将各分类结果存储至专属日志文件,由此可使目标程序的日志按照目标程序中的相应线程ID分类存储,更有利于进行日志调取和查看。
在本实施例中,将各分类结果存储至专属日志文件之前,还包括:针对每一分类结果,对其中的每一待存日志信息添加告警等级,并按照预设格式处理添加有告警等级的每一待存日志信息。其中,告警等级按照目标程序的日志告警等级评估策略确定,具体可参照SPDK相关技术。预设格式中规定了每一条日志的样式,如:左对齐或右对齐、不同描述信息之间是否加逗号、是否使用括号等。
按照本实施例可在打印进程中设计实现相关存储功能,设计实现打印进程后,在系统上运行打印进程即可实现本实施例。
可见,本实施例在存储目标程序的日志时,先按照日志时间戳顺序将日志信息存储在第一链表,以使日志按序暂存,也便于后续步骤按序读取日志;之后从第一链表中获取待存日志信息,在待存日志信息的数据量不大于预设缓存区的剩余空间时,将待存日志信息写入预设缓存区进行转存,以免因当前的日志条数过多导致存储过程出错,并将预设缓存区中的目标数据量大小的待存日志信息存储至程序的专属日志文件,由此可循序控制整个存储过程中的各个阶段的数据并发量,避免存储过程报错,可实现日志存储过程的高可靠运行,同时使目标程序的日志存储在专属日志文件中,而不与其他程序的日志混杂在一起,由此可便于目标程序日志的后续调取和查看。
下面以SPDK程序为例,对本申请所提供方案做进一步详细介绍,以使SPDK程序的运行日志写到单独指定的文件中,并通过自定义日志格式提高日志的可维护性。具体的,在打印进程中设定:SPDK程序的运行日志输出到指定文件SPDK_running.log中,而不输出到系统日志文件message中。在存储日志时,在原有的日志格式上新增线程ID号和告警优先级ID号。
请参见图2,在SPDK程序开始运行后,先初始化打印进程使用的内存,包括:链表1、链表2、中间缓存占用的内存。之后初始化链表1和链表2,链表1用来存放新产生的日志信息;链表2用来转储日志信息。
由于日志信息写入链表1、链表2、中间缓存或文件SPDK_running.log中,会添加相应锁,因此还需要初始化日志锁相关内存。
进一步地,初始化全局的数据结构体,该数据结构体中主要定义有:中间缓存的大小log_size,系统初始化为active;中间缓存的已用大小used_size,写中间缓存时的锁标识初始化为active_lock,下刷日志至文件时的标志锁初始化为flush_lock,日志下刷线程初始化为flush_active,日志线程初始化为process_active等。
运行打印进程中的日志线程和下刷线程。
其中,日志线程先将新产生的日志暂时至链表1,再从链表1读取其中部分日志存入链表2,再从链表2读取其中部分日志存入中间缓存。其中,如果在将日志写入某一链表时,判断链表为空,则直接插入当前日志数据,如果判断链表为非空,则和链表中已有的日志节点做对比,按序插入当前日志数据到链表。
运行打印进程中的日志下刷线程时,日志下刷线程调用日志下刷接口把从链表2取出部分日志,对比当前所取出日志大小used_size和中间缓存剩余大小,按照预设格式化进行加逗号、加括号等处理后存入中间缓存中,之后移除链表2中的对应节点,更新中间缓存的已用大小used_size,打开指定日志文件SPDK_running.log,将buff中的内容写入指定文件SPDK_running.log。
在一种示例中,先从链表1读取100条日志写入链表2,再从链表2读取80条日志写入中间缓存,之后从中间缓存读取60条日志写入文件SPDK_running.log。由此可控制整个存储过程中的各个阶段的数据并发量,避免存储过程报错,可实现日志存储过程的高可靠运行。
可见,本实施例将SPDK程序的日志打印到指定的独立文件,而不是系统日志文件,便于开发测试人员后续查找、定位日志中的问题;并且,本实施例自定义了日志的打印格式,增强了日志的可读性。进一步地,还可以自主设定每条日志的优先级,在文件SPDK_running.log中记录线程ID、优先级ID等,以使日志层级分明,便于后续查看日志后,对SPDK程序进行调试和维护。
下面对本申请实施例提供的一种日志存储装置进行介绍,下文描述的一种日志存储装置与本文描述的其他实施例可以相互参照。
参见图3所示,本申请实施例公开了一种日志存储装置,包括:
获取模块301,用于获取目标程序运行过程中产生的多条日志信息;
暂存模块302,用于按照多条日志信息的时间戳顺序将多条日志信息添加至第一链表;
确定模块303,用于从第一链表中获取待存日志信息,并确定待存日志信息的数据量;
存储模块304,用于若数据量不大于预设缓存区的剩余空间,则将待存日志信息写入预设缓存区,并将预设缓存区中的目标数据量大小的待存日志信息存储至目标程序的专属日志文件。
在一种具体实施方式中,暂存模块具体用于:
将多条日志信息按时间戳顺序排列,得到日志序列;
按照日志序列将多条日志信息添加至第一链表。
在一种具体实施方式中,还包括:
锁添加模块,用于对多条日志信息添加锁;
相应地,还包括:
锁释放模块,用于释放相应锁。
在一种具体实施方式中,存储模块具体用于:
按照预设策略确定目标数据量大小;
对预设缓存区中的目标数据量大小的待存日志信息加锁;
将加锁后的待存日志信息存储至专属日志文件。
在一种具体实施方式中,存储模块还用于:
释放相应锁,并从预设缓存区中删除已存储至专属日志文件的待存日志信息。
在一种具体实施方式中,存储模块具体用于:
按照目标程序中各线程ID对加锁后的待存日志信息进行分类;
以各线程ID为各分类结果的标记,并将各分类结果存储至专属日志文件。
在一种具体实施方式中,存储模块还用于:
针对每一分类结果,对其中的每一待存日志信息添加告警等级,并按照预设格式处理添加有告警等级的每一待存日志信息。
在一种具体实施方式中,若数据量大于预设缓存区的剩余空间,则等待预设时长后,再次对比数据量与预设缓存区的剩余空间的大小。
在一种具体实施方式中,确定模块具体用于:
读取第一链表中的预设数量个节点中记录的日志信息;
按照所读取日志信息的时间戳顺序将所读取日志信息添加至第二链表;
从第二链表中获取预设数据量大小的待存日志信息。
在一种具体实施方式中,确定模块还用于:
删除第一链表中的预设数量个节点;
删除预设数据量大小的待存日志信息在第二链表中占用的节点。
其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
可见,本实施例提供了一种日志存储装置,可实现:循序控制整个存储过程中的各个阶段的数据并发量,同时使SPDK程序的日志存储在专属日志文件中而不与其他程序的日志混杂在一起,由此可便于SPDK程序日志的后续调取和查看。
下面对本申请实施例提供的一种电子设备进行介绍,下文描述的一种电子设备与本文描述的其他实施例可以相互参照。
参见图4所示,本申请实施例公开了一种电子设备,包括:
存储器401,用于保存计算机程序;
处理器402,用于执行所述计算机程序,以实现上述任意实施例公开的方法。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:获取目标程序运行过程中产生的多条日志信息;按照多条日志信息的时间戳顺序将多条日志信息添加至第一链表;从第一链表中获取待存日志信息,并确定待存日志信息的数据量;若数据量不大于预设缓存区的剩余空间,则将待存日志信息写入预设缓存区,并将预设缓存区中的目标数据量大小的待存日志信息存储至目标程序的专属日志文件。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:将多条日志信息按时间戳顺序排列,得到日志序列;按照日志序列将多条日志信息添加至第一链表。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:按照预设策略确定目标数据量大小;对预设缓存区中的目标数据量大小的待存日志信息加锁;将加锁后的待存日志信息存储至专属日志文件。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:释放相应锁,并从预设缓存区中删除已存储至专属日志文件的待存日志信息。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:按照目标程序中各线程ID对加锁后的待存日志信息进行分类;以各线程ID为各分类结果的标记,并将各分类结果存储至专属日志文件。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:针对每一分类结果,对其中的每一待存日志信息添加告警等级,并按照预设格式处理添加有告警等级的每一待存日志信息。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:若数据量大于预设缓存区的剩余空间,则等待预设时长后,再次对比数据量与预设缓存区的剩余空间的大小。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:读取第一链表中的预设数量个节点中记录的日志信息;按照所读取日志信息的时间戳顺序将所读取日志信息添加至第二链表;从第二链表中获取预设数据量大小的待存日志信息。
在本实施例中,所述处理器执行所述存储器中保存的计算机程序时,可以具体实现以下步骤:删除第一链表中的预设数量个节点;删除预设数据量大小的待存日志信息在第二链表中占用的节点。
进一步的,本申请实施例还提供了一种电子设备。其中,上述电子设备既可以是如图5所示的服务器50,也可以是如图6所示的终端60。图5和图6均是根据一示例性实施例示出的电子设备结构图,图中的内容不能被认为是对本申请的使用范围的任何限制。
图5为本申请实施例提供的一种服务器的结构示意图。该服务器50,具体可以包括:至少一个处理器51、至少一个存储器52、电源53、通信接口54、输入输出接口55和通信总线56。其中,所述存储器52用于存储计算机程序,所述计算机程序由所述处理器51加载并执行,以实现前述任一实施例公开的发布应用程序的监控中的相关步骤。
本实施例中,电源53用于为服务器50上的各硬件设备提供工作电压;通信接口54能够为服务器50创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口55,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
另外,存储器52作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源包括操作系统521、计算机程序522及数据523等,存储方式可以是短暂存储或者永久存储。
其中,操作系统521用于管理与控制服务器50上的各硬件设备以及计算机程序522,以实现处理器51对存储器52中数据523的运算与处理,其可以是Windows Server、Netware、Unix、Linux等。计算机程序522除了包括能够用于完成前述任一实施例公开的发布应用程序的监控方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。数据523除了可以包括应用程序的更新信息等数据外,还可以包括应用程序的开发商信息等数据。
图6为本申请实施例提供的一种终端的结构示意图,该终端60具体可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
通常,本实施例中的终端60包括有:处理器61和存储器62。
其中,处理器61可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器61可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器61也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器61可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器61还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器62可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器62还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器62至少用于存储以下计算机程序621,其中,该计算机程序被处理器61加载并执行之后,能够实现前述任一实施例公开的由终端侧执行的发布应用程序的监控方法中的相关步骤。另外,存储器62所存储的资源还可以包括操作系统622和数据623等,存储方式可以是短暂存储或者永久存储。其中,操作系统622可以包括Windows、Unix、Linux等。数据623可以包括但不限于应用程序的更新信息。
在一些实施例中,终端60还可包括有显示屏63、输入输出接口64、通信接口65、传感器66、电源67以及通信总线68。
本领域技术人员可以理解,图6中示出的结构并不构成对终端60的限定,可以包括比图示更多或更少的组件。
下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与本文描述的其他实施例可以相互参照。
一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的日志存储方法。其中,可读存储介质为计算机可读存储介质,其作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源包括操作系统、计算机程序及数据等,存储方式可以是短暂存储或者永久存储。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (11)
1.一种日志存储方法,其特征在于,包括:
获取目标程序运行过程中产生的多条日志信息;
按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表;
从所述第一链表中获取待存日志信息,并确定所述待存日志信息的数据量;
若所述数据量不大于预设缓存区的剩余空间,则将所述待存日志信息写入所述预设缓存区,并将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件。
2.根据权利要求1所述的方法,其特征在于,所述按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表,包括:
将所述多条日志信息按时间戳顺序排列,得到日志序列;
按照所述日志序列将所述多条日志信息添加至所述第一链表。
3.根据权利要求1所述的方法,其特征在于,所述按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表之前,还包括:
对所述多条日志信息添加锁;
相应地,所述按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表之后,还包括:
释放相应锁。
4.根据权利要求1所述的方法,其特征在于,所述将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件,包括:
按照预设策略确定所述目标数据量大小;
对所述预设缓存区中的所述目标数据量大小的待存日志信息加锁;
将加锁后的待存日志信息存储至所述专属日志文件。
5.根据权利要求4所述的方法,其特征在于,所述将加锁后的待存日志信息存储至所述专属日志文件之后,还包括:
释放相应锁,并从所述预设缓存区中删除已存储至所述专属日志文件的待存日志信息。
6.根据权利要求5所述的方法,其特征在于,还包括:
若所述数据量大于所述预设缓存区的剩余空间,则等待预设时长后,再次对比所述数据量与所述预设缓存区的剩余空间的大小。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述从所述第一链表中获取待存日志信息,包括:
读取所述第一链表中的预设数量个节点中记录的日志信息;
按照所读取日志信息的时间戳顺序将所读取日志信息添加至第二链表;
从所述第二链表中获取预设数据量大小的待存日志信息。
8.根据权利要求7所述的方法,其特征在于,所述从所述第二链表中获取预设数据量大小的待存日志信息之后,还包括:
删除所述第一链表中的所述预设数量个节点;
删除所述预设数据量大小的待存日志信息在所述第二链表中占用的节点。
9.一种日志存储装置,其特征在于,包括:
获取模块,用于获取目标程序运行过程中产生的多条日志信息;
暂存模块,用于按照所述多条日志信息的时间戳顺序将所述多条日志信息添加至第一链表;
确定模块,用于从所述第一链表中获取待存日志信息,并确定所述待存日志信息的数据量;
存储模块,用于若所述数据量不大于预设缓存区的剩余空间,则将所述待存日志信息写入所述预设缓存区,并将所述预设缓存区中的目标数据量大小的待存日志信息存储至所述目标程序的专属日志文件。
10.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至8任一项所述的方法。
11.一种可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310500854.5A CN116561091A (zh) | 2023-04-28 | 2023-04-28 | 一种日志存储方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310500854.5A CN116561091A (zh) | 2023-04-28 | 2023-04-28 | 一种日志存储方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116561091A true CN116561091A (zh) | 2023-08-08 |
Family
ID=87497594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310500854.5A Pending CN116561091A (zh) | 2023-04-28 | 2023-04-28 | 一种日志存储方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116561091A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117555874A (zh) * | 2024-01-11 | 2024-02-13 | 成都大成均图科技有限公司 | 一种分布式数据库的日志存储方法、装置、设备及介质 |
-
2023
- 2023-04-28 CN CN202310500854.5A patent/CN116561091A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117555874A (zh) * | 2024-01-11 | 2024-02-13 | 成都大成均图科技有限公司 | 一种分布式数据库的日志存储方法、装置、设备及介质 |
CN117555874B (zh) * | 2024-01-11 | 2024-03-29 | 成都大成均图科技有限公司 | 一种分布式数据库的日志存储方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9110669B2 (en) | Power management of a storage device including multiple processing cores | |
US9244839B2 (en) | Methods and apparatus for supporting persistent memory | |
US20150186068A1 (en) | Command queuing using linked list queues | |
US8949549B2 (en) | Management of ownership control and data movement in shared-memory systems | |
KR102236419B1 (ko) | 액세스 요청을 관리하기 위한 방법, 장치, 기기 및 저장 매체 | |
CN111813713B (zh) | 数据加速运算处理方法、装置及计算机可读存储介质 | |
US10152275B1 (en) | Reverse order submission for pointer rings | |
EP3662376B1 (en) | Reconfigurable cache architecture and methods for cache coherency | |
CN103020003A (zh) | 面向多核程序确定性重演的内存竞争记录装置及其控制方法 | |
CN116561091A (zh) | 一种日志存储方法、装置、设备及可读存储介质 | |
CN110046047A (zh) | 一种进程间通信方法、装置及计算机可读存储介质 | |
JP2021022379A (ja) | ハードウェアアクセラレータの自律ジョブキューイングシステム | |
CN112306652A (zh) | 带有上下文提示的功能的唤醒和调度 | |
US20210357339A1 (en) | Efficient management of bus bandwidth for multiple drivers | |
CN116257471A (zh) | 一种业务处理方法及装置 | |
US10372608B2 (en) | Split head invalidation for consumer batching in pointer rings | |
CN115840654B (zh) | 消息的处理方法、系统、计算设备及可读存储介质 | |
CN109388505B (zh) | 一种基于Android的异步多任务顺序加载方法 | |
CN113282407B (zh) | 基于持久性内存的用户层异步io方法与系统 | |
US11650748B1 (en) | Method of delayed execution of eBPF function in computational storage | |
US20230376242A1 (en) | System for computational storage with hardware-assistance | |
CN117724874B (zh) | 用于管理共享接收队列的方法、计算机设备及介质 | |
US20230401096A1 (en) | System for using always in-memory data structures in a heterogeneous memory pool | |
US20240095076A1 (en) | Accelerating data processing by offloading thread computation | |
US10158580B2 (en) | Utilizing access control data structures for sharing computing resources |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |