instance 从创建到删除的整个生命周期都是由 Nova 管理的。

通过日志分析加深对 Nova 的理解

 

OpenStack 日志

OpenStack 的日志记录了非常详细的细节信息

 

日志的位置

实验环境是 devstack,日志都统一放在 /opt/stack/logs 目录下,每个服务有自己的日志文件,从命名上很容易区分。

openstack train nova日志 openstack查看日志的命令_日志文件

 

比如 nova-* 各个子服务的日志都以 “n-” 开头:

n-api.log 是 nova-api 的日志

n-cpu.log 是 nova-compute 的日志。

Glance 的日志文件都是 “g-” 开头:

g-api.log 是 glance-api 的日志

g-reg.log 是 glance-registry 的日志。

Cinder、Neutron 的日志分别以 “c-” 和 “q-” 开头。

 

rocky 版本的日志都是存储在 /var/log/messages 里 , /opt/stack/logs 目录下的日志文件是启动 OpenStack 的。

openstack train nova日志 openstack查看日志的命令_xml_02

 

对于非 devstack 安装的 OpenStack,日志一般放在 /var/log/xxx/ 目录下。

比如 Nova 放在 /var/log/nova/ 下,Glance 放在/var/log/glance下……

各个子服务的日志文件也是单独保存,命名也很规范,容易区分。 比如 nova-api 的日志一般就命名为 /var/log/nova/api.log,其他日志类似。

 

日志的格式

OpenStack 的日志格式都是统一的,如下:

<时间戳><日志等级><代码模块><Request ID><日志内容><源代码位置>

 

说明:

时间戳

  日志记录的时间,包括 年 月 日 时 分 秒 毫秒

日志等级

  有INFO WARNING ERROR DEBUG等

代码模块

  当前运行的模块

Request ID

  日志会记录连续不同的操作,为了便于区分和增加可读性,每个操作都被分配唯一的Request ID,便于查找日志内容 这是日志的主体,记录当前正在执行的操作和结果等重要信息

源代码位置

  日志代码的位置,包括方法名称,源代码文件的目录位置和行号

  这一项不是所有日志都有

 

举例说明:

2015-12-10 20:46:49.566 DEBUG nova.virt.libvirt.config [req-5c973fff-e9ba-4317-bfd9-76678cc96584 None None] Generated XML ('<cpu>\n  <arch>x86_64</arch>\n  <model>Westmere</model>\n  <vendor>Intel</vendor>\n  <topology sockets="2" cores="3" threads="1"/>\n  <feature name="avx"/>\n  <feature name="ds"/>\n  <feature name="ht"/>\n  <feature name="hypervisor"/>\n  <feature name="osxsave"/>\n  <feature name="pclmuldq"/>\n  <feature name="rdtscp"/>\n  <feature name="ss"/>\n  <feature name="vme"/>\n  <feature name="xsave"/>\n</cpu>\n',) to_xml /opt/stack/nova/nova/virt/libvirt/config.py:82

 

这条日志可以得知:

代码模块是 nova.virt.libvirt.config,由此可知应该是 Hypervisor Libvirt 相关的操作

日志内容是生成 XML

如果要跟踪源代码,可以到 /opt/stack/nova/nova/virt/libvirt/config.py 的 82 行,方法是 to_xml

openstack train nova日志 openstack查看日志的命令_日志文件_03

 

例如下面这条日志:

2015-12-10 20:46:49.671 ERROR nova.compute.manager [req-5c973fff-e9ba-4317-bfd9-76678cc96584 None None] No compute node record for host devstack-controller

 

这条日志我们可以得知:

这是一个 ERROR 日志

具体内容是 “No compute node record for host devstack-controller”

该日志没有指明源代码位置

 

关于日志的几点说明

日志对最终用户不重要

日志对 OpenStack 的运维和管理人员非常重要;OpenStack 操作如果出错,GUI 上给出的错误信息是非常笼统和简要的,日志则提供了大量的线索,特别是当 debug 选项打开之后

日志能够帮助我们深入学习 OpenStack 和排查问题。

 

要高效的使用日志:

必须先掌握 OpenStack 的运行机制,然后针对性的查看日志。

就拿 Instance Launch 操作来说,如果之前不了解 nova-* 各子服务在操作中的协作关系,如果没有理解流程图,面对如此多而且分散的日志文件,也很难下手的。