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,便于查找日志内容 这是日志的主体,记录当前正在执行的操作和结果等重要信息
    日志内容:
    源代码位置:日志代码的位置,包括方法名称,源代码文件的目录位置和行号。(这一项不是所有日志都有)
OpenStack 的日志格式
复制代码

 

 

 

[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 操作的消息。
日志与源码;源码方法xxx_rpcapi.yyy()与消息队列
复制代码

 

posted @   雲淡風輕333  阅读(304)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 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框架的用法!
点击右上角即可分享
微信分享提示