instance 从建立到删除的整个生命周期都是由 Nova 管理的。 后面各小节咱们以 instance 生命周期中的不一样操做场景为例,详细分析 Nova 不一样组件如何协调工做,并经过日志分析加深你们对 Nova 的理解。node
在研究 Nova 各个操做以前,咱们先来学习一个重要的内容:OpenStack 日志。
OpenStack 的日志记录了很是详细的细节信息,是咱们学习和 troubleshoting 的利器。web
咱们实验环境使用的是 devstack,日志都统一放在 /opt/stack/logs 目录下,每一个服务有本身的日志文件,从命名上很容易区分。 api
好比 nova-* 各个子服务的日志都以 “n-” 开头: n-api.log 是 nova-api 的日志 n-cpu.log 是 nova-compute 的日志。 运维
Glance 的日志文件都是 “g-” 开头: g-api.log 是 glance-api 的日志 g-reg.log 是 glance-registry 的日志。 socket
Cinder、Neutron 的日志分别以 “c-” 和 “q-” 开头。 学习
对于非 devstack 安装的 OpenStack,日志通常放在 /var/log/xxx/ 目录下。 好比 Nova 放在 /var/log/nova/ 下,Glance 放在/var/log/glance下…… spa
各个子服务的日志文件也是单独保存,命名也很规范,容易区分。 好比 nova-api 的日志通常就命名为 /var/log/nova/api.log,其余日志相似。 debug
OpenStack 的日志格式都是统一的,以下 日志
<时间戳><日志等级><代码模块><Request ID><日志内容><源代码位置> orm
简单说明一下
时间戳 日志记录的时间,包括 年 月 日 时 分 秒 毫秒
日志等级 有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
又例以下面这条日志:
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上 操做,若是出问题直接找管理员就能够了。 但若是你是 OpenStack 的运维和管理人员,日志对你就很是重要了。由于 OpenStack 操做若是出错,GUI 上给出的错误信息是很是笼统和简要的,日志则提供了大量的线索,特别是当 debug 选项打开以后。 若是你正处于 OpenStack 的学习阶段,正如咱们如今的状态,那么也强烈建议你多看日志。日志可以帮助你更加深刻理解 OpenStack 的运行机制。
日志可以帮助咱们深刻学习 OpenStack 和排查问题。但要想高效的使用日志还得有个前提: 必须先掌握 OpenStack 的运行机制,而后针对性的查看日志。 就拿 Instance Launch 操做来讲,若是以前不了解 nova-* 各子服务在操做中的协做关系,若是没有理解流程图,面对如此多和分散的日志文件,咱们也很难下手不是。
对于 OpenStack 的运维和管理员来讲,在大部分状况下,咱们都不须要看源代码。 由于 OpenStack 的日志记录得很详细了,足以帮助咱们分析和定位问题。 但仍是有一些细节日志没有记录,必要时能够经过查看源代码理解得更清楚。 即使如此,日志也会为咱们提供源代码查看的线索,不须要咱们大海捞针。 这一点咱们会在后面的操做分析中看到。