技术领域
[0001] 本申请涉及计算机信息处理领域,具体而言,涉及一种用于syslog‑ng的远程日志发送方法及装置。
相关背景技术
[0002] 随着网络技术的进步,很多应用场景对网络设备提出了更高的要求,其中一个重要需求是网络隔离。网络隔离的意思是将同一台设备上的不同网络分开,使它们互不干扰。为此,我们会在网络设备上创建多个不同的虚拟路由转发实例(VRF)。每个VRF就像一个独立的小网络,有自己专属的路由表和物理接口。这样,来自不同业务的数据可以通过不同的VRF被发送到相应的服务器进行处理,保证各个业务互不干扰。举个例子,就像一栋办公楼里有多个独立的公司,每个公司有自己的网络系统和网络设备,互不干扰。
[0003] 但是,传统的syslog‑ng应用程序无法支持这种VRF功能,它不能将日志绑定到特定的VRF进行远程发送。这就像是你想要把每个公司的安保记录分别发给各自的安保公司,而现有的系统只能统一发送给一个公司。如何能使得syslog‑ng应用程序支持绑定VRF,并把日志分别发送到不同的远程服务器,是现在急需解决的问题。
[0004] 在所述背景技术部分公开的上述信息仅用于加强对本申请的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
具体实施方式
[0030] 现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本申请将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
[0031] 此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
[0032] 附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
[0033] 附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
[0034] 应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本申请概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
[0035] 本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的,因此不能用于限制本申请的保护范围。
[0036] 本申请涉及的技术缩略语解释如下:
[0037] Syslog‑ng应用程序:是一个灵活且高度可扩展的日志记录应用程序,可以将消息存储在本地硬盘上,在与服务器建立连接时,syslog‑ng应用程序会按照接收消息的顺序将存储的消息发送到服务器。
[0038] VRF:Vritual Routing Forwarding,VPN路由转发表,也称为VPN‑instance(VPN实例),在一台设备中可存在多个路由表,每个路由表相互独立,网段可以相同。
[0039] socket:通常也称作“套接字”,是支持TCP/IP协议的网络通信的基本操作单元,可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,包含IP地址和端口两个部分。
[0040] 有鉴于现有技术中的困境,本申请要解决syslog‑ng远程发送日志的问题主要有两个,一是网络设备在需要网络隔离的环境下,远程发送日志不能指定到对应网络发送,二是在设备重启时,因相关路由配置未恢复,导致网络不通,设备重启时产生的日志不能远程发送给服务器,该阶段服务器接收的日志少于设备本地日志。
[0041] 下面通过具体的实施例,来对本申请的内容进行详细描述。
[0042] 图1是根据一示例性实施例示出的一种用于syslog‑ng的远程日志发送方法的流程图。用于syslog‑ng的远程日志发送方法10至少包括步骤S102至S110。
[0043] 如图1所示,在S102中,配置远程日志发送的相关信息,所述相关信息包括:服务器地址、端口号、协议类型、VPN实例。
[0044] 由设备命令行/WEB服务程序获取远程发送日志所需的服务器ip地址src_ip、服务器接收日志端口号port、协议类型iptype、设备远程发送日志所用vrf。
[0045] 在一个实施例中,管理员操可首先获取远程日志服务器的IP地址、确定远程服务器监听的端口号、选择要使用的传输协议(UDP或TCP)、确定设备上用于发送日志的虚拟路由转发(VRF)实例的名称。
[0046] 之后,管理员可使用设备的命令行接口或WEB服务程序登录到设备的管理界面。在设备的命令行界面或WEB界面中,找到相应的日志配置选项。输入远程日志服务器的IP地址、端口号、传输协议和VRF名称。确认输入的配置信息无误后,保存配置更改。
[0047] 在S104中,根据所述相关信息生成远程发送日志配置文件。系统会根据管理员输入的配置信息自动生成一个配置文件,其中包含了目的地和日志来源的相关配置。
[0048] 可例如,后台接收所述相关信息;根据所述相关信息生成所述远程发送日志配置文件。后台接收配置后,生成远程发送日志配置文件,并使syslog‑ng进程重读该配置文件。
[0049] 更具体的,在配置文件中可修改destination及log字段的配置。其中destination字段主要保存服务器的配置,将vrf编入destination名称字段,destination还包含服务器ip地址对应的localip字段、服务器接收日志端口对应的port字段、协议类型对应的udp/tcp字段以及日志对应格式的template字段。log字段包含本地日志的来源source及服务器的相关配置参数destination。管理员需要提供远程日志服务器的IP地址、服务器监听的端口号以及选择使用的传输协议(通常是UDP或TCP)。此外,还需要指定设备上用于发送日志的虚拟路由转发(VRF)实例。一旦这些参数被设备接收并配置好,将生成一个配置文件,其中主要修改了destination和log字段的配置。
[0050] 在配置文件中,destination字段用于定义日志发送的目的地,其中包括服务器的相关配置信息,如服务器的IP地址、端口号、使用的协议类型以及日志的格式模板。而log字段则指定了本地日志的来源以及发送到服务器的相关配置参数。
[0051] 举例来说,假设有一个网络设备,它需要将日志发送到IP地址为192.168.1.100,端口为514的远程服务器,使用UDP协议,并且使用VRF logs_vrf。配置文件中会包含类似以下内容的条目:
[0052] 在destination字段中,会定义一个名为logs_vrf的目的地,其中包含了远程服务器的相关配置信息,如本地IP地址、端口号、使用的协议以及日志格式。
[0053] 在log字段中,会指定日志的来源是本地设备,并将日志发送到之前定义的logs_vrf目的地。
[0054] 在S106中,syslog‑ng系统重读所述远程发送日志配置文件。可例如,重启syslog‑ng系统,以使得syslog‑ng系统重读所述远程发送日志配置文件。
[0055] 更具体的,可设置每当管理员通过命令行或WEB服务程序下发配置时,都会触发syslog‑ng应用程序的重新启动和配置文件的重读。
[0056] 在S108中,syslog‑ng系统将socket套接字和VPN实例绑定,并保存至socket参数链表。可例如,syslog‑ng系统创建socket套接字;解析所述远程发送日志配置文件,获取VPN实例;将所述socket套接字和所述VPN实例绑定,并保存至socket参数链表。
[0057] 其中,将所述socket套接字和所述VPN实例绑定,并保存至socket参数链表,包括:将所述socket套接字和所述VPN实例绑定;将所述socket套接字文件描述符保存至所述远程发送日志配置文件的socket参数链表。
[0058] 更具体的,在syslog‑ng应用程序启动过程中,首先会创建一个套接字(socket),用于与远程服务器通信。然后,它会解析配置文件中的destination字段,从中获取相应的VRF信息。接着,将套接字绑定到相应的VRF上。同时,将套接字文件描述符(sockfd)、协议类型(iptype)、源IP地址(src_ip)、端口号(port)等参数保存在远程发送日志配置套接字参数链表syslog_socket中。当需要发送日志时,系统会通过套接字文件描述符(sockfd)遍历该链表,以获取相关的套接字参数信息,并使用这些参数来建立与远程服务器的连接,进而发送日志信息。
[0059] 在S110中,通过所述socket参数链表发送日志以实现日志路由隔离发送。
[0060] 假设管理员需要将设备的日志发送到两个不同的远程服务器,分别是日志服务器A和日志服务器B。管理员通过设备的命令行界面或WEB服务程序下发配置,配置如下:
[0061] 日志服务器A的IP地址为192.168.1.100,监听端口为514,使用UDP协议,VRF名称为logs_vrf_A。
[0062] 日志服务器B的IP地址为10.0.0.50,监听端口为5514,使用TCP协议,VRF名称为logs_vrf_B。
[0063] 管理员下发配置后,syslog‑ng应用程序会重新启动并重读配置文件。在应用程序启动过程中,首先会创建两个套接字,分别用于与日志服务器A和日志服务器B通信。然后,应用程序会解析配置文件中的destination字段,从中获取对应的VRF信息,分别为logs_vrf_A和logs_vrf_B。接着,将这两个套接字分别绑定到对应的VRF上。
[0064] 同时,系统会将套接字文件描述符(sockfd)、协议类型(iptype)、源IP地址(src_ip)、端口号(port)等参数保存在远程发送日志配置套接字参数链表syslog_socket中。对于日志服务器A的配置,链表中保存了套接字参数信息,如套接字文件描述符为sockfd_A、协议类型为UDP、源IP地址为设备的IP地址、端口号为514;对于日志服务器B的配置,则保存了套接字参数信息,如套接字文件描述符为sockfd_B、协议类型为TCP、源IP地址为设备的IP地址、端口号为5514。
[0065] 当需要发送日志时,系统会通过套接字文件描述符遍历syslog_socket链表,以获取相应的套接字参数信息。比如,当设备需要发送日志到日志服务器A时,会使用sockfd_A、UDP协议、设备的IP地址、端口号514建立连接,将日志信息发送到日志服务器A;同理,当需要发送日志到日志服务器B时,会使用sockfd_B、TCP协议、设备的IP地址、端口号5514建立连接,将日志信息发送到日志服务器B。
[0066] 根据本申请的用于syslog‑ng的远程日志发送方法,通过配置远程日志发送的相关信息,所述相关信息包括:服务器地址、端口号、协议类型、VPN实例;根据所述相关信息生成远程发送日志配置文件;syslog‑ng系统重读所述远程发送日志配置文件;syslog‑ng系统将socket套接字和VPN实例绑定,并保存至socket参数链表;通过所述socket参数链表发送日志以实现日志路由隔离发送的方式,能够实现基于VRF远程发送日志,确保在网络隔离环境中设备日志的正确传输,增强了日志系统的灵活性和可靠性。
[0067] 图2是根据一示例性实施例示出的一种用于syslog‑ng的远程日志发送方法的流程图。用于syslog‑ng的远程日志发送方法20至少包括步骤S202至S208。
[0068] 如图2所示,在S202中,配置设备启动过程中发送日志功能。管理员可以通过命令行配置设备是否需要发送设备在启动过程中产生的日志。这可以通过修改配置文件中的reboot_log_send字段来实现,其中1表示启用发送重启阶段日志,而0则表示取消发送。
[0069] 在S204中,基于所述功能,在设备的启动或恢复过程中,创建线程处理函数。
[0070] 在一个具体的实施例中,当设备重新启动并syslog‑ng应用程序被重新加载时,系统会读取配置文件并检查reboot_log_send字段的值。如果该字段的值为1,则在syslog‑ng应用程序的主处理函数中会创建一个线程来处理重启阶段产生的日志。
[0071] 在S206中,所述线程处理函数定时遍历socket参数链表,以生成日志内容。可例如,所述线程处理函数定时遍历socket参数链表获取socket参数;基于所述socket参数按预设格式拼接生成所述日志内容。
[0072] 更具体的,所述线程处理函数带有计时器,在预设时间内定时遍历socket参数链表获取socket参数。
[0073] 在S208中,将所述日志内容写入sockfd参数发送重启阶段的日志中。可例如,将所述日志内容写入sockfd参数发送重启阶段的日志中;将socket参数链表中的所述日志添加互斥锁;在所述日志发送后,将socket参数链表中的日志删除并解锁。
[0074] 根据本申请的用于syslog‑ng的远程日志发送方法,在发送日志处理函数中的入口处,可例如检查reboot_log_send字段的值是否为1以及g_send_context_finish是否为0。如果条件满足,系统会先添加一个互斥锁,以确保多线程调用日志接口时不会出现日志丢失的情况。然后,系统将日志内容添加至链表syslog_send_context,解锁并将全局变量g_save_context_flag设置为1,表示设备在重启阶段已经添加了日志。若g_send_context_finish不为0,系统会遍历syslog_socket链表,获取socket相关参数,并正常发送日志至配置好的目的地。
[0075] 实现在网络隔离的环境中,远程发送日志也可通过绑定vrf,将日志通过指定的端口,发送到对应的服务器,实现路由隔离。同时保存发送设备重启过程中的产生的日志,可对重启过程中设备产生的日志进行排查,提供一个排查设备重启过程中的问题的方法。
[0076] 应清楚地理解,本申请描述了如何形成和使用特定示例,但本申请的原理不限于这些示例的任何细节。相反,基于本申请公开的内容的教导,这些原理能够应用于许多其它实施例。
[0077] 图3是根据另一示例性实施例示出的一种用于syslog‑ng的远程日志发送方法的流程图。图3所示的流程30是对图2所示的流程的详细描述。
[0078] 如图3所示,在S302中,命令行配置重启阶段发送日志。管理员可以通过命令行配置设备是否需要发送设备在启动过程中产生的日志。这可以通过修改配置文件中的reboot_log_send字段来实现,其中1表示启用发送重启阶段日志,而0则表示取消发送。
[0079] 在S304中,重启设备。
[0080] 在S306中,读取配置文件并赋值。
[0081] 在S308中,判断g_reboot_log_send是否为1。在设备启动时,配置会被恢复,并且syslog‑ng应用程序会读取配置文件中的reboot_log_send字段,并将其保存至全局变量g_reboot_log_send中。在syslog‑ng应用程序的主处理函数中,会判断g_reboot_log_send字段的值。
[0082] 在S310中,创建线程处理函数。
[0083] 若g_reboot_log_send字段的值为1,则会创建一个线程来处理重启阶段产生的日志,这个线程的处理函数为syslog_reboot_back_thread。同时,在发送日志处理函数log_writer_flush_log的入口处,也会判断g_reboot_log_send字段是否为1以及g_send_context_finish是否为0。若满足条件,则会先添加互斥锁,以防止多线程调用日志接口时出现部分日志丢失。添加完锁之后,将日志内容添加至链表syslog_send_context,然后解锁。同时,会将全局变量g_save_context_flag设置为1,以表示设备重启阶段链表已添加日志。若g_send_context_finish不为0,则会遍历syslog_socket链表,获取socket相关参数,并正常发送日志。
[0084] 图4是根据另一示例性实施例示出的一种用于syslog‑ng的远程日志发送方法的流程图。图4所示的流程40是对图2所示的流程的详细描述。
[0085] 如图4所示,在S402中,设备重启。
[0086] 在S404中,判断log_send_start是否为0。在启动syslog‑ng应用程序时,会通过配置文件保存一个变量log_send_start。当设备处于启动阶段时,log_send_start被设置为0,表示设备需要保存日志。在设备完成重启后,将log_send_start设置为1,表示可以开始发送远程日志。
[0087] 在S406中,判断g_send_context_finish是否为0。若g_send_context_finish为0,表示重启日志阶段日志尚未发送完,则会遍历syslog_socket链表获取socket相关参数。
[0088] 在S408中,遍历链表并发送日志。
[0089] 在S410中,加锁。
[0090] 在S412中,删除链表。
[0091] 在S414中,解锁。
[0092] 在S416中,g_send_context_finish为1。
[0093] 然后,遍历链表syslog_send_context,按照指定的格式拼接日志内容,并使用标准库函数write将日志内容写入套接字描述符(sockfd)发送重启阶段的日志。发送完日志后,会添加互斥锁,将该链表删除,并解锁。
[0094] 在S418中,g_log_pthread_send_count加1。
[0095] 在S420中,间隔预定时间。在syslog_reboot_back_thread的主函数内,会循环执行,每5秒进行一次循环。通过使用全局变量g_log_pthread_send_count累加循环次数,记录循环次数,以防止设备启动异常超时时,该循环一直遍历。当设备启动超时异常时,会清空链表并停止发送日志。
[0096] 在S422中,g_log_pthread_send_count是否大于180。在循环内部,首先会判断局部变量send_start_flag是否为0。若为0,则会读取配置文件中的log_send_start值并将其赋值给send_start_flag。然后,会判断g_log_pthread_send_count是否大于180,以判断设备重启阶段是否超过15分钟。如果超过了15分钟,则视为设备重启阶段异常,会清空链表并停止发送日志,并将全局变量g_send_context_finish设置为1,表示重启阶段日志已发送完成,并退出循环。
[0097] 在S424中,g_send_context_finish设置为1。
[0098] 在S426中,加锁。
[0099] 在S428中,删除链表。
[0100] 在S430中,解锁。
[0101] 在S432中,退出。
[0102] 本领域技术人员可以理解实现上述实施例的全部或部分步骤被实现为由CPU执行的计算机程序。在该计算机程序被CPU执行时,执行本申请提供的上述方法所限定的上述功能。所述的程序可以存储于一种计算机可读存储介质中,该存储介质可以是只读存储器,磁盘或光盘等。
[0103] 此外,需要注意的是,上述附图仅是根据本申请示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
[0104] 下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
[0105] 图5是根据一示例性实施例示出的一种用于syslog‑ng的远程日志发送装置的框图。如图5所示,用于syslog‑ng的远程日志发送装置50包括:配置模块502,文件模块504,重读模块506,绑定模块508,发送模块510。
[0106] 配置模块502用于配置远程日志发送的相关信息,所述相关信息包括:服务器地址、端口号、协议类型、VPN实例;
[0107] 文件模块504用于根据所述相关信息生成远程发送日志配置文件;文件模块504还用于后台接收所述相关信息;根据所述相关信息生成所述远程发送日志配置文件。
[0108] 重读模块506用于syslog‑ng系统重读所述远程发送日志配置文件;重读模块506还用于重启syslog‑ng系统,以使得syslog‑ng系统重读所述远程发送日志配置文件。
[0109] 绑定模块508用于syslog‑ng系统将socket套接字和VPN实例绑定,并保存至socket参数链表;绑定模块508还用于syslog‑ng系统创建socket套接字;解析所述远程发送日志配置文件,获取VPN实例;将所述socket套接字和所述VPN实例绑定,并保存至socket参数链表。
[0110] 发送模块510用于通过所述socket参数链表发送日志以实现日志路由隔离发送。
[0111] 图6是根据另一示例性实施例示出的一种用于syslog‑ng的远程日志发送装置的框图。如图6所示,用于syslog‑ng的远程日志发送装置60包括:功能模块602,创建模块604,遍历模块606,写入模块608。
[0112] 功能模块602用于配置设备启动过程中发送日志功能;
[0113] 创建模块604用于基于所述功能,在设备的启动或恢复过程中,创建线程处理函数;
[0114] 遍历模块606用于所述线程处理函数定时遍历socket参数链表,以生成日志内容;遍历模块606还用于所述线程处理函数定时遍历socket参数链表获取socket参数;基于所述socket参数按预设格式拼接生成所述日志内容。
[0115] 写入模块608用于将所述日志内容写入sockfd参数发送重启阶段的日志中。写入模块608还用于将所述日志内容写入sockfd参数发送重启阶段的日志中;将socket参数链表中的所述日志添加互斥锁;在所述日志发送后,将socket参数链表中的日志删除并解锁。
[0116] 根据本申请的用于syslog‑ng的远程日志发送装置,通过配置远程日志发送的相关信息,所述相关信息包括:服务器地址、端口号、协议类型、VPN实例;根据所述相关信息生成远程发送日志配置文件;syslog‑ng系统重读所述远程发送日志配置文件;syslog‑ng系统将socket套接字和VPN实例绑定,并保存至socket参数链表;通过所述socket参数链表发送日志以实现日志路由隔离发送的方式,能够实现基于VRF远程发送日志,确保在网络隔离环境中设备日志的正确传输,增强了日志系统的灵活性和可靠性。
[0117] 总体而言,本公开解决syslog‑ng远程发送日志的问题主要有两个,一是网络设备在需要网络隔离的环境下,远程发送日志不能指定到对应网络发送,二是在设备重启时,因相关路由配置未恢复,导致网络不通,设备重启时产生的日志不能远程发送给服务器,该阶段服务器接收的日志少于设备本地日志。在本发明方案中,基于syslog‑ng应用程序实现了绑定vrf远程发送日志的方法。具体而言,在设备命令行/WEB服务程序配置远程发送日志所需的服务器ip地址src_ip、服务器接收日志端口号port、协议类型iptype、设备远程发送日志所用vrf,后台接收配置后,生成远程发送日志配置文件,并使syslog‑ng进程重读该配置文件。配置文件中主要修改destination及log字段的配置。其中destination字段主要保存服务器的配置,将vrf编入destination名称字段,destination还包含服务器ip地址对应的localip字段、服务器接收日志端口对应的port字段、协议类型对应的udp/tcp字段以及日志对应格式的template字段。log字段包含本地日志的来源source及服务器的相关配置参数destination。每次通过命令行/WEB服务程序下发配置时,都会重启syslog‑ng应用程序重读配置文件,syslog‑ng应用程序启动过程中,先创建socket套接字,再解析配置文件中的destination字段,获取对应vrf,将socket绑定至对应vrf,同时将socket套接字文件描述符sockfd、iptype、src_ip、port保存至远程发送日志配置socket参数链表syslog_socket,在发送日志时,通过sockfd参数遍历该链表获取socket相关参数。可通过命令行配置是否需要发送设备启动过程中产生的日志,通过命令配置修改配置文件中的reboot_log_send字段,1为使能发送重启阶段日志,0为取消发送。在设备启动,配置恢复syslog‑ng应用程序时,读取配置文件中reboot_log_send字段,并保存至全局变量g_reboot_log_send,在syslog‑ng应用程序处理main函数内,判断g_reboot_log_send字段为1,则创建线程处理函数syslog_reboot_back_thread处理重启阶段产生的日志,并且在发送日志处理函数log_writer_flush_log入口处,也判断g_reboot_log_send字段为1且g_send_context_finish为0时,先添加互斥锁,防止多线程调用日志接口添加日志时,部分日志丢失,加锁后将日志内容添加至链表syslog_send_context,并解锁,设置全局变量g_save_context_flag为1,用于表示设备重启阶段链表已添加日志,若g_send_context_finish不为0,则遍历syslog_socket链表获取socket相关参数,正常发送日志。设备启动过程中的日志保存发送线程处理函数syslog_reboot_back_thread的主要流程:通过配置文件保存变量log_send_start,在启动syslog‑ng应用程序时设置log_send_start为0表示设备在启动阶段,需要保存日志,并在设备重启完成后,将log_send_start设置为1,表示可以开始发送远程日志。在该线程处理主函数内,每5秒循环一次,并利用全局变量g_log_pthread_send_count累加,记录循环次数,防止设备启动异常超时时,该循环一直遍历,设备启动超时异常时,清空链表不再发送日志。循环内每次先判断局部变量send_start_flag为0时,读取配置文件中的log_send_start值并赋值给send_start_flag,判断g_log_pthread_send_count是否大于180,来判断设备重启阶段是否大于15分钟,若大于15分钟视为设备重启阶段异常,清空链表不再发送日志,并设置全局变量g_send_context_finish为1,表示重启阶段日志已发送完成,退出循环。若g_send_context_finish为0,表示重启日志阶段日志尚未发送完,则遍历syslog_socket链表获取socket相关参数,遍历链表syslog_send_context按格式拼接日志内容,并使用write标准库函数,将日志内容写入sockfd发送重启阶段的日志,发送后添加互斥锁,将该链删除,并解锁。本公开实现在网络隔离的环境中,远程发送日志也可通过绑定vrf,将日志通过指定的端口,发送到对应的服务器,实现路由隔离。同时保存发送设备重启过程中的产生的日志,可对重启过程中设备产生的日志进行排查,提供一个排查设备重启过程中的问题的方法。
[0118] 图7是根据一示例性实施例示出的一种电子设备的框图。
[0119] 下面参照图7来描述根据本申请的这种实施方式的电子设备700。图7显示的电子设备700仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
[0120] 如图7所示,电子设备700以通用计算设备的形式表现。电子设备700的组件可以包括但不限于:至少一个处理单元710、至少一个存储单元720、连接不同系统组件(包括存储单元720和处理单元710)的总线730、显示单元740等。
[0121] 其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元710执行,使得所述处理单元710执行本说明书中描述的根据本申请各种示例性实施方式的步骤。例如,所述处理单元710可以执行如图1至图4中所示的步骤。
[0122] 所述存储单元720可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)7201和/或高速缓存存储单元7202,还可以进一步包括只读存储单元(ROM)7203。
[0123] 所述存储单元720还可以包括具有一组(至少一个)程序模块7205的程序/实用工具7204,这样的程序模块7205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
[0124] 总线730可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
[0125] 电子设备700也可以与一个或多个外部设备700’(例如键盘、指向设备、蓝牙设备等)通信,使得用户能与该电子设备700交互的设备通信,和/或该电子设备700能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口750进行。并且,电子设备700还可以通过网络适配器760与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器760可以通过总线730与电子设备700的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备700使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0126] 通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,如图8所示,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD‑ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、或者网络设备等)执行根据本申请实施方式的上述方法。
[0127] 所述软件产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD‑ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0128] 所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0129] 可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0130] 上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该计算机可读介质实现如下功能:配置远程日志发送的相关信息,所述相关信息包括:服务器地址、端口号、协议类型、VPN实例;根据所述相关信息生成远程发送日志配置文件;syslog‑ng系统重读所述远程发送日志配置文件;syslog‑ng系统将socket套接字和VPN实例绑定,并保存至socket参数链表;通过所述socket参数链表发送日志以实现日志路由隔离发送。
[0131] 该计算机可读介质还可实现如下功能:配置设备启动过程中发送日志功能;基于所述功能,在设备的启动或恢复过程中,创建线程处理函数;所述线程处理函数定时遍历socket参数链表,以生成日志内容;将所述日志内容写入sockfd参数发送重启阶段的日志中。
[0132] 本领域技术人员可以理解上述各模块可以按照实施例的描述分布于装置中,也可以进行相应变化唯一不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0133] 通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD‑ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本申请实施例的方法。
[0134] 以上具体地示出和描述了本申请的示例性实施例。应可理解的是,本申请不限于这里描述的详细结构、设置方式或实现方法;相反,本申请意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。