openstack日志格式说明
devstack,日志都统一放在 /opt/stack/logs 目录下
非 devstack 安装的 OpenStack,日志一般放在 /var/log/xxx/ 目录下。 比如 Nova 放在 /var/log/nova/ 下,Glance 放在/var/log/glance下……

OpenStack 的日志格式都是统一的: <时间戳><日志等级><代码模块><Request ID><日志内容><源代码位置> 时间戳: 日志记录的时间,包括 年 月 日 时 分 秒 毫秒 日志等级: 有INFO WARNING ERROR DEBUG等 代码模块: 当前运行的模块 Request ID:日志会记录连续不同的操作,为了便于区分和增加可读性,每个操作都被分配唯一的Request ID,便于查找日志内容 这是日志的主体,记录当前正在执行的操作和结果等重要信息 日志内容: 源代码位置:日志代码的位置,包括方法名称,源代码文件的目录位置和行号。(这一项不是所有日志都有)
[req-e7d63060-061e-426e-b3b3-4cec1c0a784c - - - - -]
[req-a5a09023-75d6-48c3-88be-98dafc64b023 7ad71a9654d447419cb6e0cf449a9d8e 45405654b7704f28a28d83815d936dc5 - default default]
Request ID;user ID;project ID;- default default

在日志文件中快速查找有用信息的小窍门: 1.确定一个日志范围:比如tail -f 文件;通过时间戳确定日志范围 2.利用“代码模块”快速定位。比如nova-*自服务都有自己特定的代码模块 nova-api:nova.api.openstack.compute.servers、nova.compute.api、nova.api.openstack.wsgi nova-compute:nova.compute.manager、nova.virt.libvirt.* nova-schedulernova.scheduler.* 3.利用Request ID查找相关的日志信息。 注意:Request ID是跨日志文件的。

日志与源码;源码方法xxx_rpcapi.yyy()与消息队列 ==================================================================================================== 在OpenStack源码中,以xxx_rpcapi命名的对象,表示的就是xxx的消息队列。 xxx_rpcapi.yyy() 方法则表示向 xxx 的消息队列发送 yyy 操作的消息。 self.compute_rpcapi.stop_instance() 的作用就是向 RabbitMQ 上 nova-compute 的消息队列里发送一条 stop instance 的消息。 -------------------------------------------------------------------------------------------------------------------------------------------- 2021-11-20 15:03:56.440 15855 DEBUG nova.compute.api [req-e7f161a9-1a19-44a1-b185-0035c8aa0409 80f373269d7a481b931a9352b42b28b8 f911df6b22d54d34b716efd7a97edf92 - default default] [instance: b78ce7ba-268d-40dd-88c8-4b516e14e4a3] Going to try to stop instance force_stop /usr/lib/python2.7/site-packages/nova/compute/api.py:2442 def force_stop(self, context, instance, do_cast=True, clean_shutdown=True): LOG.debug("Going to try to stop instance", instance=instance) #这里触发dbug日志 instance.task_state = task_states.POWERING_OFF instance.progress = 0 instance.save(expected_task_state=[None]) self._record_action_start(context, instance, instance_actions.STOP) self.compute_rpcapi.stop_instance(context, instance, do_cast=do_cast, clean_shutdown=clean_shutdown) #在OpenStack源码中,以xxx_rpcapi命名的对象,表示的就是 xxx 的消息队列。 xxx_rpcapi.yyy() 方法则表示向 xxx 的消息队列发送 yyy 操作的消息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!