栏目介绍:“玩转OurBMC”是OurBMC社区开创的知识分享类栏目,主要聚焦于社区和BMC全栈技术相关基础知识的分享,全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过“玩转OurBMC”栏目,帮助开发者们深入了解到社区文化、理念及特色,增进开发者对BMC全栈技术的理解。
欢迎各位关注“玩转OurBMC”栏目,共同探索OurBMC社区的精彩世界。同时,我们诚挚地邀请各位开发者向“玩转OurBMC”栏目投稿,共同学习进步,将栏目打造成为汇聚智慧、激发创意的知识园地。
本期内容我们将深入探索 BMC 日志管理模块。首先,我们将对 BMC 日志管理模块的框架进行全面解析,了解其组件间的交互与协同工作。其次,通过实际案例的剖析,深入探讨功能模块的具体作用,并展示其在日常运维中的实际应用操作。这不仅能够帮助读者更好地理解和使用 BMC 日志管理模块,还将为服务器的稳定运行和故障排查提供有力的支持。
日志管理框架
在 OpenBMC 中,日志处理是一项核心任务,确保系统事件、错误、警告和其他重要信息得到妥善记录和管理。其主要采用 rsyslog 作为日志处理工具,下图为 OpenBMC 日志管理流程图:
1. 日志生成:系统中的各个组件和应用在运行时会产生日志消息。这些消息包含了系统运行的重要信息,如错误、警告、通知等。
2. 日志发送:日志消息通常会被发送到日志管理进程。在 OpenBMC 中,常用的日志管理进程是 systemd-journald(简称 journald )。systemd-journald 负责收集、存储和管理来自系统各个部分的日志消息。
3. 日志同步:rsyslog 进程包含一个名为 imjournal 的模块,该模块负责同步 systemd-journald 中的日志消息。这意味着 rsyslog 能够获取到系统中所有关键事件的日志记录。
4. 日志筛选与格式化:rsyslog 根据其配置文件中的规则,筛选特定的日志消息。同时,根据用户定义的格式,rsyslog 将筛选后的日志消息转换为易于阅读和理解的格式。
5. 日志存储与管理:格式化后的日志消息会被保存到指定的文件中。这些文件通常位于系统的标准日志目录下,如 /var/log。通过这种方式,能确保日志消息的持久化存储,方便后续查看和分析。同时,为避免日志文件过大导致性能问题或存储空间不足,OpenBMC 使用 logrotate 进程来管理日志文件。logrotate 可以根据配置规则定期轮转、压缩、删除旧的日志文件,从而确保日志系统的高效运行。
下面我们将结合实际的案例,介绍各个功能模块的作用和实际使用的操作。
systemd-journald
systemd-journald 是 systemd 项目的一部分,它是一个守护程序,用于收集、存储和检索来自各种系统组件的日志消息。systemd-journald 功能强大,它使用二进制格式在文件系统中存储日志,这允许它快速地将日志转换为文本或 JSON 格式,便于检索和分析。它由以下三部分组成:守护程序(systemd-journald)、配置文件(/etc/systemd/journald.conf)和调试工具(journalctl),同时 Linux 还提供了一个快速生成日志的工具 logger,允许用户或应用程序直接向 systemd-journald 发送日志消息。
日志显示格式有多种,systemd-journald 支持以 JSON 格式输出日志,这使得日志消息更加结构化和易于解析。一条 JSON 格式的日志消息主要由 [KEY:VALUE] 键值对组成,如下所示,主要由时间、消息内容、日志等级、日志产生者等关键信息组成。
在使用 journalctl 查看系统日志时,主要显示 MESSAGE 字段的值,同时,也可以通过添加需要的KEY来筛选所需的信息。当应用层需要记录自定义的日志信息时,可以通过 sd_journal_send 函数调用来实现。下图是 OpenBMC 中产生一条 SEL 消息的实现方式,主要通过 MESSAGE_ID 来标识SEL消息,同时将该函数注册到到 D-Bus 方法 ipmiSelAdd 上,当其他应用调用该函数或者 D-Bus 方法时,即可产生一条 SEL 日志消息到系统中。
systemd 库也提供了 journal 日志的读取遍历的接口,通过 sd_journal_open、sd_journal_get_data、sd_journal_close来完成。在 OpenBMC 环境中,日志管理程序 phosphor-logging 创建 D-Bus 日志正是基于 systemd 库提供的接口。具体来说,phosphor-logging 通过调用 sd_journal_send() 函数向 systemd-journald 守护程序发送一条固定格式的日志消息。然后遍历 journal,获取对应 ID 的日志消息,将其对应属性创建到 D-Bus 上。
总的来说,systemd-journald 是一个功能强大的日志系统,为 systemd 提供了高效的日志收集、存储和查询功能,为系统管理和开发提供了有力的支持。
本期重点介绍了 BMC 日志管理框架和 systemd-journald 模块,下期我们将继续探索 BMC 日志管理模块中的其它功能模块,欢迎大家持续关注。
欢迎大家关注OurBMC社区,了解更多技术干货。
OurBMC社区官方网站:
https://www.ourbmc.cn/